2016-03-01 57 views
0

我有一個項目SubProj,我想在MainProj中包含一個子模塊。但是,我想確保任何版本的MainProj都包含特定版本的SubProj以確保滿足所有依賴關係。有沒有辦法在項目標籤中包含特定版本的git子模塊?

換句話說,當我標記MainProj的特別承諾爲新版本V1.0,我也想包括,例如, SubProj V1.3,以便每當有人簽出MainProj 1.0時,子模塊將始終初始化爲V1.3,而不是SubProj HEAD當時指向的任何提交。

這可能嗎?

回答

0

當然可以這樣做,但這不能用一個命令完成 - 完成種解決方案。你將不得不

  1. 要麼必須發佈爲您的用戶遵循通過工作流程,
  2. 發佈一個別名,那麼用戶可以一次添加到各自的倉庫或
  3. 寫一個Git post-checkout鉤您的用戶必須下載並添加到他們的存儲庫中的.git/hooks目錄中,以便處理所有這些問題。

不幸的是,我現在不能認爲任何簡單的解決方案的。

+0

是不是在結賬後?我認爲post-receive是一個服務器端鉤子 – Seraph

+0

你說得對,對不起。 –

0

,如果你需要做任何額外的東西,我不認爲。

GIT-子模塊的理念是存儲該特定犯子模塊的SHA值相對於主回購的任何狀態。這就是說,我的下面的命令將明確表示我們不需要做任何額外的事情。

讓我們找到當前子模塊提交ID

$ cd <sub-module-directory> 
$ git rev-parse HEAD # Current Latest Head, let's say it `05a6fa8abb96fddf8c44cdf2a07cfbf1c7f8c268` 

讓我們去到以前版本的主倉庫

$ cd main-repo-directory 
$ git log #Pick any previous commit sha id from the list, say <main-prev-commit-sha> 
$ git reset --hard <main-prev-commit-sha> 

讓我們刪除子模塊,並重新更新

$ rm -rf <sub-module-directory> 
$ git submodule update 

讓我們找到新的子模塊提交ID

$ cd <sub-module-directory> 
$ git rev-parse HEAD # New Latest Head, let's say it `ca3efe77286aa737d5b63747dfe9a6b6531e3bf3` 

現在,我們發現子模塊的commit sha對主repo的不同版本是不同的。每當使用全新結帳進行初始化/更新時。

,因此,恕我直言,當主回購將被標上的版本,則隱含我們也凍結了當時的子模塊的SHA-ID。如果有人只是檢查這個主要回購的舊版本,然後在子模塊的初始化/更新時,他會得到完全相同的內容,而不是子模塊的最新狀態。

相關問題