如何在github中的两个分支之间为单个文件生成diff

时间:2013-01-24 11:26:54

标签: git github

我需要为单个文件生成一个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?

5 个答案:

答案 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项目之间的差异。这个差异包括所有修改过的文件。

如果要检索定位特定文件的网址:

  • 切换到文件已更改标签

changed-tab

  • 点击显示差异统计按钮(这会将修改后的文件列表显示为链接)

show-diff

  • 将您追踪的特定文件的链接复制到剪贴板...和Tada!你已经完成了。

例如,鉴于上面的差异,链接 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 。这将打开页面,其中包含如下所示的签到评论链接列表。

enter image description here 单击它将显示代码更改。点击历史记录后;您可以单击包以查看包级别所有文件签入。

在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扩展程序:

  1. 为Chrome浏览器安装Diff工具:https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. 打开差异工具(http://iblogbox.com/devtools/diff/
  3. 从GitHub转到提交,标记或分支之前,打开文件,然后单击 Raw 按钮以获取原始文件视图,全选并复制,然后放入差异工具中左侧的文本框
  4. 重复步骤3,但要添加AFTER文件,然后将其粘贴到Diff Tools的右侧框中
  5. 点击立即比较并进行差异比较