2010-01-26 91 views
190

我想要創建一個回收遠程倉庫的倉庫。如何設置一個使用外部回購子模塊的git項目?

例如,假設jQuery的一個子模塊:

git://github.com/jquery/jquery.git 

什麼是創建與jQuery回購作爲一個子模塊,並加入我自己的外部作爲遠程回購的過程。

此外,一旦這個設置,如果我推/拉到我自己的遠程,外部將保持完好?

+1

當你說你說你想要的jQuery的回購協議是你自己回購的子模塊「上拉」? – ezod 2010-01-26 17:02:27

+0

是的,對不起,如果不明確。我想知道我是如何將它設置爲外部的,同時將更改推送到我自己的遠程 – Tom 2010-01-26 19:43:54

+0

請參見[Git子模塊教程](https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial)在git wiki上。 – 2015-08-04 13:49:51

回答

309
  1. 你有一個項目 - 稱之爲MyWebApp已經有一個GitHub庫
  2. 你想在您的項目中使用jQuery倉庫
  3. 您想將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

*作爲最佳實踐,你應該始終把你的子模塊在自己的目錄,如外部材料。如果你不這樣做,你的根項目目錄會非常快速地變得非常混亂。

+3

很好的解釋! :)另外,「git help submodules」可以幫助你更多的細節,內部等等。 – WhyNotHugo 2012-02-29 05:35:45

+0

@Hugo好點。我將這些信息添加到答案中。 – memmons 2012-03-27 16:04:24

+0

只是爲了澄清,如果我需要在Github上的項目上使用jQuery,將jQuery作爲子模塊添加會更好嗎? – aurbano 2013-01-19 12:35:36

17

您需要知道的大部分內容已經得到解答,所以我不打算解決這個問題,但是,我發現了一小部分通常缺失的信息。如你所知,「git pull」不會更新子模塊,「git submodules update」也不會下載這些子模塊的最新HEAD。

要更新所有子模塊對他們的上游最新版本,你可以使用

git submodule foreach git pull 

如果你經常改變你的子模塊,並有大量的,那麼「混帳的foreach」將成爲非常寶貴的。

0

我認爲@Hugo的答案可能是你需要的,並且工作正常。所以我找到了一個更簡單的方法。

git submodule update --remote 

就是這樣。

因此,一個完整的工作流程可能是:

git clone project-with-submodules 
git submodule init 
git config -l 
git submodule update --remote