web-dev-qa-db-ja.com

git:所有権/非難を変更せずにスタイル(空白)を変更しますか?

多くのクリーンアップが必要な大規模な古代のコードベースがあります。私たちは常にコーディング標準を持っていて、誰もが常にそれに従うように努めてきましたが、それらは強制されなかったので、時間の経過とともに多くの違反が忍び寄ってきました。それらの多くは、スペースの代わりにタブを使用するなど、空白の問題です。あるべきではない、またはあるべき場所にスペースがないはずです。より多くの違反が忍び寄らないように、コーディング標準の積極的な施行を開始しますが、変更のみに自動化された方法で施行することは難しいため、これらの古いファイルをクリーンアップするとよいでしょう。

これらの問題の修正を自動化できるツールがありますが、そうすると、実際には見たことがないかもしれないのに、非難されてそれらの行の所有者として私が表示されます。非難に空白の変更を無視させる設定があることは知っていますが、他のビジュアルツールやgitstatsなどを含め、すべての人に同じ方法で非難を使用させることはできません。理想的な世界では、実際のコードを誰が導入したかを隠蔽せずに、違反が導入されなかったように履歴を書き換える方法がありますが、そのようなものは見つかりません。

40
Jay Paroline

理想的な世界では、違反が発生したことがないように履歴を書き換える方法があります。

git filter-branchはまさにそれを行います。

http://git-scm.com/docs/git-filter-branch

これには、複製されたすべてのリポジトリが本質的に無効になるため、すべての履歴書き換えコマンドと同じ問題があります。

20
wnoise

非難を使用して根本原因の問題を取得しようとしている場合は、-wフラグを使用して、すべての空白またはインデントの変更を無視することを忘れないでください。したがって、インデントだけでなく、末尾のスペースを削除するのではなく、コードに対する最後の実際の変更を取得します。

git blame -w app/to/file.rb

または、gitslapコマンドを使用することもできます。

git config alias.slap "blame -w";
git slap app/path/to/file.rb

同じ結果になる:D

36
Mario Zaizar

マリオの答え に基づいて、グローバルgit-aliasとしてgit shameを提案します。

git config --global alias.shame 'blame -w -M'

...そしてgit-blameの代わりにそれを使用してください:

git shame path/to/file

説明する:
--w空白の変更を無視するため、コードを再インデントした人のせいにしないでください
--M移動またはコピーされた行を検出し、元の作成者を非難します

9
Gonen

TextMate git Bundle にプルリクエストを実行し、「注釈付きファイルの参照(非難)」コマンドのデフォルトでこの「-w」パラメーターを設定しました。マリオザイザーに感謝します、あなたは私の日を作りました。

diff --git a/Support/lib/git.rb b/Support/lib/git.rb
index 5e8de13..5192953 100644
--- a/Support/lib/git.rb
+++ b/Support/lib/git.rb
@@ -307,6 +307,9 @@ module SCM
       file = make_local_path(file_path)
       args = [file]
       args << revision unless revision.nil? || revision.empty?
+      # Ignore whitespace when comparing the parent's version and
+      # the child's to find where the lines came from.
+      args << '-w'
       output = command("annotate", *args)
       if output.match(/^fatal:/)
         puts output 
1
nfo