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

时间:2009-12-28 08:14:12

标签: git git-diff

我们如何才能区分两个git存储库?

场景: 我们有一个repo_a和repo_b。后者是作为repo_a的副本创建的。之后两个存储库都有并行开发。有没有办法列出这两个存储库当前版本的差异?

11 个答案:

答案 0 :(得分:196)

在repo_a:

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

答案 1 :(得分:16)

Meld可以比较目录:

meld directory1 directory2

只需使用两个git repos的目录,您就会得到一个很好的图形比较:

enter image description here

当您点击其中一个蓝色项目时,您可以看到更改的内容。

答案 2 :(得分:7)

在一个存储库中同时拥有两个分支后,您可以执行git diff。将它们放在一个存储库中就像

一样简单
git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*

答案 3 :(得分:6)

您可以先将其他仓库添加为当前仓库的遥控器:

git remote add other_name PATH_TO_OTHER_REPO

然后从该遥控器获取brach:

git fetch other_name branch_name:branch_name

这会将该分支创建为当前仓库中的新分支,然后您可以将该分支与任何分支区分开来,例如,将当前分支与新分支(branch_name)进行比较:

git diff branch_name

答案 4 :(得分:5)

git diff master remotes/b

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

要让它发挥作用,我必须这样做:

git diff master remotes/b/master

答案 5 :(得分:4)

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

简而言之,您使用GIT_ALTERNATE_OBJECT_DIRECTORIES环境变量来访问其他存储库的对象数据库,并使用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中对象数据库的路径(如果它是裸存储库,则为repo_b.git)。当然,您可以比较任意版本,而不仅仅是HEAD。


请注意,如果repo_a和repo_b是相同的存储库,则将它们放在同一个存储库中可能更有意义,可以使用“git remote add -f ...”为存储库创建昵称以进行重复更新,或者说“git fetch ...”;如其他回复中所述。

答案 6 :(得分:2)

我使用PyCharm,它具有很强的功能来比较文件夹和文件。

只需打开两个repos的父文件夹,然后等待它进行索引。然后,您可以右键单击文件夹或文件Compare to...并选择另一侧的相应文件夹/文件。

它不仅显示哪些文件不同,还显示其内容。 比命令行容易得多。

答案 7 :(得分:1)

最好的办法是在本地计算机上安装两个存储库并使用linux diff命令将两个目录作为参数:

diff -r repo-A repo-B

答案 8 :(得分:0)

一种简单的方法,无需触摸您的遥控器配置即可。 从回购A中,在主服务器中(假设您要比较主分支):

git fetch path/to/repo_b.git master
git diff FETCH_HEAD

答案 9 :(得分:0)

您可以使用以下命令:

diff -x .git -r repo-A repo-B

或并排使用:

diff -x .git -W200 -y -r repo-A repo-B

如果要对每个差异文件进行着色,则可以使用:

diff -x .git -W200 -y -r repo-A repo-B | sed -e "s/\(^diff .*\)/\x1b[31m\1\x1b[0m/"

答案 10 :(得分:0)

提醒自己...首先获取,否则存储库没有本地哈希(我想)。

第1步。设置上游遥控器及其上端^

按照以下方式区分单个文件:

git diff localBranch uptreamBranch --spacepath / singlefile

git diff master upstream/nameofrepo -- src/index.js