Behandelt Git Add / Remove als Umbenennung?

8

Dies mag geeigneter sein als ein Problem in welchem ​​Problem Tracker / Forum Git verwendet, aber ich dachte, ich würde zuerst eine SO Bestätigung / Erklärung bekommen:

Ich habe ein Repo, das eine Reihe von ausführbaren Installerdateien verfolgt.

Nehmen wir an, foo-1.0.exe ist bereits im Repo.

Ich füge jetzt foo-2.0.exe in dasselbe Verzeichnis (git add foo-2.0.exe). Als nächstes entferne ich foo-1.0.exe (git rm foo-1.0.exe).

Ich erwarte, dass der Git-Status mir eine hinzugefügte Datei und eine entfernte Datei anzeigt. Stattdessen bekomme ich das:


Auf Zweigmeister
Zu bindende Änderungen:
(benutze "git reset HEAD ..." um zu deaktivieren)
umbenannt: foo-1.0.exe - & gt; foo2.0.exe

Das ist ein WTF für mich ... benutzt Git eine Art Heuristik, um zu erraten, dass 2.0 ein Update auf 1.0 ist ... Ich kann sehen, wie das Sinn machen könnte, aber ich glaube nicht, dass ich es tun möchte Das ist in diesem Fall.

    
fakeleft 29.07.2009, 11:16
quelle

1 Antwort

15

Sie haben Recht, dass Git eine Heuristik verwendet. Git verfolgt nur Inhalt, also weiß das Repository nur, dass es ein foo-1.0.exe gab und jetzt gibt es ein foo-2.0.exe . In deinem Fall verwendet git status die verfügbaren Informationen, um rate zu sagen, dass es möglicherweise eine Umbenennung gegeben hat (plus ein paar kleinere Änderungen, deine beiden Dateien sind wahrscheinlich ziemlich ähnlich). Diese Schätzung beeinflusst nicht, was im Repository aufgezeichnet wird.

Diese Philosophie, nur Inhalte und nicht Deltas zu verfolgen, ermöglicht es Git, sich weiterzuentwickeln und bessere und bessere Werkzeuge für die Navigation im Repository-Verlauf bereitzustellen. Schließlich wird Git eine Möglichkeit bieten, die Entwicklung eines bestimmten Bitcodes auf der Funktions- oder sogar Zeilenebene nachzuverfolgen, durch Umbenennen oder Refactoring oder irgendeine andere Codeänderung. Dies kann geschehen, ohne dass das Repository diese Information vorher speichern muss.

    
Greg Hewgill 29.07.2009 11:21
quelle

Tags und Links