Frage

Ich bin über eine Tonne von Dateien um in einem bestehenden Projekt zu bewegen. Bevor ich dies tun, würde Ich mag einen festen Griff auf einige Techniken Code zu analysieren haben, die eine Multi-Datei-Geschichte hat.

Wie kann ich git verwenden zu fragen: „Wo hat diese Zeile Code her?“ wenn der Inhalt über mehrere Dateien in das Leben der Zeit bewegt hat?

Ich weiß, git hat Umbenennungen nicht explizit verfolgen (aus gutem Grund), so dass es scheint, wie sollte ich in der Lage sein, dies zu fragen, ich bin nur nicht sicher, wie. Wenn es Methode der ist diese sichtbar zu machen, die groß sein würden zu wissen.

War es hilfreich?

Lösung

Ich würde empfehlen, auf drei Werkzeuge in der git Toolbox suchen. Die erste ist Schuld, was sehr viel ist das gleiche, wie es in cvs ist. Es zeigt Ihnen die letzten Commit jede Zeile in einer Datei berührt. Wenn Sie sehen wollen sehen, was es vorher war, können Sie nehmen die verpflichten, dass die Linie und Blick auf die vorherigen begehen berührt.

git show <sha1_of_interesting_commit>^ -- file/path

Sie können die Schuld wiederholen, um zu sehen, was vorher passiert ist.

git blame <sha1_of_interesting_commit>^ -- file/path

Das zweite Werkzeug ist --follow mit Dateien Vergangenheit Umbenennungen zu verfolgen.

git log --follow -- file/path

Das dritte - und vielleicht das nützlichste Instrument - ist die pickaxe Option loggt sein. Diese Suche Geschichte für Änderungen der entfernt wird, eingeführt oder geändert Linien, die ein gegebenes Stück Text enthalten. Dies ist besonders nützlich für Dinge wie Funktionsnamen zu verfolgen. Es kann in einer Datei in einem bestimmten Commit neu sein, aber kam es aus einer anderen Quelldatei? War ein Anruf, um es zur gleichen Zeit hinzugefügt oder bevor es bewegt?

git log -S"Interesting_Function"

Wenn Sie einen Patch oder stat-Option verwenden (z -p oder --stat) die Ausgabe wird auf diese Dateien tatsächlich die Suchkette beteiligt, der Änderungen eingeschränkt werden, wenn Sie auch --pickaxe-all verwenden, wo die ganze Änderung angezeigt wird.

mit git grep In Kombination zu zeigen, wo alle aktuellen Vorkommen einer Zeichenkette sind, pickaxe ist ein äußerst nützliches Geschichte Mining-Tool.

Andere Tipps

git blame ist, was Sie verwenden würden fragen „wo hat diese Codezeile kommen?“. Ich weiß nicht, ob es Umbenennungen behandelt. Wahrscheinlich tut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top