web-dev-qa-db-ja.com

Gitの2つの別々のブランチでファイルを比較できません

BranchAにFileAがあり、branchBにFileBがあります。

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

2つのファイルをmeld/FileMergeすることでどのように差分できますか


[解決済み]:最初に開発された問題:FileMergeは標準入力を許可しません

Masi: opendiffを使用してFileMergeを許可 を使用して、標準入力からファイルを取得できます。したがって、次の問題は、gitのdiffツールでopendiffを使用する方法を見つけることです。


2番目に開発された問題:GitのdiffツールがMacでopendiffを使用するようにする

マージには「 git mergetool 」を使用でき、最新のgit(バージョン1.6.3以降を意味する)では、グラフィカルツールを使用して比較するには「 git difftool 」を使用できます。もちろん、最初にそれらを設定する必要がありますが、いくつかの自動検出を行います(もちろん、ハードコーディングされた設定があります)。

そしてもちろん、通常の "git diff"を使用するのと同じように、グラフィカルツール(opendiff/FileMerge)を使用できます。

Prompt> git difftool somebranch:UNREADME otherbranch:README
66
Jakub Narębski

gitは、リポジトリパスの一部としてブランチ名をサポートしています。たとえば、リポジトリに次のファイルがある場合、READMEのみにmasterがあり、UNREADMEのみにbranchがあります。

_master:README

branch:UNREADME
_

Git経由でそれらをdiffできます:

_git diff branch:UNREADME master:README
_

_git show_を使用して、リポジトリアーティファクトを標準出力に取得できます。

_git show branch1:UNREADME
_

したがって、外部diffユーティリティがbashプロンプトで2つのファイルを取得できる場合、次のようなものを使用してそれらを差分できます。

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

<(...) bash構文は、囲まれたコマンドの出力を受け取り、パイプで実行し、パイプのファイルパスをコマンドラインに配置します。

61
Kyle Burton

たとえば、現在branchAにチェックアウトしている場合は、次のコマンドを使用できます。

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

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

37
Jarret Hardie

ドキュメント から、.git/configファイルに次のようなものが必要です。

# Our diff algorithm
[diff]
    external = opendiff
1
Hank Gay