比较两个git存储库,包括所有分支

时间:2017-07-27 07:59:10

标签: git

我有两个同一个git存储库的分叉,我想检查它们是否完全相同,因此可以安全地删除其中一个而不会丢失任何信息。

虽然我知道如何比较单个分支,但我想问一下是否有一种比较所有分支,标签等的简单方法。

3 个答案:

答案 0 :(得分:2)

最快的方法是添加第二个遥控器并比较git ls-remote的每个输出:

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

--refs选项会删除HEAD之类的伪目标,这些伪目标可能指向每个遥控器上的不同分支。

您甚至不需要将遥控器添加到本地结帐;你可以运行类似git ls-remote https://github.com/username/repo.git的东西。

如果看不到输出,则遥控器完全相同。如果您看到差异中的删除,则对应origin上的分支,但不会other上的分支;添加内容在other上,但不在origin上;和修改是两个分支/标记存在的位置,但每个分支/标记的位置不同。

答案 1 :(得分:1)

将存储库B添加为存储库A中的远程存储库,然后在A内,从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的{​​{1}}远程,直到您确定A中的所有内容并且您需要可以使用B的标记或分支来访问A

答案 2 :(得分:0)

这取决于“依此类推”是什么意思 - 它不会例如帮助你使用钩子,.git / config以及除refs之外的其他任何东西 - 但是比较两者中git show-ref的输出存储库可能是一种检测它们是否不同的简单方法。