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
を実行できます。そして、それらを1つのリポジトリに入れるのは簡単です
git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*
現在のリポジトリのリモートとして他のリポジトリを最初に追加できます。
git remote add other_name PATH_TO_OTHER_REPO
次に、そのリモートからブランチをフェッチします。
git fetch other_name branch_name:branch_name
これにより、そのブランチが現在のリポジトリに新しいブランチとして作成され、そのブランチを任意のブランチと比較できます。たとえば、現在のブランチを新しいブランチ(branch_name)と比較できます。
git diff branch_name
http://git.or.cz/gitwiki/GitTips 、「一般」の「2つのローカルリポジトリを比較する方法」セクションを参照してください。
つまり、GIT_ALTERNATE_OBJECT_DIRECTORIES環境変数を使用して他のリポジトリのオブジェクトデータベースにアクセスし、 git rev-parse with --git-dir
/GIT_DIRを使用して他のリポジトリのシンボル名をSHA- 1つの識別子。
最新バージョンは次のようになります(「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 ...
";他の応答で説明されているように。
git diff master remotes/b
それは間違っています。 remotes/b
はリモートですが、ブランチではありません。
それを機能させるために、私はしなければなりませんでした:
git diff master remotes/b/master
フォルダーとファイルを比較する優れた機能を持つPyCharmを使用します。
両方のリポジトリの親フォルダーを開き、インデックスが作成されるまで待ちます。次に、フォルダまたはファイルを右クリックしてCompare to...
を使用し、反対側で対応するフォルダ/ファイルを選択します。
異なるファイルだけでなく、その内容も表示されます。コマンドラインよりもはるかに簡単です。
最善の策は、両方のリポジトリをローカルマシンに置き、2つのディレクトリをパラメーターとしてlinux diffコマンドを使用することです。
diff -r repo-A repo-B
リモート設定に触れることなくそれを行う簡単な方法。リポジトリAから、マスターで(マスターブランチを比較すると仮定します):
git fetch path/to/repo_b.git master
git diff FETCH_HEAD