問題タブ [git-blame]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git: 名前の変更後、責任の履歴を確実にフェッチする
次のプロパティを使用して、ファイルの履歴を取得するコマンドを作成しようとしてgit log
います(コピーと名前の変更に続く):
ログを注釈に従って「閉じた」状態にしたい-つまり
git blame -elfwM
、履歴内のファイルをコミットする場合(ファイルがその時点で持っていた名前が何であれ)、注釈に表示されるすべてのコミットも履歴に含まれます。履歴のすべてのエントリのファイルの元の名前を知りたいです。ファイルの名前を変更しなかったコミットの場合、これはファイル名と同じになります。行ったコミットの場合、そのコミットの各親の元のファイル名を知りたいです。
ファイルの特定の注釈 (履歴の任意の時点) について、そのコミット (プロパティ 1 から存在することがわかっている) に対応する履歴エントリの作成者、日付、およびファイル名が作成者、日付、およびファイル名と一致するようにします。注釈のファイル名。
(1) を満たすため、追加のコミットをできるだけ少なくしたい。特に、ファイルにまったく影響を与えなかったコミットを除外したいと考えています。
これまでのところ、私ができる最善のことは次のとおりgit log --raw --follow -m --pretty="%H%n%P%n%aL%n%cs%n%s" -- FILENAME
です。この行の背後にある私の考えは次のとおりです。
--follow
次の名前変更とコピーの仕事をする必要があります(ただし、ファイル名はわかりません)--pretty=...
コミット、親、作成者、コミット日、件名を教えてください。元の作成者 + コミット日が使用されていると推測していgit blame
ますが、それが間違っている場合は修正してください。--raw
特定のコミットの元のファイル名と新しいファイル名を教えてください。-m
個々の親の元の名前を取得できるように、マージ コミットのエントリを分割する必要があります。
これは通常のケースでは問題なく動作するように見えますが、これが失敗するシナリオを示すスクリプトを作成しました。その実行の 1 つからの出力例を次に示します。
3 行目はbar.txt
、2f6d49b3aa35ffa2953a65e21ba5c21d130fa3b1 で変更されたことを示しています。残念ながら、このコミットは履歴に表示されません--follow
。-m
のような生の行:100644 100644 27393f0 bb5a6e5 R089 bar.txt foo-merged.txt
)。
注:この情報を取得できるが、1 つのgit log
コマンドで取得できない場合は、一定数のコマンドを使用するソリューションも機能します。アノテーションを再帰的に調べて履歴を取得するようなことは避けたいと思います。また、再フォーマットなどによりすべての行が変更されたコミットがある場合、その特定の戦略も失敗します。