2017-06-21 36 views
0

在我的項目中,我們使用git submodules來管理一些插件。我們的核心項目和子模塊正在並行開發。因此,對於我們而言,每次子模塊向前移動時(必須解決不同開發人員之間的SHA上的衝突等),我們都必須在覈心項目中更新子模塊的SHA,這並不是很好。有沒有辦法讓git子模塊不存儲特定的SHA?

我們想告訴它跟蹤一個分支,讓它成爲那個。但是,似乎子模塊分支跟蹤更容易更新子模塊,但是沒有任何辦法來減輕我們將超級項目指向特定SHA而不是分支的問題。

有人對我們有什麼建議嗎?

+2

這聽起來像你正試圖使用​​Git來管理依賴關係。這不是很好。你可能需要一個真正的依賴管理器。或者如果您發現您必須跟蹤絕對最新的提交,那麼這兩個存儲庫可能會更好。 – Schwern

+2

我不相信git可以做你想做的事。一個提交表示一個特定的代碼版本,並允許一個子模塊指定一個引用會違反這個 - 所以一個提交今天起作用,但是由於子模塊的repo的引用正在移動,我的repo中的相同提交明天停止工作?你可以說版本範圍的依賴管理器也是如此,但是至少你有像semver這樣的工具來限制這個易用性。 (即使如此,你仍然有生產版本的收縮包裝工具。) –

+0

查看https://stackoverflow.com/questions/9189575/git-submodule-tracking-latest – nos

回答

1

一種可能的選擇是使用git子樹而不是子模塊。

使用過一個我不確定我會推薦它作爲一個長期解決方案,但https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtreehttps://legacy-developer.atlassian.com/blog/2015/05/the-power-of-git-subtree會提供一個合理的工作原理,並幫助您決定是否有更好的工作流程滿足您的特定需求。

+0

謝謝,@Jonah!我一定會試驗它。我還想出了一個解決方案,以解決我們的問題,我會將其作爲答案進行發佈,以便對任何人都有幫助。 – Eric

0

正如其他人所指出的,git子模塊並不是爲我們的項目所設計的。但我找到了一種方法來實現我們想要的東西......貼在這裏的情況下,是非常有用的人:

  • 我們不承諾我們的本地更改子模塊索引以避免額外的工作流步驟和頻繁的麻煩合併那些通過git GUI無法很好處理的索引的衝突。
  • 我們然後標子模塊的文件夾爲「假設不變」,其中隱藏我們當地的變化,使得我們可以有效地忽略與指數的變化

所以,這給了我們什麼,我們想要......一個子模塊允許新用戶遞歸克隆所有相關插件並通過git submodule <command>進行批量操作,但不會跳過我們不想要的固定提交SHA。

相關問題