Frage

Wir haben eine massive, alte Code-Basis, die eine Menge Bereinigung benötigt. Wir hatten schon immer Standards Codierung und jeder versucht hat, immer, ihnen zu folgen, aber sie waren noch nicht durchgesetzt, so im Laufe der Zeit eingeschlichen viele Verletzungen in. Viele von ihnen gerade sind Leerzeichen Probleme, wie Tabs statt Leerzeichen verwenden oder Räumen, in denen sollte nicht oder fehlende Räume, wo sie sein sollten. Wir werden aktiv die Durchsetzung unserer Coding-Standards beginnen, dass mehr Verletzungen einschleichen nicht zu machen, aber es ist schwierig, sie in einer automatisierten Art und Weise zu erzwingen nur die Änderungen, so dass es schön wäre, diese alten Dateien zu bereinigen.

Es gibt Tools, die diese Probleme beheben automatisieren können, aber wenn ich das tun, dann Schuld mich als Eigentümer dieser Linien zeigen, wird, wenn sie in Wirklichkeit kann ich nicht einmal sie gesehen haben. Ich weiß, es ist eine Einstellung zu machen Schuld ignorieren Änderungen Leerzeichen, aber ich kann nicht jeden Gebrauch Schuld auf die gleiche Weise wie andere visuelle Tools und Dinge wie gitstats machen. In einer idealen Welt gäbe es eine Möglichkeit geben, die Geschichte neu zu schreiben Blick wie die Verletzungen nie eingeführt wurden, ohne Verschleierung, die den eigentlichen Code eingeführt, aber ich kann nicht so etwas finden.

War es hilfreich?

Lösung

  

In einer idealen Welt gäbe es eine Möglichkeit geben, die Geschichte neu zu schreiben Blick wie die Verletzungen nie eingeführt wurden,

git filter-branch tut genau das.

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

Dies hat die gleichen Probleme wie alle Geschichte umschreiben Befehle zu tun, wie es im Wesentlichen alle geklonten Repositories entkräftet.

Andere Tipps

Wenn Sie versuchen, eine Root Cause Problem zu erhalten Schuld verwenden, nicht zu vergessen die -w Flag verwenden, um alle die weißen Räume oder Vertiefung Änderungen zu ignorieren. So finden Sie die letzte wirkliche Änderung am Code zu bekommen, anstatt nur eine Vertiefung oder Entfernen von Leerzeichen am Ende.

git blame -w app/to/file.rb

oder Sie können einfach verwenden, git Schlag Befehl ..

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

mit gleichen Ergebnissen: D

Aufbauend auf Mario Antwort , würde ich git shame als globales git-alias vorschlagen:

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

... und es verwenden, statt git-Schuld:

git shame path/to/file

Zur Erklärung:
 - -w Ignorieren Änderungen in Leerzeichen, so dass nicht zu Schuld jemand, der den Code
erneut eingerückt  - -M Ermittelt Linien, die verschoben wurden oder kopiert, und die Schuld der ursprüngliche Autor

Ich habe eine Pull-Anforderung an den Textmate git Bundle , dies einzustellen „-w“ Parameter standardmäßig für die „Durchsuchen Annoted Datei (Blame)“ -Befehl. Dank Mario Zaizar, du hast meinen Tag.

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 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top