我怎样才能生成github中两个分支之间的单个文件的差异

我需要为单个文件生成一个diff,它将显示两个版本之间的差异,这两个版本实际上是github中的标签。 然后我想通过电子邮件发送这个差异给一个人,所以一个github的差异URL将是理想的。 github比较视图将允许我为所有更改的文件执行此操作,但是这不是很好,因为我的回购中有成千上万个文件。

我可以在命令行中做到这一点如下,但这不会帮助,因为我需要通过电子邮件发送差异给别人:

git diff tag1 tag2 -- path/to/file 

我发现这里讨论的命令行版本: 我怎么能看到本地分支和远程分支之间的指定文件的差异?

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

如果你想检索一个指向特定文件的url:

  • 切换到“ 文件已更改”选项卡

改变标签

  • 点击显示差异统计button(这将显示修改文件的列表作为链接)

节目-DIFF

  • 复制到剪贴板中的特定文件的链接…和田田! 你完成了。

例如,给定上面的diff,链接https://github.com/libgit2/libgit2sharp/compare/v0.9.0…v0.9.5#diff-11将指向在版本v0之间发生的LazyFixtures.cs更改.9.0和v0.9.5。

更新

在你的评论里面指出你的差异太大而不能通过Web界面来呈现,那么如何恢复到旧的命令行工具呢? 您可以将diff的输出redirect到一个文件,然后将该文件作为电子邮件附件发送。

 $ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff 

答案是希望仅查看(不下载)GITHUB WEB页面中的文件的代码更改的历史logging/复现以供以前签入的人员。

转到github中的那个文件,然后selectHISTORY 。 这将打开与登记评论列表链接如下。

在这里输入图像说明 点击它会显示代码的变化。 点击历史后 你可以点击软件包来查看软件包级别的所有文件签入。

在Eclipse中,您可以使用EGit插件比较历史logging,并在文件上“右键单击 – >比较”。 我怎样才能在Eclipse中比较两个修改版本?

以下是我的解决方法,当以下问题适用。

这个比较大! 我们只显示最近的250次提交

将要比较的文件的原始视图复制到https://gist.github.com/ 。 使用你想比较的两个特定的提交点。 从较旧的提交开始。

点击“修订”时, https://gist.github.com/有一个不错的并排差异视图。;

我用nulltoken的答案放在一起简单的便利脚本拉起GitHub上的两个提交从命令行中的差异。

您可以在要点上find完整的脚本 ,但是这里有一些好点子:

 # 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 

它接受作为参数分支,提交和其他任何可以通过git rev-parse解决。 我用open ,只能在macOS上打开网页,所以如果你在不同的环境,你会想要调整。

与nulltoken的答案一样,为了指向diff中的单个文件,必须单击文件标题才能使锚点string显示在url栏中,然后才能复制。