2017-05-09 112 views

回答

-1

不能保證存在這樣的提交。如果確實存在,它可能不是唯一的(可能不止一個)。

當然,不能保證任何東西都能正常工作,但這不是我在這裏所說的。子模塊背後的設計原則是另一種方式:超級項目,即您的案例中的「模塊A」,被認爲是控制項目。您可以查看某個給定的超級項目提交分支名稱,標記名稱或原始哈希ID或其他內容,並且在該提取的提交中,超級項目包含子模塊中特定提交的哈希ID。因此,對於模塊A中的每個提交(或者每個使用B的提交),有一些B的特定哈希ID。讓我們假設A中只有三個提交,編號爲A1,A2,和A3,三個提交B,編號爲B1,B2和B3。如果我們檢查A1,我們得到一個B號碼。假設那是B2。如果我們檢查A2,我們會得到另一個B號碼。再說,這是B2。最後,如果我們檢查出A3,我們會得到另一個B編號......這可能是B2再次。

在這種情況下,對應於提交B1和B3的「A」提交的集合都是空的,並且對應於B2的「A」提交的集合具有基數3.對於某些B提交,是提交,對於其他B提交,沒有唯一提交。

這是典型的子模塊的使用也是如此,所以給出了一些提交哈希,這是不可能找到相應一個提交。但是,您可以查看任意數量的A提交併找到其對應的哈希值。這些是gitlink提交樹中的條目請參閱How can I get a git submodule's associated commit ID from a past commit in the parent clone?(注意基於git rev-parse的答案,如果您知道子模塊的gitlink的特定路徑,那麼該方法就行)。如果您創建了所有映射的完整表格,則可以很容易地反演該表格並找到給定值的所有值,從而確定該集合是否爲空。

+0

不是我的問題的答案,對不起。前四段我知道,解決了我的問題的措辭,所以人們不會關注這個問題。最後一段解決了相反的問題:給定了A的提交,哪個提交了B?但是,我知道該怎麼做。只有末尾暗示了我所需要的東西,卻沒有提出實際建議的方法。 – Charles

+0

這是因爲*不是*的方法! – torek

+0

真的嗎?在整個git及其所有克隆,擴展和附加組件中?好。那麼我們不能設計一個自制的東西,我們循環遍歷A的所有提交併篩選出我想要的B的相應提交,然後輸出A提交,這些提交有一個命中?即使沒有,也沒關係。我自己沒有足夠的git bash知識。 – Charles