2017-07-27 117 views
1

我有兩個相同的git倉庫的叉子,我想檢查它們是否完全相同,因此可以安全地刪除其中一個而不會丟失任何信息。比較兩個git倉庫包括所有分支

雖然我知道如何比較單個分支,但我想詢問是否有一種簡單的方法來比較所有分支,標籤等。

回答

2

做到這一點的最快捷的辦法就是增加一個第二遠程和比較git ls-remote輸出爲每個:

diff -u <(git ls-remote --refs origin) <(git ls-remote --refs other) 

--refs選項刪除pseudorefs像HEAD,其可在各遙控器上的不同的分支點。

您甚至不需要將遠程設備添加到本地結帳;你可以運行類似git ls-remote https://github.com/username/repo.git

如果看不到輸出,遙控器是相同的。如果您在差異中看到刪除,對應於origin上的分支但不在other上;增加在other,但不在origin;並且修改是分支/標記都存在於兩者上的點,而每個點上的點不同。

+0

請注意,他的問題的一部分:「因此可以安全地刪除其中一個而不會丟失任何信息」,這個簡單的比較無法解答。一個遙控器可能在另一個遙控器的前面,這使得根據OP可以安全地刪除「另一個」,但這種簡單的比較不會告訴你這一點,它只會告訴你它們確實不同。 –

+0

我會盡可能說是否有差異,那麼刪除它也是不安全的。這個問題只是詢問它們是否相同,而不是知道一個是否先於另一個; A上的某些分支領先於B,而B上的某些分支領先於A,所以需要一些更深入的分析,比如'git branch --contains '。 – cmbuckley

1

在倉庫A然後遠程,內部A添加存儲庫B,從B獲取:

$ git remote add B {local-path-or-url-of-B} 
$ git fetch B 

現在,所有的樹枝,目前在B標籤也存在於A,很容易比較的地方分支機構(使用git branch -v找到它們)和遠程分支機構(git branch -r -v)。

使用GUI Git客戶端使得比較更容易。

-

在這一點上,幾乎一切,是在B也是A(藏匿丟失)。您可以使用rebase,merge,cherry-pick等將從B導入的分支和提交附加到A中的分支(反之亦然)。

可以刪除B庫,但直到你確信一切是在B不要取下B遠程的A和你A需要可以使用標籤或A分公司達成。

0

這取決於你是什麼意思的「等等」 - 它不會幫助你鉤子,.git/config和除refs外的其他任何東西 - 但比較git show-ref在這兩個存儲庫中的輸出可能是一個簡單的方法來檢測它們是否有差異。