簡體   English   中英

如何有效地使用git存儲庫/子模塊用於具有多個依賴項的C ++產品?

[英]How to effectively use git repositories / submodules for a C++ product that has many dependencies?

我對Git很新,還在搞清楚......我想我終於理解了整個分支/合並方面。 但我仍然不確定處理項目依賴性的最佳解決方案是什么。 什么是最佳做法? 這必須是一個常見問題,但我找不到一個好的教程或最佳實踐。

假設我有一個依賴於其他幾個C ++庫的C ++產品,最終構成了一個復雜的依賴圖。 圖書館如:其他內部開發的C ++庫,公共開源庫,現成的閉源庫

最終的C ++產品的源代碼依賴於其依賴項的輸出以進行編譯。 這些產出包括:

  • 一系列C ++頭文件(注意C ++實現文件不存在)
  • 一組已編譯的二進制文件(LIB文件,DLL文件,EXE文件等)

我的理解是我應該將每個庫都放在自己的存儲庫中。 然后聽起來像Git的子模塊主要是我們正在尋找的。 http://chrisjean.com/2009/04/20/git-submodules-adding-using-removing-and-updating/上的文章似乎是一個很好的介紹,我幾乎可以理解。 例如,我可以將我的主項目存儲庫引用到特定的外部Git存儲庫作為子模塊/依賴項。 C ++代碼可以在相應的子模塊目錄中“#include”頭文件。 主產品/存儲庫中包含的構建腳本可以設想繼續遞歸編譯所有子模塊。

好了,現在問題是:

您通常如何緩存每個存儲庫的二進制文件? 我們的一些依賴項需要數小時才能編譯,並且不會經常更新。 通過上面的方案,我可以從服務器克隆/檢查一個高級項目來修復一個小bug。 據我了解,我也被迫克隆構成這些開源依賴項的所有數千個文件 - 我擔心這可能需要一些時間(特別是在Windows上)。 更糟糕的是,我不會被強制重新編譯每個子模塊,即使幾個月沒有人改變過這個子模塊嗎? (似乎每個開發人員計算機上的某種本地“哈希表”方案將變更集ID鏈接到一組已編譯的二進制文件將會很方便...)

(我之前在幾年前工作過的一家商店使用的是Mercurial - 但是所有代碼 - 內部項目等等都被整合到一個巨大的巨型存儲庫中,你必須在一個巨大的單片構建腳本中構建所有東西 。從服務器克隆新創建的分支。當我們完成修復/新功能並與上游合並時,我們刪除了該特定分支的本地存儲庫。)

我們正在Windows上進行開發,但最終將分支到其他非Microsoft平台 - 因此可移植性非常重要。

通常這是一個壞主意,但為什么不檢查子模塊中的二進制文件以及不經常更改的子模塊的編譯代碼? 這樣,獲取將拉下垃圾箱,當您使用更改的二進制文件編譯新版本的依賴項時,您將看到二進制文件顯示在git status輸出中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM