Während ich eine ähnliche Frage fand, fand ich keine Antwort auf mein Problem
Wenn ich versuche, das Verzeichnis von FOO in foo umzubenennen, git mv FOO foo
bekomme ich
fatal: renaming 'FOO' failed: Invalid argument
OK. Also versuche ich esgit mv FOO foo2 && git mv foo2 foo
Aber wenn ich versuche, mich zu verpflichten, git commit .
bekomme ich
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
Wenn ich das Verzeichnis über git add foo
nichts hinzufüge, ändert sich nichts und git commit .
ich erhalte wieder die gleiche Nachricht.
Was mache ich falsch? Ich dachte, ich verwende ein System mit Groß- und Kleinschreibung (OSX). Warum kann ich das Verzeichnis nicht einfach umbenennen?
macos
git
version-control
case-sensitive
oschrenk
quelle
quelle
git mv
funktioniert ein einfaches .git mv foo Foo
wenn Sie eine Cygwin-Shell verwenden.Antworten:
Sie befinden sich in einer Umgebung, in der die Groß- und Kleinschreibung nicht berücksichtigt wird. Darüber hinaus
-A
kümmert sich das Hinzufügen ohne das nicht um die entfernte Seite des,mv
wie Git es versteht. Warnung! Stellen Sie sicher, dass keine anderen Änderungen oder nicht verfolgten Dateien vorhanden sind, wenn Sie dies tun. Andernfalls werden sie im Rahmen dieser Änderung festgeschrieben!git stash -u
Mach das zuerst und danngit stash pop
danach. Weiter: Um dies zu umgehen, gehen Sie wie folgt vor:Auf diese Weise können Sie das Arbeitsverzeichnis ändern, die beiden Festschreibungen festschreiben und anschließend reduzieren. Sie können die Datei einfach in den Index verschieben, aber für jemanden, der neu in Git ist, ist es möglicherweise nicht explizit genug, was passiert. Die kürzere Version ist
Wie in einem der Kommentare vorgeschlagen, können Sie auch eine interaktive Neufestsetzung durchführen (
git rebase -i HEAD~5
wenn der falsche Fall vor 5 Commits eingeführt wurde), um den Fall dort zu beheben und den falschen Fall überhaupt nicht im Verlauf anzuzeigen . Sie müssen vorsichtig sein, wenn Sie dies tun, da die Commit-Hashes von da an anders sein werden und andere ihre Arbeit mit der jüngsten Vergangenheit des Zweigs neu zusammenführen oder neu zusammenführen müssen.Dies hängt mit der Korrektur des Dateinamens zusammen: Bei Git wird nicht zwischen Groß- und Kleinschreibung unterschieden?
quelle
git add foo2
.-A
kümmert sich um beides. Umgekehrt für den ersten Schritt. Ich werde die Warnung hinzufügen. Vielen Dank!git rebase -i HEAD~2
. Hinweis: Um dies zu vereinfachen, legen Sie die endgültige Nachricht in Ihrem ersten Commit fest und korrigieren Sie die zweite.Sie möchten die Option
core.ignorecase
auf false setzen, wodurch Git auf Dateisysteme achtet, die dies nicht nativ unterstützen. So aktivieren Sie in Ihrem Repo:Dann können Sie die Datei mit umbenennen
git mv
und es wird wie erwartet funktionieren.quelle
I modified a file that doesn't exist
.. hrmerror: The following untracked working tree files would be overwritten by checkout:
aber ... diese Dateien existieren nicht.Ich konnte dies mithilfe von Git 1.7.7 mithilfe eines temporären Dateinamens beheben:
quelle
(
git mv
-freie Variante.)Ich bin auf dieses Problem in Git unter Mac OS X 10.9 gestoßen. Ich habe es wie folgt gelöst:
git rm -r --cached /path/to/directory
Dadurch wird das Verzeichnis zum Löschen in Git freigegeben, es werden jedoch keine physischen Dateien entfernt (
--cached
). Dadurch wird auch das Verzeichnis mit der richtigen Groß- und Kleinschreibung in nicht verfolgten Dateien angezeigt.So können Sie Folgendes tun:
Git erkennt dann, dass Sie die Dateien umbenannt haben, und wenn Sie dies tun
git status
, sollten Sie eine Reihe vonrenamed:
Zeilen sehen. Überprüfen Sie sie und stellen Sie sicher, dass sie korrekt aussehen. In diesem Fall können Sie die Änderungen normal übernehmen.quelle
mv
Befehl nicht funktioniert hat, um das Verzeichnis tatsächlich umzubenennen. Ich musste es im Finder umbenennen. Ansonsten funktioniert dieses Update einwandfrei.Dies ist eine schnelle und fehlerfreie Lösung:
Warnung! Benennen Sie immer alle Dateien im umbenannten Ordner um (verwenden
/*
).Benennen Sie einzelne Dateien nicht um. Dies führt zu einem Fehler, der in dieser Antwort beschrieben wird .
Wenn Sie zuerst das Ergebnis sehen möchten, verwenden Sie
-n
:Nachdem Sie eine
mv
:Jetzt sollte Git den Ordner BEIDE in seinen internen Dateien und im Dateisystem umbenannt haben.
quelle
Erzwinge es mit der Option -f:
quelle
false
, es hat bei mir funktioniertIch hatte ein verwandtes Problem.
Ein Ordner mit dem Namen 'Pro' (zuerst erstellt) und ein anderer 'Pro' (versehentlich erstellt). Auf dem Mac ist es dasselbe, aber je nach Git unterschiedlich.
Die Git-Konfiguration benannte die Dateien in den richtigen Ordner um (danke) und erstellte auch Geisterdateien in 'pro' (Nein !!). Ich konnte dem Track keine Änderungen an Geisterdateien hinzufügen und andere Zweige nicht auschecken, es sei denn, ich habe diese Dateien bei mir, und ich konnte sie auch nicht irgendwie zurücksetzen.
Stattdessen habe ich es getan
Um es besonders sicher zu machen, habe ich es in einem separaten Fix-Zweig gemacht und dann wieder zum Hauptzweig zusammengeführt
Kann ein Guru für das von erstellte Ghost-File-Problem erklären, wie und warum? Danke im Voraus.
quelle
Sie verwenden in OS X kein Dateisystem, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, es sei denn, Sie wählen dies explizit aus. Bei HFS + kann zwischen Groß- und Kleinschreibung unterschieden werden, bei der Standardeinstellung wird jedoch zwischen Groß- und Kleinschreibung unterschieden.
quelle
Hier ist eine wirklich einfache Lösung für alle Gitfoo auf dieser Seite.
quelle
Wenn Sie die Antwort von Adam Dymitruk verbessern (dumm, dass SO seine Antwort nicht kommentieren lässt), werden mit "git mv" automatisch genau die verschobenen Dateien bereitgestellt. Es ist kein Verstauen erforderlich und das riskante "git add -A" kann vermieden werden:
quelle
Dies hat bei Windows unter Windows hervorragend funktioniert. Benutzte Powershell mit folgendem:
mv .\Folder-With-Wrong-Casing .\temp
git add -A
git commit -m "renamed folder with wrong casing to temp"
mv .\temp .\Folder-with-Correct-Casing
git add -A
git commit --amend -m "Renamed to proper casing"
git push
Dank Adams Antwort oben.
quelle