2011-05-13 98 views
1

我有一個包含單個子模塊(repo2)的git項目(repo1)。 我想實現的是標籤我的項目使用了我的子模塊的一個較舊的提交(如HEAD - 3)。用git標記一個子模塊的舊提交

我試着用子模塊簽出我想要的提交,但結帳是錯誤因爲在我的項目中提交不會跟蹤正確的修訂。 我想我的子模塊復位到提交我想,提交項目,然後拉子模塊,並承諾項目,這也是錯誤的,因爲:

$ git submodule update 
fatal: reference is not a tree: 2c3d1a5936aa9469ecc1442cd4b101e1bbd3aada 
Unable to checkout '2c3d1a5936aa9469ecc1442cd4b101e1bbd3aada' in submodule path 'repo2' 

會是什麼是最好的 - 以及最好的 - 程序?


Git submodule head 'reference is not a tree' error給出了一個答案的開始,但它劇照鏈接repo2的HEAD,而不是選擇提交...

現在假設標籤做的,我怎麼能告訴我repo1到設置repo2處於正常狀態的標籤:

git checkout 0.0.1 

根據git submodule update,一個簡單的

git submodule update 

應該就足夠了。它不檢查我的子模塊到指定的提交。爲什麼?那是... 錯誤

回答

2

這個問題似乎很難,但它不是 - 從這個方法。

完整的過程,從一個子模塊(repo2)的git repo(repo1)開始。現在

$ git clone [email protected]:myproject.git 
$ cd myproject 
$ git submodule update --init 

,如果我需要標記的老犯我repo2的,這裏就是我想要做的:

$ cd repo2 
$ git checkout SOMECOMMITHASHORTAGORELSE 
$ cd .. 
$ git add repo2 

add ING重要的是要更新gitlink到repo2的提交哈希

$ git commit repo2 
$ git tag TAGNUMBER 
$ git push (--tags if you want to push the tag also) 

現在,爲什麼submodule update沒有工作?事實是我一直在試圖檢出提交相關聯repo1的

$ git checkout TAGNUMBER 
$ git submodule update 

這沒有工作,只是因爲(自我提醒)標籤我忘了:

人不得標記之後承諾

因此,這裏沒有真正的伎倆,只是我們中的一些人可能會再次發生的一個小陷阱,希望他們會在這裏結束。