我需要为单个文件生成一个diff,它将显示两个版本之间的差异,这两个版本实际上是github中的标记。然后,我想通过电子邮件将此差异发送给某人,因此差异的github URL将是理想的。 github比较视图将允许我对所有已更改的文件执行此操作,但这并不好,因为我的仓库中有数千个文件。
我可以在命令行中执行此操作,如下所示,但这没有帮助,因为我需要通过电子邮件将差异发送给某人:
git diff tag1 tag2 -- path/to/file
我发现这里讨论的命令行版本: how can I see the differences in a designated file between a local branch and a remote branch?
答案 0 :(得分:78)
GitHub只暴露了在两次提交之间显示差异的方式。
如果这些标签实际上指向提交,则Url格式将类似于
<强> https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}
强>
例如, https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 显示了两个版本的LibGit2Sharp项目之间的差异。这个差异包括所有修改过的文件。
如果要检索定位特定文件的网址:
例如,鉴于上面的差异,链接 https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 将指向版本v0.9.0和v0.9.5之间发生的LazyFixtures.cs
更改。
根据您的评论指出您的差异太大而无法通过Web界面呈现,那么如何恢复到良好的旧命令行工具?您可以将diff的输出重定向到文件,然后将该文件作为电子邮件附件发送。
$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff
答案 1 :(得分:6)
以下问题适用时,以下是我的解决方法。
这个比较大!我们只显示最近的250次提交
将要比较的文件的原始视图复制到https://gist.github.com/。使用要比较的两个特定提交点。从旧提交开始。
当您点击“修订版”时,https://gist.github.com/会有一个很好的并排差异视图。
答案 2 :(得分:3)
答案适用于那些只想查看(不下载)GITHUB WEB页面中文件代码更改历史/修改的人员。
转到github中的该文件,然后选择 HISTORY 。这将打开页面,其中包含如下所示的签到评论链接列表。
单击它将显示代码更改。点击历史记录后;您可以单击包以查看包级别所有文件签入。
在eclipse中,您可以使用 EGit 插件和文件中的“右键单击 - &gt;与...比较”来比较历史记录。 How can I compare two revisions in git in Eclipse?
答案 3 :(得分:0)
我使用nulltoken's answer组合了一个简单的便利脚本,用于从命令行在GitHub上的两次提交之间提取差异。
你可以找到full script on gist,但这里是好位:
Ranking
它接受作为参数的分支,提交以及 List<Ranking> rankings = new ArrayList<Ranking>();
BufferedReader br = new BufferedReader(new FileReader(ranking));
String nick = null;
while ( (nick = br.readLine()) != null){
String score = br.readLine();
rankings.add(new Ranking(nick, score));
}
可以解决的任何其他内容。我使用了# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"
if [[ "$#" -eq 1 ]]; then
if [[ "$1" =~ .*\.\..* ]]; then
# Handle "git hubdiff fromcommit..tocommit"
open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
else
# Handle "git hubdiff fromcommit"
open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
fi
elif [[ "$#" -eq 2 ]]; then
# Handle "git hubdiff fromcommit tocommit"
open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi
,它只适用于macOS打开网页,所以如果你在不同的环境中,你会想要调整它。
与nulltoken的答案一样,为了指向差异中的单个文件,您必须单击文件的标题以使锚点字符串显示在网址栏中,然后您可以将其复制。
答案 4 :(得分:0)
由于仍然无法实现,因此这是一个基于浏览器的diff-tool方法。它不利用自动化,而仅需要能够安装Chrome扩展程序: