[英]Git submodule mess: how to use git submodules with developers not familiar with git?
我對使用git的子模塊功能感到非常沮喪。 要么我仍然沒有做對,要么就是因為我沒想到這一點。 以下項目情況給出:
Project
| .git
| projsrc
| source (submodule)
| proj.sln
在此方案中, 源指向包含所有項目中的公共源數據的另一個存儲庫。 在源代碼下發生了很多開發,也在projsrc下。 遺憾的是, Project指向源子模塊的一些提交,而不是它的實際HEAD。 這是通常的git行為,據我所知。
我已經發現了
git submodule update
只需獲取與主項目一起提交的子模塊版本。 但是,我真的希望始終與子模塊開發保持同步,但是沒有任何真正的線索如何做到這一點。 因此我的問題是:
是否可以將項目附加到子模塊的HEAD,不管這是否會破壞項目的編譯。 我只是不想總是進入子模塊目錄並執行git pull 。 因為我認為我可以放棄在子模塊目錄中完成的更改,因為這很簡單地附加到提交而不是真正的任何分支左右。
請考慮以下限制 :
子模塊指向特定修訂的原因很重要。 如果您指向HEAD,則構建將不可再現 。 也就是說,如果您查看昨天的項目版本,您將永遠不會知道昨天源@HEAD的確切版本。
這就是為什么它總是存儲特定的修訂版sha。
要拉動所有子模塊,您可以使用Easy way pull最新的所有子模塊
我不擅長Git和submodule。 但我認為一些簡單的規則會非常有用。
當拉。 可以嘗試使用腳本將“pull / submodule update”捆綁在一起。 並且只在項目的根部進行。
考慮一下:
進行子模塊更新時,您希望在項目中出現哪一個?
在您的情況下,git的問題(和主要特性)是您將提交和推送視為原子操作。 事實並非如此。 Git是分散的。 沒有共同的HEAD。 您可能有多個具有不同HEAD的存儲庫。
考慮一下:
哪個HEAD你認為“真正的”HEAD?
那么,回答你的問題:如果你想讓公共源子模塊始終與中央存儲庫同步,那么git不是你的選擇。 也許沒有一個VCS可以幫助你。
您應該將git子模塊視為第三方庫,應該使用以下兩個步驟手動更新:
如果要對子模塊進行更改,則應按相反順序執行相同操作:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.