2016-04-08 225 views
1

我擁有git倉庫中go/golang項目的完整src-tree。這樣我就可以輕鬆地將完整的項目及其依賴關係克隆到不同的計算機上。git倉庫裏面的git倉庫,通過go獲得 - 轉換成子倉庫

使用go從例如github.com得到時,在我的src-tree中克隆github項目。

是否有一個簡單/標準的方法將此內部git回購轉換爲子模塊?與git submodule add <path>類似的東西?

還是我不得不手動或自動,找到的URL內存儲庫並使用git submodule add <url> <path>

任何參數不使用這種方法?據我所見,優點是我可以完全控制源代碼版本,輕鬆克隆整個項目(包括依賴項),更簡單的方法來更新我依賴/使用go獲取的第三方代碼。

結論 謝謝威爾C和VonC。我最終使用帶有工具govendor的供應商系統。我喜歡這個工具,因爲它的透明度和簡單性 - 它永遠不是必需的工具。此外,Go出售系統滿足了我的主要目標 - 使我的完整項目及其依賴項克隆到不同的計算機變得容易。

回答

2

您所描述的方法似乎會導致更多的維護頭痛。想象一下,每當做出改變,不得不記得做一個git submodule update,然後有向後兼容性問題。

相反,我建議看看Godep作爲依賴工具。另外,在Go 1.5+中,他們已經在試用vendor文件夾來管理依賴關係,您可以找到關於here的更多信息。

從較高的層面來看,Godep版本中存在一些細微差別,但它允許您通過其SHA對特定提交進行有效檢查。 SHA取決於您在GOPATH的實際依賴關係中提交的內容。這也有效地包含了您提到的優點,例如具有一個位於中心位置的目錄與依賴關係及其依賴關係,並且能夠控制要使用的依賴關係的版本。它在嘗試在git submodule s中管理它的時候會少得多。

1

我完全Will Canswer同意,但以防萬一,你還是要引用您的GitHub庫作爲子模塊(在供應商子文件夾),這裏是我做了一個腳本來迅速做到這一點:

它將:

  • go getvendor/src的GitHub庫(通過復位暫時GOPATH到供應商)
  • 識別由go get導入的所有回購(這意味着你的GitHub庫它的依賴),using go list -f
  • 添加這些回購作爲主回購的子模塊,在供應商的子文件夾
  • 乾淨(RM)的vendor/src文件夾,這只是那裏得到的回購。

請參閱vendor.bat

用法:

cd /path/to/your/repo 
vendor github.com/jroimartin/gocui 

,將創建:

/path/to/your/repo/vendor/github.com/jroimartin/gocui 
/path/to/your/repo/vendor/github.com/<other/dependent/repos> 
+0

謝謝你會C和VonC。我最終使用帶有工具govendor的供應商系統。我喜歡這個工具,因爲它的透明度和簡單性 - 它可以非常準確地自動執行我手動使用的步驟,所以它永遠不是必需的工具。 此外,vendoring系統滿足了我的主要目標 - 使我的完整項目及其依賴項克隆到另一臺計算機變得容易。 – runec