2015-05-20 85 views
2

經過我git submodule update它總是檢出相同的提交。例如34561git submodule檢出相同的提交

我爲子模塊做了git checkout master然後git submodule sync。然後它指向最新的提交a2344

但是在update之後它再次指向提交34561

如何更改它?我的意思是爲什麼它決定指出那個提交而不是另一個?

回答

2

我的意思是爲什麼它決定指向那個提交而不是另一個?

因爲子模塊總是記錄一個固定的SHA1在父回購提交作爲gitlink(一個special entry in the index)。
這就是爲什麼一個子模塊始終爲恢復了detached HEAD branch

您可以配置一個子模塊遵循一個分支

cd /path/to/your/parent/repo 
git config -f .gitmodules submodule.<path>.branch <branch> 

子模塊仍然會恢復到一個固定的提交,但隨後可以被更新:

git submodule update --remote 

確保添加並提交父回購新gitlink(因爲更新子模塊的最新一麩皮ch會更改其SHA1,記錄在父回購中作爲gitlink)。
如果你不這樣做,你會發現你的子模塊回到之前的狀態,然後在git submodule update --init

查看更多「Git submodules: Specify a branch/tag」。

0

你需要進入該文件夾,子模塊和執行:

git fetch --all --prune 
git pull origin master 

現在你將有最新提交的submodole。
運行提取操作後,使用最新提交更新子模塊下的.git文件夾。它會確保你有最近的變化。

+0

問題不是如何得到最新的,但它爲什麼要檢查具體的'34561' commiy – lapots

+0

我需要查看存儲庫以確保它看起來像您的子模塊沒有更新,因此您繼續獲得相同的存儲庫。 你可以在'git子模塊更新'前後發佈你的子模塊的最後一個提交ID' – CodeWizard

0

可以執行:

git submodule foreach git pull origin master 

這將更新所有子模塊。

+0

我做的完全一樣(但只是'git submodule foreach git pull')。重點是爲什麼它總是更新到同一個'34561' commit – lapots

+1

Git將SHA1提交ID存儲到存儲庫的數據庫中。使用特定的提交ID鎖定子模塊可確保您的代碼正常工作,並且不會對更新應用任何重大更改。但是,如果您拉取主服務器,您的存儲庫將鎖定最新的提交。 –

1

'main'項目包含對每個子模塊的簽出版本的SHA-1的引用。這是主項目提交的一部分。

如果您在子模塊中手動更改子模塊的頭部,則需要告知主項目,從現在開始應該使用此SHA-1作爲子模塊。

git commit -a 

會做到這一點,因爲主項目會看到submodules頭被更新。

這可能令人驚訝,但它實際上是一個很好的功能。通過檢查主項目的頭部,您基本上可以告訴您的同事現在可以使用較新版本的子模塊。這可以讓人們一起工作,而不會有太大的風險將地毯拉到別人的腳下。 (這就是說,在有子模塊的工作流程中有許多疣,而且你可能應該同意一種方法,並用一些團隊腳本來接受,以避免陷阱)。

相關問題