Ich habe gelesen, dass Sie beim Umbenennen von Dateien in Git alle Änderungen festschreiben, Ihre Umbenennung durchführen und dann Ihre umbenannte Datei bereitstellen sollten. Git erkennt die Datei anhand des Inhalts, anstatt sie als neue nicht verfolgte Datei zu betrachten, und behält den Änderungsverlauf bei.
Als ich heute Abend genau das tat, kehrte ich jedoch zurück git mv.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Benennen Sie mein Stylesheet im Finder von iphone.cssnach ummobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
Git glaubt nun, ich hätte eine CSS-Datei gelöscht und eine neue hinzugefügt. Nicht was ich will, lass uns die Umbenennung rückgängig machen und git die Arbeit machen lassen.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Zurück zu meinem Ausgangspunkt.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Verwenden wir git mvstattdessen.
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
Sieht so aus, als wären wir gut. Warum hat git die Umbenennung beim ersten Mal nicht erkannt, als ich Finder verwendet habe?
git mv old newaktualisiert den Index automatisch. Wenn Sie außerhalb von Git umbenennen, müssen Sie das git add newund git rm olddie Änderungen am Index vornehmen. Sobald Sie dies getan haben, wird dies git statuswie erwartet funktionieren.
public_htmlVerzeichnis verschoben , die in Git verfolgt werden. Nach der Ausführung git add .und git commitzeigte es immer noch eine Reihe von 'gelöschten' Dateien in git status. Ich habe a ausgeführt git commit -aund die Löschungen wurden festgeschrieben, aber jetzt habe ich keinen Verlauf für die Dateien, in denen public_htmljetzt leben . Dieser Arbeitsablauf ist nicht so reibungslos, wie ich es gerne hätte.
add+rmodermv- es wird das gleiche Ergebnis erzielt. Git verwendet dann die Umbenennungs- / Kopiererkennung, um Sie darüber zu informieren, dass es sich um eine Umbenennung handelt. Die von Ihnen angegebene Quelle ist ebenfalls ungenau. Es ist wirklich egal, ob Sie im selben Commit + umbenennen oder nicht. Wenn Sie einen Unterschied zwischen Ändern und Umbenennen vornehmen, wird dies bei der Umbenennungserkennung als Umbenennen + Ändern angezeigt. Wenn es sich bei der Änderung um eine vollständige Umschreibung handelt, wird sie als hinzugefügt und gelöscht angezeigt - unabhängig davon, wie Sie sie ausgeführt haben es.