2011-12-01 262 views

回答

22

爲了有一個混帳回購協議「內部」另一個,看git的子模塊:http://git-scm.com/book/en/Git-Tools-Submodules

通過使pychargify Django項目的一個子模塊,Django項目的具體版本可以與您pychargify項目的特定修訂相關。這可能非常有用。

我不確定您所描述的方法具體是什麼危險,但它不會通過我的氣味測試。我建議使用專門爲這種類型設計的Git功能(子模塊)。

18

Git有一個在另一個倉庫中的功能:submodules

git submodule add https://github.com/getyouridx/pychargify.git 

請務必閱讀子模塊的完整文檔,因爲所涉及用他們一些怪癖,而需要採取的做自己的存儲庫的全新副本時初始化子模塊的額外步驟。

另請注意,所有子模塊命令必須在存儲庫的根目錄中完成。

+0

偉大的答案謝謝!不要以爲你知道把它安裝在子目錄中的技巧。需要在django應用程序,這不是根目錄... – null

+0

'git submodule添加https://github.com/getyouridx/pychargify.git我的應用程序/ pychargify /'給我「我的應用程序/ pychargify /已存在於索引「 – null

+0

@AdamGamble中,您可能已在存儲庫中有一個」my-app/pychargify「文件夾,您需要刪除它以添加子模塊。 –

10

Git自動忽略,甚至不允許你添加任何名爲.git的文件/文件夾。所以你可以在你的倉庫裏添加一個倉庫並且在倉庫裏工作。但是,您可能必須忽略內部回購文件夾pychargify

當你想與其他將克隆它的人共享回購時,需要子模塊。如果你只是在考慮克隆內部回購和在沒有其他人蔘與的情況下處理本地回購,或者你不想要在其他地方也有回購,你並不需要子模塊。

+1

即使我需要與其他人分享內部回購,只是進入該回購併提交,推或拉是不行的? – qed

4

Git的子樹

的Git submodules是一種常見的方式,獲得多地自介紹,爲了應對其中一個可能要到另一個項目(回購)中添加一個項目(回購)的情況下,正如其他答案已經正確描述。

儘管如此,有人可能會爭辯說,子模塊的方式不是唯一的方式,偶爾也不是正確的方式,這取決於已建立的工作流程,有幾個原因,我不打算分析,並在幾頁中簡要提及如thisthis。最重要的無疑是這樣的:

當混帳落入衝突解決模式,它仍然沒有更新的子模塊的指針 - 這意味着,當你解決衝突後提交的合併,你遇到了同樣的問題。 ..:如果你忘了運行git子模塊更新,你剛剛還原了任何子模塊提交你合併的分支。

當然,在一個完美的工作流程中,這絕不會發生。

另一個重要的原因是流行的PyCharm IDE(當寫這篇文章時,有一個非常有用的old issue),也有可能是其他人不能完全實現git子模塊,編碼器將失去其中的漂亮功能IDE顯示子模塊中所有已更改的行。

因此,處理此問題的替代方法是使用子樹。注意子樹和subtree merging並不完全一樣,但這又是另一回事。第2版​​中出色的Progit book簡要介紹了後者,但前者不是一個參考。

所以在一個實際的例子,爲了應付下關注的情況下,讓承擔subproject在一個project消耗:

$ git remote add subproject_remote (url) 
# subproject_remote is the new branch name and (url) where to get it from, it could be a path to a local git repo 

$ git subtree add —-prefix=subproject/ subproject_remote master 
# the prefix is the name of the directory to place the subproject 

$ git commit -am "Added subproject" 
# possibly commit this along with any changes 

如果子項目的變化,他們拉進project

git subtree pull —prefix=subproject subproject_remote master 

...或相反(如果變化在subproject所作的project內側):

git subtree push —prefix=subproject subproject_remote new_branch 

在此link的分析,而是嘮嘮教程。

此功能已得到了一些缺點,以及,例如很多人覺得麻煩,更復雜的工作流程,但這又取決於特定的既定工作流程。

1

添加包含Git項目中的另一個Git項目工作,你可能期望一個文件夾:它們之間沒有直接的互動,你可以在一個目錄或其他工作獨立提交更改。您可以讓「父項目」項目完全忽略內部文件夾,也可以從子項目文件夾中提交選定的文件,就好像它們是父項目的一部分一樣。

如果您通過簡單地在一個目錄或其他工作做後者,然後在修改雙方的Git項目,修改後,可以看到一個文件,你可以獨立管理這些變化(提交更改)。

我假設您在這裏使用命令行工具,但我相信XCode 7可能會理解這種情況並在文件上顯示更改註釋,只要這些文件被修改爲一個或兩個git存儲庫。

我發現上面的程序比處理子模塊簡單,但其他人都談到了如何使用這些,所以你可能需要比較。