我们如何得到两个git存储库之间的区别?
一旦你在一个存储库中有了两个分支,你就可以做git diff。把它们放在一个存储库中就像
git diff
git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*
在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
参见“常规”中的“如何比较两个本地存储库”部分http://git.or.cz/gitwiki/GitTips。
简而言之,你正在使用GIT_ALTERNATE_OBJECT_DIRECTORIES环境变量来访问其他存储库的对象数据库,并使用git rev-parse和--git-dir / GIT_DIR将其他存储库中的符号名称转换为SHA-1标识符。
--git-dir
现代版本看起来像这样(假设你在'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(如果它是裸库)。当然,你可以比较任意的版本,而不仅仅是正面。
../repo_b/.git
注意,如果repo_a和repo_b是同一个存储库,将它们放在同一个存储库中可能更有意义,要么使用"git remote add -f ..."为重复更新的存储库创建昵称,要么关闭"git fetch ...";如其他回答中所述。
git remote add -f ...
git fetch ...
git diff master remotes/b
这是不正确的。remotes/b是一个远程,但不是一个分支。
remotes/b
为了让它工作,我必须做:
git diff master remotes/b/master
你最好的办法是在你的本地机器上有两个repo,并使用linux diff命令,将这两个目录作为参数:
diff -r repo-A repo-B
融合可以比较目录:
meld directory1 directory2
只要使用两个git repo的目录,你就会得到一个很好的图形比较:
当您单击其中一个蓝色项目时,您可以看到发生了什么变化。
我使用PyCharm,它具有比较文件夹和文件的强大功能。
只需打开两个repo的父文件夹,并等待它索引。然后,您可以使用右键单击文件夹或文件和Compare to...,并在另一侧选择相应的文件夹/文件。
Compare to...
您可以先添加其他回购作为当前回购的远程:
git remote add other_name PATH_TO_OTHER_REPO
然后从遥控器中获取分支:
git fetch other_name branch_name:branch_name
这将创建该分支作为当前回购中的新分支,然后你可以将该分支与你的任何分支区分,例如,将当前分支与新分支(branch_name)进行比较:
git diff branch_name
git fetch path/to/repo_b.git master git diff FETCH_HEAD
可以使用如下命令:
diff -x .git -r repo-A repo-B
或者你可以用:
diff -x .git -W200 -y -r repo-A repo-B
在为每个diff文件着色的情况下,您可以使用:
diff -x .git -W200 -y -r repo-A repo-B | sed -e "s/\(^diff .*\)/\x1b[31m\1\x1b[0m/"
提醒自己…首先获取,否则存储库没有本地哈希(我猜)。
步骤1。设置上游远程和上面^
区分单个文件遵循以下模式:
git diff localBranch uptreamBranch——spacepath/singlefile
git diff master upstream/nameofrepo -- src/index.js
在@iamamac answer后面有一个漂亮的总结:
git remote add -f b path/to/repo_b.git git remote update
我将使用diff-tree:
git diff-tree master remotes/b/master --compact-summary