2011-08-22 136 views
10

我有一個用git管理的django項目。我是git推送給我的主機。現在,我希望能夠將其中一個目錄(包括所有子目錄)推送到另一個git庫。如果可能的話,怎麼可能?是否有可能在另一個git倉庫中擁有一個git倉庫

編輯:所以我希望該目錄本身是一個git回購。

回答

21

你可以看看Git是對submodules支持。您可以將第二個存儲庫作爲子模塊添加到主項目中,例如與像命令:

git submodule add git://wherever/blah.git library-code 
git commit -m "Added a new submodule called 'library-code'" 

當您更改到library-code子目錄,就好像父庫不存在 - 你可以改變origin使用,你可以把在運輸,然後推就好像它是完全獨立。

要指定您希望子模塊處於特定的版本,您應該更改爲子模塊並使用git checkout切換到正確的版本。然後,您更改備份到主存儲庫和舞臺,並提交新的子模塊版本:

git add library-code 
git commit -m 'Change the submodule version' 

主要倉庫的樹只是存儲的子模塊應該在版本,所以當你的主推庫,它不會推送子模塊中的任何文件。

爲了這個子目錄分離出來,同時保留歷史記錄,您將需要克隆原來的存儲庫和用戶git filter-branch重寫歷史,在這個答案說明:

然後,您可以將它推送到新創建的存儲庫GitHub存儲庫,返回到您的原始項目,刪除子目錄,並用上述子模塊替換它。

如果你對git概念不是很熟悉,那麼這可能對你很困難 - 我建議事先閱讀git子模塊。

+2

我已經在我的子目錄中有代碼,所以我想將它們轉換爲git repo,並將它們推送到新的遠程回購(例如github)。你能舉一個例子嗎?我很抱歉,我在這些東西是如此新手:) – yasar

+1

你想保存在子目錄中的一切的歷史? –

+0

當我將更大的回購推向其他遠程回購時,子模塊又如何?這是否包含子模塊的文件? – yasar

1

當您對特定目錄進行更改時,對這些更改進行暫存並提交併推送,您實際上只是「推送」該目錄。

如果其他Git倉庫只有你想推送的目錄,這就是爲什麼你想把它作爲倉庫本身,你可以看看Git Submodules