2014-03-05 73 views
2

我有兩個項目,ProjectAProjectB。他們每個人都有它的git回購。這些項目有許多相同的文件。這些文件位於ProjectA項目B中名爲「common」的文件夾中。下面是文件的例子:Git子樹。兩個存儲庫中的一個常用文件夾

項目A

... 
cat-folder 
dog-folder 

common 
    commonFile1 
    commonFile2 

fish-file.php 
squirrel-file.txt 
... 

項目B

... 
potato-folder 
apple-folder 

common 
    commonFile1 
    commonFile2 

tomato-file.xml 
pineapple-file.csv 
... 

我在兩個項目。我可能會對在ProjectAProjectB上運行的常見文件進行更改。我希望在ProjectA中做出的常見文件更改也出現在ProjectB(反之亦然)的常見文件中。 因此,我希望兩個項目中的「common」文件夾始終保持最新幷包含相同的文件。

爲此,我使用git subtree。我創建了第三回購「共回購」,把那裏的「共同」文件夾中的所有文件,然後刪除「共同」文件夾從兩個項目。然後,在每一個項目我做這個:

$ cd /path/to/ProjectA  # or ProjectB 
$ git remote add common-repo https://[email protected]/url/of/common-repo 
$ git fetch common-repo 
$ git subtree add --prefix=common/ common-repo master --squash # this command adds the "common" folder with my common files to the current project 

然後,如果我做的共回購變化和推動他們,我可以easely拉他們到項目A項目B

$ cd /path/to/ProjectA  # or ProjectB 
$ git pull -X subtree=common common-repo master  # this pulls changes from common-repo 

但是,當我在ProjectA(或Proj)工作的「common」文件夾中更改文件ectB)並嘗試將其推送到common-repo

$ cd /path/to/ProjectA  # or ProjectB 
$ git subtree push --prefix=common common-repo master  # !!!! 

最後的命令推動項目A共回購的所有文件,包括它的非公共文件!

我怎樣才能推共同回購只有「共同」文件夾的文件? 或者我可能會做一些絕對錯誤的事情?

回答

1

而不是使用:

git pull -X subtree 

嘗試使用subtree pull命令。據說它是由沿着subtree push和其他subtree子工作:

git subtree pull --prefix=common common-repo master 
+0

命令「混帳子樹拉前綴=尋常回購大師」的作品了。但是,在「子樹推動」之後,仍然推動整個項目,而不是唯一的「普通」文件夾。 –

+0

嘗試先做一個'subtree split'來查看正在創建的內容,如果有任何錯誤,它可能有助於排查故障。 'subtree push'只是split分支的簡寫,後面是分支分支的'push'。 – LopSae

相關問題