2013-01-16 33 views
5

我有一個開發存儲庫和一個部署存儲庫。部署代碼時,將代碼從dev中檢出,rsync'd部署到工作副本,並提交到部署存儲庫。這些存儲庫因此是分開的,但類似。在兩個git分支之間合併diff並將其應用到工作副本

On dev,我有一個分支。我想將該分支「應用」到部署工作副本。換句話說,我希望將分支上的所有提交(不包括合併)重播到部署存儲庫(如果可能,在一次提交中),或者在分支和主服務器之間進行區別並將其應用到部署工作副本。

我認爲類似的svn的命令是:

svn merge $SVN_REPO/trunk $SVN_REPO/branch/dev_branch deploy_dir 

...其中DEPLOY_DIR甚至不需要成爲一個工作拷貝。

這可能嗎?

+1

只需添加另一個遠程倉庫,並定期進行合併? – zerkms

+0

有一些存儲庫異常會使這個問題變得複雜,包括錯誤的rebase。嘗試定期合併幾乎每個文件都會產生衝突。 –

回答

9

一種方法是從另一個回購獲取分支:

cd <deploy-path> 
git remote add devel <devel-path> 
git fetch devel 

git cherry-pick devel/master...devel/branch # Assuming your branch is based on master 

另一種方法是創建一個補丁,然後應用它:

git diff commitid1 commitid2 > something.patch 
cd deploy 
git apply something.patch 
+0

差異/補丁方法工作完美,因爲有一些我想忽略的祖先異常。由於有一些圖像被添加,我用 git diff --binary c1 c2> something.patch –

+0

有趣的是,沒有「git merge --ignore-ancestry」或類似於上面的svn命令。 –

+0

@Tim是的,合併將無法正常工作。你應該嘗試櫻桃採摘。 – nishantjr