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

san*_*yav 159 git git-diff

我们如何才能获得两个git存储库之间的区别?

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

iam*_*mac 222

在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
Run Code Online (Sandbox Code Playgroud)

  • 我似乎需要指定`origin/master`而不是一个裸`master`.此外,这会找到主分支之间的差异,那么如果要查找所有不同的分支,该怎么办?例如,检查存储库备份的状态? (4认同)
  • 你能解释一下每一行在做什么吗?谢谢 ! (4认同)
  • 如果您需要将repo_a/master与repo_b的特定标记进行比较,该怎么办? (3认同)
  • 没有为我工作,它正在抛出:致命:模糊的论点'遥控器/ b /主':未知的修订或路径不在工作树中.使用' - '将路径与修订分开,如下所示:'git <command> [<revision> ...] - [<file> ...]'这里有任何想法吗? (2认同)
  • 我和@AndrewHeekin一样.有没有人有办法解决吗? (2认同)

Mar*_*oma 20

Meld可以比较目录:

meld directory1 directory2
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

  • 精彩的链接!非常简单的程序,我现在使用它作为 OSX 的 diff 程序。 (4认同)
  • 这就是我的解决方案。非常简单的 git 存储库比较。 (3认同)
  • 在我的 VS 解决方案中比较项目时,Meld 会冻结,而 BeyondCompare 则不会。 (2认同)
  • 在OSX中:diff -rq folder1 folder2 (2认同)
  • 这绝对是可爱的!感谢分享。 (2认同)

jor*_*v92 10

这是一种无需修改遥控器配置即可轻松完成此操作的方法。从 repo A 的 master 中(假设您想要比较 master 分支):

git fetch path/to/repo_b.git master
git diff FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)


Mic*_*ker 7

一旦你在一个存储库中有两个分支,你就可以做到git diff.将它们放在一个存储库中就像这样简单

git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*
Run Code Online (Sandbox Code Playgroud)


MrE*_*MrE 7

我使用 PyCharm,它具有在文件夹和文件之间进行比较的强大功能。

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

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


M.K*_*chi 7

您可以先将其他仓库添加为当前仓库的远程:

git remote add other_name PATH_TO_OTHER_REPO
Run Code Online (Sandbox Code Playgroud)

然后从该遥控器获取brach:

git fetch other_name branch_name:branch_name
Run Code Online (Sandbox Code Playgroud)

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

git diff branch_name
Run Code Online (Sandbox Code Playgroud)

  • `branch_name:branch_name` 其中 `other_name_branch:new_local_repo_branch_name` (2认同)

Jak*_*ski 5

请参阅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)头

其中../repo_b/.git是在repo_b路径对象数据库(这将是repo_b.git如果它是纯仓库)。当然,您可以比较任意版本,而不仅仅是HEAD。


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


小智 5

git diff master remotes/b
Run Code Online (Sandbox Code Playgroud)

那是不对的.remotes/b是一个遥远的,但不是一个分支.

要让它工作,我必须这样做:

git diff master remotes/b/master
Run Code Online (Sandbox Code Playgroud)

  • 这确实应该是对相关答案的评论。 (5认同)