經過我git submodule update
它總是檢出相同的提交。例如34561
。git submodule檢出相同的提交
我爲子模塊做了git checkout master
然後git submodule sync
。然後它指向最新的提交a2344
。
但是在update
之後它再次指向提交34561
。
如何更改它?我的意思是爲什麼它決定指出那個提交而不是另一個?
經過我git submodule update
它總是檢出相同的提交。例如34561
。git submodule檢出相同的提交
我爲子模塊做了git checkout master
然後git submodule sync
。然後它指向最新的提交a2344
。
但是在update
之後它再次指向提交34561
。
如何更改它?我的意思是爲什麼它決定指出那個提交而不是另一個?
我的意思是爲什麼它決定指向那個提交而不是另一個?
因爲子模塊總是記錄一個固定的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 fetch --all --prune
git pull origin master
現在你將有最新提交的submodole。
運行提取操作後,使用最新提交更新子模塊下的.git
文件夾。它會確保你有最近的變化。
可以執行:
git submodule foreach git pull origin master
這將更新所有子模塊。
我做的完全一樣(但只是'git submodule foreach git pull')。重點是爲什麼它總是更新到同一個'34561' commit – lapots
Git將SHA1提交ID存儲到存儲庫的數據庫中。使用特定的提交ID鎖定子模塊可確保您的代碼正常工作,並且不會對更新應用任何重大更改。但是,如果您拉取主服務器,您的存儲庫將鎖定最新的提交。 –
'main'項目包含對每個子模塊的簽出版本的SHA-1的引用。這是主項目提交的一部分。
如果您在子模塊中手動更改子模塊的頭部,則需要告知主項目,從現在開始應該使用此SHA-1作爲子模塊。
git commit -a
會做到這一點,因爲主項目會看到submodules頭被更新。
這可能令人驚訝,但它實際上是一個很好的功能。通過檢查主項目的頭部,您基本上可以告訴您的同事現在可以使用較新版本的子模塊。這可以讓人們一起工作,而不會有太大的風險將地毯拉到別人的腳下。 (這就是說,在有子模塊的工作流程中有許多疣,而且你可能應該同意一種方法,並用一些團隊腳本來接受,以避免陷阱)。
問題不是如何得到最新的,但它爲什麼要檢查具體的'34561' commiy – lapots
我需要查看存儲庫以確保它看起來像您的子模塊沒有更新,因此您繼續獲得相同的存儲庫。 你可以在'git子模塊更新'前後發佈你的子模塊的最後一個提交ID' – CodeWizard