Ich habe zwei Dateien index.htmlund template.html. Ich zog die meisten index.htmlin template.htmlund jetzt git denkt , dass ich ein Umbenennungs tat , als ich beide Dateien hinzufügen. Ist es möglich, dies in bestimmten Fällen zu verhindern?
Ich habe zwei Dateien index.htmlund template.html. Ich zog die meisten index.htmlin template.htmlund jetzt git denkt , dass ich ein Umbenennungs tat , als ich beide Dateien hinzufügen. Ist es möglich, dies in bestimmten Fällen zu verhindern?
Antworten:
Es gibt eine "akzeptierte" Antwort, die jedoch keinen Hinweis auf die Beantwortung der Frage gibt.
Die richtige Antwort aus git-log (1) und git-diff (1) lautet:
--no-renames
Turn off rename detection, even when the configuration
file gives the default to do so.
Git verfolgt Inhalte , keine Dateinamen. Wenn zwei Dateien einen im Wesentlichen ähnlichen Inhalt haben, glaubt git, dass Sie die Datei kopiert oder umbenannt haben. Wenn Sie git-log (1) lesen, lernen Sie:
Der Ähnlichkeitsindex ist der Prozentsatz der unveränderten Zeilen, und der Unähnlichkeitsindex ist der Prozentsatz der geänderten Zeilen. Es ist eine abgerundete Ganzzahl, gefolgt von einem Prozentzeichen. Der Ähnlichkeitsindexwert von 100% ist daher für zwei gleiche Dateien reserviert, während 100% Unähnlichkeit bedeutet, dass keine Zeile aus der alten Datei in die neue Datei gelangt ist.
Angenommen, Ihr Ähnlichkeitsindex ist 100%, wird Git denken, dass dies eine Kopie ist. Am besten fügen Sie eine sinnvolle Protokollnachricht oder Notiz hinzu (siehe Git-Notizen (1) für weitere Informationen), um zu erklären, was los ist, wenn Sie nicht glauben, dass Git das Richtige tut.
Sie können auch versuchen, die Werte anzupassen, die git verwendet, um etwas als Kopie oder Umbenennung zu betrachten. Das Handbuch für Git-Log (1) sagt:
-M[<n>], --find-renames[=<n>]
If generating diffs, detect and report renames for each commit. For
following files across renames while traversing history, see --follow. If
n is specified, it is a threshold on the similarity index (i.e. amount
of addition/deletions compared to the file’s size). For example, -M90%
means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
-C[<n>], --find-copies[=<n>]
Detect copies as well as renames. See also --find-copies-harder.
If n is specified, it has the same meaning as for -M<n>.
Auch dies hilft Ihnen nicht, wenn die Dateien größtenteils ähnlich sind, aber Sie können diese Werte sicherlich verwenden, um zu optimieren, wie ähnlich sie sein müssen, um als Kopien oder Umbenennungen betrachtet zu werden. Ihr Kilometerstand kann variieren.
Wenn Sie sich kurz vor einem Commit befinden und "Sie fühlen sich schlecht, dass Git verrückt geworden ist", machen Sie einfach das Hinzufügen der mehrdeutigen Datei rückgängig, die Sie umbenannt haben, führen Sie ein Commit durch, fügen Sie die mehrdeutige Datei erneut hinzu und schreiben Sie Folgendes fest:
git reset ambiguous_file_git_thought_you_renamed
git commit
git add ambiguous_file_git_thought_you_renamed
git commit
Das hat bei mir funktioniert.
Überprüfen Sie, ob keine Umbenennung stattgefunden hat:
git diff --name-status -C HEAD^^ HEAD
M ambiguous_file_git_thought_you_renamed
M original_file
"M" am Anfang bedeutet geändert, "R" bedeutet umbenannt. Beachten Sie, dass hier keine Umbenennung vorhanden ist.
git commitdas --amendFlag haben, um die Änderung in dasselbe Commit aufzunehmen? Ich habe die Flagge hinzugefügt, und dies hat bei mir funktioniert, um die Umbenennungserkennung zu umgehen.
Um zu umgehen, dass Git denkt, es sei eine Umbenennung in "One" Commit.
git commit --amend--editich in den (neuen) Kommentaren in der Commit-Nachricht sehen, was meiner Meinung nach vor sich geht.