如何获取两个git代码库之间的差异?
场景: 我们有repo_a和repo_b两个代码库。后者是以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
origin/master
而不是单纯的master
。此外,这会找到主分支之间的差异,那么如果您想找到所有不同的分支呢?例如,检查存储库备份的状态? - davidA你可以将其他仓库作为远程仓库添加到你当前的仓库中:
git remote add other_name PATH_TO_OTHER_REPO
然后从远程获取分支:
git fetch other_name branch_name:branch_name
这将在您当前的仓库中创建一个新分支,然后您可以将该分支与任何分支进行差异比较,例如将当前分支与新分支(branch_name)进行比较:
git diff branch_name
other_name_branch:new_local_repo_branch_name
表示其他名称的本地仓库分支名称。 - Dylan w我使用 PyCharm,它具有比较文件和文件夹之间差异的强大功能。
只需打开两个存储库的父文件夹并等待索引完成即可。然后您可以使用右键单击文件夹或文件并选择“与...比较”选项,在另一侧选择相应的文件夹/文件。
它不仅显示文件的差异,还显示它们的内容。比使用命令行更容易。
git fetch path/to/repo_b.git master
git diff FETCH_HEAD
一旦您将两个分支放在同一个存储库中,您可以执行 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-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)。当然,您不仅可以比较HEADs,还可以比较任意版本。
请注意,如果repo_a和repo_b是相同的存储库,则将它们都放入同一个存储库可能更有意义,可以使用“git remote add -f ...
”为存储库创建昵称以进行重复更新,或使用“git fetch ...
”,如其他响应中所述。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/"
在追随@iamamac的答案之后,为了让内容更简洁明了,我们可以添加一个漂亮的摘要:
git remote add -f b path/to/repo_b.git
git remote update
我会使用 diff-tree:
git diff-tree master remotes/b/master --compact-summary