获取两个存储库之间的区别

我们怎样才能得到两个git仓库之间的区别?

场景:我们有一个repo_a和repo_b。 后者是作为repo_a的副本创build的。 之后的两个版本库都有了并行的发展。 有没有一种方法可以列出这两个版本库的当前版本的差异?

在repo_a中:

git remote add -fb path/to/repo_b.git git remote update git diff master remotes/b/master git remote rm b 

一旦你在一个仓库中有两个分支,你可以做一个git diff 。 把它们放在一个仓库里就像

 git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/* 
 git diff master remotes/b 

这是不正确的。 remotes/b是一个遥远的,但不是一个分支。

要做到这一点,我必须这样做:

 git diff master remotes/b/master 

您可以首先添加其他回购作为您当前回购的远程:

 git remote add other_name PATH_TO_OTHER_REPO 

然后从远程获取brach:

 git fetch other_name branch_name:branch_name 

这将创build该分支作为当前repo中的新分支,然后可以将该分支与任何分支进行比较,例如,将当前分支与新分支(branch_name)进行比较:

 git diff branch_name 

请参阅http://git.or.cz/gitwiki/GitTips ,“常规”中的“如何比较两个本地存储库”一节。

简而言之,您正在使用GIT_ALTERNATE_OBJECT_DIRECTORIES环境variables访问其他存储库的对象数据库,并使用git rev-parse和--git-dir / GIT_DIR将其他存储库中的符号名称转换为SHA-1标识符。

现代版本看起来像这样(假设你在'repo_a'):

 GIT_ALTERNATE_OBJECT_DIRECTORIES = .. / repo_b / .git / objects \
    git diff $(git --git-dir = .. / repo_b / .git rev-parse --verify HEAD)HEAD

其中../repo_b/.git../repo_b/.git中对象数据库的path(如果它是裸仓库,它将是repo_b.git)。 当然,你可以比较任意版本,而不仅仅是HEAD。


请注意,如果repo_a和repo_b是同一个存储库,则可以使用“ git remote add -f ... ”为存储库重复更新创build昵称,或者放弃“ git fetch ... ”; 如其他答复中所述。

Meld可以比较目录:

 meld directory1 directory2 

只需使用这两个git仓库的目录,你会得到一个很好的graphics比较:

在这里输入图像说明

当你点击其中一个蓝色的项目时,你可以看到改变了什么。

你最好的select是在你的本地机器上同时使用repos,并使用linux diff命令和两个目录作为参数:

diff -r repo-A repo-B

我使用PyCharm,它具有很好的function来比较文件夹和文件。

只要打开这两个回购的父文件夹,并等待,直到它索引。 然后,您可以右键单击文件夹或文件,并Compare to...并select相应的文件夹/文件在另一边。

它不仅显示了哪些文件不同,而且还显示了它们的内容。 比命令行要容易得多。