2013-07-20 50 views
2

我是新來的集市,但很熟悉Git。我試圖瞭解基礎知識。如何從舊版本創建新的提交?

假設我有一個分支,其歷史是這樣的:

* 3 bar 
| 
* 2 foo 
| 
* 1 initial commit 

我有一系列的我想變成提交補丁,但他們在一箇舊的版本。我想創建提交關閉舊的版本,然後合併結果回到結果圖應該是這樣的:

* 4 merge 
|\ 
| * 2.1.3 apply patch #3 
| | 
| * 2.1.2 apply patch #2 
| | 
| * 2.1.1 apply patch #1 
| | 
* | 3 bar 
|/ 
* 2 foo 
| 
* 1 initial commit 

如何做到這一點與bzr

使用Git,我會做這樣的事情:

git checkout -b import-patches master^ 
for p in 1 2 3; do 
    git apply --index /path/to/"${p}".patch 
    git commit -m "apply patch #${p}" 
done 
git checkout master 
git merge import-patches 
git branch -d import-patches 

回答

2

不同的Git,BZR具有使用一個工作每個分支目錄,而不是使用一個工作每庫目錄的模型(除非你使用的共位於分支機構)。您的示例的基本工作流程大致相同:

首先,將當前分支關閉到新目錄../import-patches。您可以使用排除版本號或last:n符號來指代從一個分支的頭開始修訂(或直接使用版本號):

bzr branch . ../import-patches -r last:2 

然後,轉到新的分支目錄並應用補丁( BZR補丁可能需要-p/--strip選項):

pushd ../import-patches 
for p in 1 2 3; do 
    bzr patch /path/to/"${p}".patch 
    bzr commit -m "apply patch #${p}" 
done 

現在,返回到原來的分支目錄和合並。你需要提交合並在一個單獨的步驟:

popd 
bzr merge ../import-patches 
bzr commit 

注意,每個分支都會有一個獨立的存儲庫,除非你設置與bzr init-repo共享的存儲庫。共享存儲庫只是一個目錄,其修訂數據存儲在其.bzr子目錄和其他包含單個分支(包括嵌套子目錄)的子目錄中;那些分支會將所有常見修訂存儲在共享存儲庫中。如果您熟悉git-new-workdir,這與主存儲庫是一個沒有工作樹的Git存儲庫相似,每個子目錄都是一個工作樹,其初始化爲git-new-workdir並與一個單獨的分支關聯。

同址分支機構允許您在同一個目錄中擁有多個分支機構;這需要Bzr 2.5.x的colo插件;位於同一地點的分支應該是2.6的核心功能,但可能不完全穩定。

+0

感謝您將'bzr'命令與'git'聯繫起來,這非常有幫助。 –

相關問題