29

perl スクリプトを使用して、php git リポジトリのすべてのタブ文字を変更し、すべて 4 つのスペースに変更しました。

$ find -iname \*.php -exec perl -pi -e "s/\t/    /g" {} \

でこの変更をコミットできますが、このコミットが行われた後、git commit内部のすべての変更された行の作成者として私がマークされます。git blame

変更された行の作成者として私をマークしないが、元の作成者を保持するこの大規模な変更をコミットする方法はありますか? これは、私たちのプロジェクトで本当に失いたくない多くの歴史です。

タブを 4 つのスペースに置き換える目的は、git Blame で見た目を変えることではなく、適切な PEAR コーディング標準に従うことです。たとえば、タブがない場合は、インデントに 4 つのスペースを使用します。

4

2 に答える 2

39

空白の処理方法を決定するのはcommitコマンドの責任ではありませんが、バージョン間の違いを分析して各行の作成者を取得するのはblameであるため、 blameコマンドの責任です。したがって、非難の空白を無視するオプションを探しています:

オプション-wは、次のように定義されています。「親のバージョンと子のバージョンを比較して、行の出所を見つけるときに空白を無視する。」 http://kernel.org/pub/software/scm/git/docs/git-blame.html

于 2010-10-15T19:37:01.257 に答える
20

gitの wnoise のおかげです: 所有権/責任を変更せずにスタイル (空白) を変更しますか? 、git 履歴に対して任意のフィルターを実行するためにこれを思いついたので、これを使用して、履歴を書き換えて、問題のある空白やその他の問題がコミットされていないように見せ、元の作成者を無傷のままにしますが、コードはクリーンアップされます。git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | php cleanup.php' HEAD

于 2010-11-09T04:45:12.957 に答える