2009-05-27 12 views
59

私はbranchAにFileA、branchBにFileBを持っています。Gitの別々の2つのブランチにあるファイルを比較できません

問題は、1つのファイルにしかアクセスできないことです。 FileMergeまたはmeldでファイルを比較したいのですが、これはMac用に見つかった唯一のdiffToolsだからです。

どのようにmeld/FileMergeで2つのファイルを比較できますか


が[解決]:第一の先進問題:をFileMergeは、標準入力

マシことはできません:あなたは、標準入力からファイルを持っているopendiff to allow FileMergeを使用することができます。だから次の問題は、opendiffを使うためにgitのdiffツールを作る方法を見つけることです。


第二の先進問題:あなたは現在branchAに出てチェックアウトしている場合のGitの差分ツールを作るためには、Mac

+1

問題はそのgitのではない使用していませんopendiff、READMEはマスター上に存在しません。 –

答えて

66

あなたが以降のバージョン1.6.3を意味する(マージ、および現代gitの中には、「git mergetool」を使用してすることができます) "git difftool"を使用して比較します。もちろん、最初に設定する必要がありますが、いくつかの自動検出(ハードコードされた環境設定があります)を行い、正しくopendiffのサポートが組み込まれていることを覚えていれば、

そしてもちろん、あなたが通常の「Gitの差分」を使用すると、あなたのグラフィカル・ツール(opendiffを/ FileMerge)を使用することができるだろう、例えば

prompt> git difftool somebranch:UNREADME otherbranch:README 
+0

git-difftoolはgitバージョン1.6.3以降でのみ利用可能です(git --versionの出力を確認してください)。 –

+0

"git diff"についてのコメント(diff.externalを使用しています)は私の答えではありません。 –

+0

@problem solve:MacPortsには古いGitがあります。私はそれを更新する必要があった。 - あなたの答えをありがとう! –

37

にopendiffを使用するために、たとえば、次のコマンドを使用することができます。

git diff branchB path/to/common/file/between/branches.txt 

変更のサブセットが必要な場合は差分を編集することも、変更したままにすることもできます。git apply diffをパッチとして編集できます。これを行うGUIツールに関しては、うまくいけば、他の誰かがそこに提案を持っていることになります。

61

gitは、リポジトリパスの一部としてブランチ名をサポートします。例えばあなたが唯一のmaster、とだけbranchUNREADMEREADME、リポジトリ内の次のファイルがある場合:

master:README 

branch:UNREADME 

をあなたがしてgitのを経由して、それらをdiffをすることができます

git diff branch:UNREADME master:README 

リポジトリー成果物を得ることができますgit showを標準出力へ:

git show branch1:UNREADME 

だからあなたの外部のdiffユーティリティがTAKことができる場合<(...) bashの構文はパイプのファイルパスを上、同封のコマンドの出力を受け取り、パイプでそれを実行し、置く

diff-command <(git show branch1:UNREADME) <(git show master:README) 

:bashプロンプトで電子の2つのファイル、あなたのようなものでそれらをdiffをすることができますコマンドライン。

+0

どうすれば外部のファイル差分統合で同じことができますか? - 私はMacの%open -a filemerge Heee/master:.profile master:.profile –

+1

で実行に失敗しました。FileMerge.appはstdinからの入力を受け付けません。 http://kerneltrap.org/mailarchive/git/2007/11/21/435536 –

+1

また、コマンドラインユーティリティを備えたChanges.appを試してみて、入力を受け入れることもできますstdin ... http://changesapp.com/ –

2

the docsから、あなたは.git/configファイルに次のようなものが必要:

# Our diff algorithm 
[diff] 
    external = opendiff 
関連する問題