2 つの git リポジトリの違いをどのように取得できますか?
シナリオ: repo_a と repo_b があります。後者は repo_a のコピーとして作成されました。その後、両方のリポジトリで並行して開発が行われました。これら 2 つのリポジトリの現在のバージョンの違いを一覧表示する方法はありますか?
repo_a で:
git remote add -f b path/to/repo_b.git
git remote update
git diff master remotes/b/master
git remote rm b
Meldはディレクトリを比較できます。
meld directory1 directory2
2 つの git リポジトリのディレクトリを使用するだけで、見栄えの良い比較が得られます。
青い項目の 1 つをクリックすると、何が変更されたかがわかります。
git diff master remotes/b
それは正しくありません。remotes/b
リモートですが、ブランチではありません。
それを機能させるには、次のことを行う必要がありました。
git diff master remotes/b/master
1 つのリポジトリに両方のブランチを作成したら、git diff
. そして、それらを 1 つのリポジトリに入れるのは簡単です
git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*
http://git.or.cz/gitwiki/GitTipsの「一般」のセクション「2 つのローカル リポジトリを比較する方法」 を参照してください。
つまり、GIT_ALTERNATE_OBJECT_DIRECTORIES 環境変数を使用して他のリポジトリのオブジェクト データベースにアクセスし、 /GIT_DIR を指定してgit rev-parseを使用して、他のリポジトリのシンボリック名を SHA-1 識別子に変換します。--git-dir
最新バージョンは次のようになります (「repo_a」にいると仮定します):
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo_b/.git/objects \ git diff $(git --git-dir=../repo_b/.git rev-parse --verify HEAD) HEAD
は../repo_b/.git
repo_b のオブジェクト データベースへのパスです (ベア リポジトリの場合は repo_b.git になります)。もちろん、HEADだけでなく、任意のバージョンを比較できます。
repo_a と repo_b が同じリポジトリである場合、" " を使用git remote add -f ...
して繰り返し更新するためのリポジトリのニックネームを作成するか、" " をオフにするかのいずれかで、両方を同じリポジトリに配置する方が理にかなっていることに注意してくださいgit fetch ...
。他の回答で説明されているように。
フォルダーとファイルを比較する優れた機能を備えた PyCharm を使用しています。
両方のリポジトリの親フォルダーを開き、インデックスが作成されるまで待ちます。次に、フォルダまたはファイルを右クリックしてCompare to...
、反対側の対応するフォルダ/ファイルを選択します。
どのファイルが異なるかだけでなく、その内容も表示されます。コマンドラインよりはるかに簡単です。
最善の策は、ローカル マシンに両方のリポジトリを用意し、2 つのディレクトリをパラメーターとして linux diff コマンドを使用することです。
diff -r repo-A repo-B