元々CVSに保存されていたすべてのリビジョンのプロジェクトを継承しました。かなりの数の編集を行い、元のディレクトリで行ったすべての変更を、追加された新しいファイルと古いファイルに関して比較しようとしています。
ツリーdiffを実行できるhg/gitに何らかのユーティリティがありますか?つまり、新しく追加されたファイルと削除されたファイルの間にマークがあります、私はあまりにも多くを求めていますか?
git diff
はまさにそれを行います。ただし、gitプロジェクトでのみ機能します。
hg diff
、svn diff
ほとんどすべてのバージョン管理システムがディレクトリツリーを比較できます。
単にdiffパッチを作成する任意の2つのファイルまたはディレクトリからgitのdiff形式で派手なリポジトリのものやバージョン管理なし:
git diff --no-index some/path other/path >> some_filename
Knittlの答えに対するJakubNarębskiのコメントは、答えを示唆していました...簡単にするために、それが完全なコマンドです。
>>
partはファイルを作成し、出力をリダイレクトします。ファイルが不要で、コンソールに出力を出力してコピーできるようにする場合は、>> some_filename
パート。
コピーと貼り付けに便利なように、cd
という名前の元のディレクトリ/ファイルと変更されたディレクトリa
を含むディレクトリに既にb
edしている場合は、次のようになります。
git diff --no-index a b >> patch
_
git diff [--options] [--] [<path>...]
_[...]
パスが2つだけ指定され、少なくとも1つが追跡されていない場合、2つのファイル/ディレクトリを比較します。この動作は_--no-index
_によって強制できます。
2つの異なるリポジトリで2つのバージョン(2つのタグ付きリリース、2つのブランチなど)を比較する場合は、Git Wikiの「2つのローカルリポジトリを比較する方法」の GitTips ページで説明されているトリックを使用できます。
あなたが1つのリポジトリ内にいて、2番目のリポジトリが_/path/to/repo
_にあると仮定すると、そのGIT_DIRは/path/to/repo/.git
_です。
_$ GIT_ALTERNATE_OBJECT_DIRECTORIES=/path/to/repo/.git/objects \
git diff $(git --git-dir=/path/to/repo/.git rev-parse --verify A) B
_
ここで、AとBは比較するリビジョンです。もちろん、上記の式でパスリミッターを指定することもできます。
説明:_GIT_ALTERNATE_OBJECT_REPOSITORIES
_変数を使用して、gitコマンドで2つのリポジトリのオブジェクトデータベースを連結できます。 _git --git-dir=... rev-parse ...
_は、_git-dir
_オプションのパラメーターとして指定されたリポジトリ内の名前(拡張SHA-1式)を一意のSHA-1識別子に変換するために使用されます。 $( ... )
コンストラクトは、指定されたコマンドの呼び出し結果をコマンドラインに配置します。 _git diff
_は、2つのリビジョンを比較するために使用されます(1つは代替オブジェクトリポジトリからのものです)。
別の解決策は、_git remote add
_(および_git fetch
_)を使用して、指定されたリポジトリに他のリポジトリを単にimportすることです。その後、すべてをローカルに持ち、単一のリポジトリ内で比較を行うことができます。
ツリーdiffを実行できるhg/gitのユーティリティがありますか... [s] oつまり、新しく追加されたファイルと削除されたファイルの間にマークがあります... [強調を追加]
はい。私たちはできる git diff
別のディレクトリに対する現在のディレクトリおよび...
...追加、削除、および変更されたファイルにマークを付けます:
git diff --name-status --no-index ./ path/to/other/dir
...追加されたファイルのみを表示:
git diff --diff-filter=A --name-status --no-index ./ path/to/other/dir
...削除されたファイルのみを表示:
git diff --diff-filter=D --name-status --no-index ./ path/to/other/dir
...変更されたファイルのみを表示:
git diff --diff-filter=M --name-status --no-index ./ path/to/other/dir
私はあなたが何を望んでいるか本当に理解していませんが、diff -ur
あなたに十分ですか?バージョン管理のないディレクトリでも機能します。
これはgit固有ではありませんが、Windowsの一般的なdiffユーティリティとして、 WinMerge が大好きです。