我想要創建一個回收遠程倉庫的倉庫。如何設置一個使用外部回購子模塊的git項目?
例如,假設jQuery的一個子模塊:
git://github.com/jquery/jquery.git
什麼是創建與jQuery回購作爲一個子模塊,並加入我自己的外部作爲遠程回購的過程。
此外,一旦這個設置,如果我推/拉到我自己的遠程,外部將保持完好?
我想要創建一個回收遠程倉庫的倉庫。如何設置一個使用外部回購子模塊的git項目?
例如,假設jQuery的一個子模塊:
git://github.com/jquery/jquery.git
什麼是創建與jQuery回購作爲一個子模塊,並加入我自己的外部作爲遠程回購的過程。
此外,一旦這個設置,如果我推/拉到我自己的遠程,外部將保持完好?
子模塊真的很容易引用和使用。假設你已經有MyWebApp設置爲回購協議,從終端發出以下命令:
cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery
這將創建一個名爲externals/jquery
目錄*並將其鏈接到GitHub的jQuery的存儲庫。現在,我們只需要初始化子模塊和複製的代碼吧:
git submodule update --init --recursive
您現在應該已經克隆到子模塊的所有最新的代碼。如果jquery repo發生變化,並且想要拉取最新的代碼,只需再次發出submodule update
命令。請注意:在我的項目中,我通常有許多外部存儲庫,所以我總是將repos歸入「外部」目錄下。
在線Pro Git Book有一些關於子模塊(和一般git)的一些很好的信息,以易於閱讀的方式呈現。或者,git help submodule
也將提供良好的信息。或者看看git wiki上的Git Submodule Tutorial。
我注意到這個博客條目其中談到子模塊,並比較他們顛覆的SVN:外部對象機制:http://speirs.org/blog/2009/5/11/understanding-git-submodules.html
*作爲最佳實踐,你應該始終把你的子模塊在自己的目錄,如外部材料。如果你不這樣做,你的根項目目錄會非常快速地變得非常混亂。
很好的解釋! :)另外,「git help submodules」可以幫助你更多的細節,內部等等。 – WhyNotHugo 2012-02-29 05:35:45
@Hugo好點。我將這些信息添加到答案中。 – memmons 2012-03-27 16:04:24
只是爲了澄清,如果我需要在Github上的項目上使用jQuery,將jQuery作爲子模塊添加會更好嗎? – aurbano 2013-01-19 12:35:36
在我發現http://github.com/evilchelu/braid最終它似乎適合與我沒有料到子模塊和遙控器的工作
您需要知道的大部分內容已經得到解答,所以我不打算解決這個問題,但是,我發現了一小部分通常缺失的信息。如你所知,「git pull」不會更新子模塊,「git submodules update」也不會下載這些子模塊的最新HEAD。
要更新所有子模塊對他們的上游最新版本,你可以使用
git submodule foreach git pull
如果你經常改變你的子模塊,並有大量的,那麼「混帳的foreach」將成爲非常寶貴的。
我認爲@Hugo的答案可能是你需要的,並且工作正常。所以我找到了一個更簡單的方法。
git submodule update --remote
就是這樣。
因此,一個完整的工作流程可能是:
git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
當你說你說你想要的jQuery的回購協議是你自己回購的子模塊「上拉」? – ezod 2010-01-26 17:02:27
是的,對不起,如果不明確。我想知道我是如何將它設置爲外部的,同時將更改推送到我自己的遠程 – Tom 2010-01-26 19:43:54
請參見[Git子模塊教程](https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial)在git wiki上。 – 2015-08-04 13:49:51