666 Stimmen

Ändern der Großschreibung von Dateinamen in Git

Ich versuche, eine Datei umzubenennen, damit sie eine andere Großschreibung hat als zuvor:

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: Ziel existiert bereits, Quelle=src/collision/b2AABB.js, Ziel=src/collision/B2AABB.js

Wie du siehst, reagiert Git darauf gereizt. Ich habe auch versucht, die Umbenennung nur mit dem guten alten mv-Befehl durchzuführen, aber Git erkennt die Umbenennung nicht (weder als Umbenennung noch als neue nicht verfolgte Datei).

Wie kann ich eine Datei umbenennen, damit sie eine andere Großschreibung des gleichen Namens hat? Ich benutze Mac OS X v10.7.3 (Lion) mit Git 1.7.9.1 und Z Shell (zsh) 4.3.15.

11voto

Sie können das Verzeichnis ".git" öffnen und dann die Datei "config" bearbeiten. Unter "[core]" setzen Sie "ignorecase = true" und Sie sind fertig ;)

7voto

Louis Caron Punkte 823

Antwort von Vonc ist völlig korrekt, aber es gibt immer noch eine potenzielle Situation, in der Ihre Umbenennungsaktion mit git für Windows nicht funktionieren würde:

Angenommen, Sie möchten dir/mypath in dir/myPath umbenennen:

git mv dir/mypath dir/myPath

aber es schlägt fehl und meldet:

Umbenennung von 'dir/mypath' in 'dir/mypath' fehlgeschlagen. Soll ich es noch einmal versuchen? (j/n) 

Das Problem ist, dass die Bash Ihren Befehlszeilenbefehl dir/myPath stillschweigend durch dir/mypath ersetzt hat, weil sie erkannt hat, dass ein solcher Pfad mit einer anderen Groß- und Kleinschreibung existiert.

Die Lösung ist die Verwendung einer Zwischenverschiebeoperation:

git mv dir/mypath dir/mypath_temp
git mv dir/mypath_temp dir/myPath

6voto

softarn Punkte 4894

Um Dateien in Kleinbuchstaben auf macOS und Git-Bash unter Windows zu verschieben, verwenden Sie git mv im Stapelmodus:

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done

Das wird alle Dateien in einem Ordner in Kleinbuchstaben umwandeln.

2voto

lucho20pt Punkte 77

Arbeitsbeispiel:

git mv ./src/images/poster_video.PNG ./src/images/poster_video.png

1voto

blented Punkte 2433

Dieser Python-Ausschnitt wird alle Dateien in einem Verzeichnis mit git mv --force in Kleinbuchstaben umwandeln. Zum Beispiel wird foo/Bar.js zu foo/bar.js via git mv foo/Bar.js foo/bar.js --force.

Passen Sie es nach Ihren Wünschen an. Ich dachte nur, ich würde es teilen :)

import os
import re

searchDir = 'c:/someRepo'
exclude = ['.git', 'node_modules','bin']
os.chdir(searchDir)

for root, dirs, files in os.walk(searchDir):
    dirs[:] = [d for d in dirs if d not in exclude]
    for f in files:
        if re.match(r'[A-Z]', f):
            fullPath = os.path.join(root, f)
            fullPathLower = os.path.join(root, f[0].lower() + f[1:])
            command = 'git mv --force ' + fullPath + ' ' + fullPathLower
            print(command)
            os.system(command)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X