GitHubの2つのブランチ間の単一ファイルの差分を生成するにはどうすればよいですか


111

2つのバージョンの違いを示す1つのファイルの差分を生成する必要があります。これは実際にはgithubのタグです。次に、この差分をメールで誰かに送信したいので、差分のgithub URLが理想的です。githubの比較ビューを使用すると、変更されたすべてのファイルに対してこれを行うことができますが、私のリポジトリには何千ものファイルがあるため、それは良くありません。

次のようにコマンドラインでこれを行うことができますが、電子メールで誰かに差分を送信する必要があるため、これは役に立ちません:

git diff tag1 tag2 -- path/to/file

ここで説明されているコマンドラインバージョンを見つけまし た。ローカルブランチとリモートブランチの間で指定されたファイルの違いを確認するにはどうすればよいですか?

回答:


90

GitHubは、2つのコミット間の差分を表示する方法のみを公開しています。

これらのタグが実際にコミットを指す場合、URL形式は次のようになります

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

例として、https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5は、LibGit2Sharpプロジェクトの2つのバージョン間の差分を示しています。この差分には、変更されたすべてのファイルが含まれます。

特定のファイルをターゲットとするURLを取得する場合:

  • [ 変更されたファイル ]タブに切り替えます。

変更されたタブ

  • クリックして表示差分統計ボタン(これはリンクとして変更されたファイルの一覧が表示されます)

show-diff

  • あなたが探している特定のファイルのリンクをクリップボードにコピーしてください...そして多田!完了です。

たとえば、上記のdiffの場合、リンクhttps://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11LazyFixtures.cs、バージョンv0.9.0とv0.9.5。

更新

差分が大きすぎてWebインターフェースでレンダリングできないというコメントに続いて、古き良きコマンドラインツールに戻してみませんか?diffの出力をファイルにリダイレクトし、そのファイルをメールの添付ファイルとして送信できます。

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

8
こんにちは、差分が大きすぎるため、これではうまくいかないようです。「この差分は大きいです。最初の2,500ファイルのステータス情報のみを表示しています」と表示されます。したがって、#diffリンクを使用しても、完全な差分ではなく、差分統計のみを取得します。
プレーンフレーバー2013年

1
しかし、私はあなたが正しいと思います-それはそれを行う方法です。ありがとう
plainflavour 2013年

1
このChrome拡張機能github.com/danielribeiro/github-diff-highlight-extensionを使用して、ブランチを比較するときに構文を強調表示することもできます。
Daniel Ribeiro

3
@plainflavourもう一度これに遭遇した場合に備えて、ここでもう1つの便利なヒント-@nulltokenのような比較URLが指摘されているときはいつでも、.diffをURLの末尾に追加して完全な差分を表示することもできます(プレーンテキストとしても) )。たとえば、https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff ソース
dmccabe

1
[ Show Diff Stats ]ボタンが表示されません。なくなった?それとも私はそれを見ていませんか?
dckc

7

次の問題が当てはまる場合の回避策を次に示します。

この比較は大きいです!最新の250件のコミットのみを表示しています

比較するファイルの生のビューをhttps://gist.github.com/にコピーします。比較する2つの特定のコミットポイントを使用します。古いコミットから始めます。

https://gist.github.com/には、[Revisions]をクリックすると、サイドバイサイドの差分ビューが表示されます。


3
ありがとう、これはまさにgist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/…に必要な提案でした。:)
ncoghlan 2017年

3

回答は、以前のチェックインのためにGITHUB WEBページでファイルのコード変更の履歴/改訂のみを表示したい(ダウンロードしない)必要がある人向けです。

githubでそのファイルに移動し、[ HISTORY]を選択します。これにより、以下のようなチェックインコメントリンクのリストを含むページが開きます。

ここに画像の説明を入力してください それをクリックすると、コードの変更が表示されます。履歴をクリックした後; パッケージをクリックすると、パッケージレベルのすべてのファイルのチェックインを表示できます。

Eclipseでは、EGitプラグインを使用して履歴を比較し、ファイルを「右クリック->比較」することができます。 Eclipseのgitで2つのリビジョンを比較するにはどうすればよいですか?


1
より明確にするために、コミットの7桁の16進数の「名前」をクリックします(カーソルを合わせると、ラベルもツールヒントもありません。右側にあり、「クリップボードにコピー」のすぐ横にあります。アイコン)をクリックすると、そのコミットのバージョンと、以前のバージョンであると私が想定しているものとの違いを示すページが表示されます。
JonathanZは2015年

@ジョナサンうん; それは本当
カナガベル・スグマール2015年

ねえ、私が前回見たとき、そのスクリーンキャプチャーを見なかった。それがちょうど私のために読み込まれていなかったのか、それからそれを追加したのかはわかりませんが、どちらにしてもあなたの答えに感謝します。それは素晴らしい。
JonathanZは2015年

5000ファイルのコミットの場合、これは単一ファイルの差分に移動しません。この歴史から、そのファイルにデルタを見つけてみてくださいコミットこの巨大な
カールウォルシュ

0

nulltokenの回答を使用して、コマンドラインからGitHub上の2つのコミット間の差分を取得するための簡単なスクリプトを作成しました。

あなたはgistで完全なスクリプトを見つけることができますが、ここに良いビットがあります:

# 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、これはWebページを開くためにmacOSでのみ機能するため、別の環境を使用している場合は微調整する必要があります。

nulltokenの回答と同様に、diff内の単一のファイルを指すには、ファイルのタイトルをクリックして、アンカー文字列をURLバーに表示し、コピーできるようにする必要があります。


それらの数が多すぎるために目的のファイルを示さない比較のアンカー文字列を取得する方法はありますか?
sgarg

@sgargアンカーは "diff- <ファイル名のmd5>"です-AFAIKには文書化されていません-しかし、それは私を困らせ、私はそれを推測しました。
ベンウォルディング

0

これはまだ不可能なので、ブラウザベースのdiff-toolメソッドを使用します。自動化を利用せず、Chrome拡張機能をインストールする機能のみが必要です。

  1. ChromeブラウザにDiffツールをインストールします:https : //chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Diffツールを開きます(http://iblogbox.com/devtools/diff/
  3. GitHubからBEFOREコミット、タグ、またはブランチに移動し、ファイルを開いてから、Rawボタンをクリックして未加工のファイルビューを取得し、すべて選択してコピーしてから、Diffツールの左側のテキストボックスに入力します。
  4. 手順3を繰り返しますが、AFTERファイルについては、Diff Toolsの右側のボックスに貼り付けます。
  5. クリックしてCompare Now、アドホックで差分を実行します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.