我有一個項目SubProj,我想在MainProj中包含一個子模塊。但是,我想確保任何版本的MainProj都包含特定版本的SubProj以確保滿足所有依賴關係。有沒有辦法在項目標籤中包含特定版本的git子模塊?
換句話說,當我標記MainProj的特別承諾爲新版本V1.0,我也想包括,例如, SubProj V1.3,以便每當有人簽出MainProj 1.0時,子模塊將始終初始化爲V1.3,而不是SubProj HEAD當時指向的任何提交。
這可能嗎?
我有一個項目SubProj,我想在MainProj中包含一個子模塊。但是,我想確保任何版本的MainProj都包含特定版本的SubProj以確保滿足所有依賴關係。有沒有辦法在項目標籤中包含特定版本的git子模塊?
換句話說,當我標記MainProj的特別承諾爲新版本V1.0,我也想包括,例如, SubProj V1.3,以便每當有人簽出MainProj 1.0時,子模塊將始終初始化爲V1.3,而不是SubProj HEAD當時指向的任何提交。
這可能嗎?
當然可以這樣做,但這不能用一個命令完成 - 完成種解決方案。你將不得不
post-checkout
鉤您的用戶必須下載並添加到他們的存儲庫中的.git/hooks
目錄中,以便處理所有這些問題。不幸的是,我現在不能認爲任何簡單的解決方案的。
,如果你需要做任何額外的東西,我不認爲。
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。如果有人只是檢查這個主要回購的舊版本,然後在子模塊的初始化/更新時,他會得到完全相同的內容,而不是子模塊的最新狀態。
是不是在結賬後?我認爲post-receive是一個服務器端鉤子 – Seraph
你說得對,對不起。 –