Zmiana kapitalizacji nazw plików w Git

Próbuję zmienić nazwę pliku, aby miał inną kapitalizację niż wcześniej:

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js

Jak widzisz, git rzuca się na to. Próbowałem zmienić nazwę używając tylko starej komendy mv, ale git nie odbiera nazwy (jako rename lub jako nowy, nie śledzony plik).

Jak mogę zmienić plik, aby miał inną wielką literę o tej samej nazwie? Jestem na Mac OS X 10.7.3 z git 1.7.9.1 używając zsh 4.3.15.

Author: Steven Vascellaro, 2012-05-10

8 answers

Uruchamianie git 2.0.1 (25 czerwca 2014), a git mv działa tylko na niewrażliwym na wielkość liter systemie operacyjnym .

Zobacz commit baa37bf by David Turner (dturner-tw)

mv: Zezwalaj na zmianę nazwy, aby naprawić wielkość liter na systemach plików niewrażliwych na wielkość liter

"git mv hello.txt Hello.txt" na niewrażliwym na wielkość liter systemie plików zawsze wywołuje błąd " destination already exists", ponieważ te dwie nazwy odnoszą się do tej samej ścieżki z punktu widzenia systemu plików i wymaga od użytkownika podania" --force " podczas poprawiania wielkości liter ścieżka zapisana w indeksie i w następnym zatwierdzeniu.

Wykryj ten przypadek i pozwól mu na to bez konieczności " --force".

git mv hello.txt Hello.txt po prostu działa (nie --force wymagane już).

 347
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-29 09:55:48

Biorąc pod uwagę powyższe odpowiedzi, można go uruchomić za pomocą jednego polecenia Z "--force":

 git mv --force myfile MyFile
 407
Author: Marcello de Sales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-17 22:31:10

Czasami chcesz zmienić kapitalizację wielu plików na OS X. Wykonywanie git mv poleceń szybko się zmęczy, aby ułatwić to, co robię:

  1. Przenieś wszystkie pliki poza katalog do powiedzmy pulpitu.
  2. wykonaj git add . -A, Aby usunąć wszystkie pliki.
  3. Zmień nazwę wszystkich plików na pulpicie na odpowiednią wielkość.
  4. Przenieś wszystkie pliki z powrotem do oryginalnego katalogu.
  5. Do A git add . git powinien zobaczyć, że pliki są / align = "left" /

Teraz możesz zrobić commit mówiący, że zmieniłeś kapitalizację pliku.

 64
Author: MrHus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-12 12:47:48

Nazwy plików w systemie OS X nie uwzględniają wielkości liter (domyślnie). Jest to bardziej problem z systemem operacyjnym niż z Gitem. Jeśli usuniesz i ponownie dodasz plik, powinieneś dostać to, czego chcesz, lub zmienić nazwę na coś innego i ponownie zmienić nazwę.

 53
Author: larsks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-30 19:59:51

Ponieważ OP jest o "Zmiana wielkości liter nazw plików w Git":

Jeśli próbujesz zmienić nazwę pliku w swoim projekcie, nie musisz wymusić zmianę nazwy z Gita. IMO, wolałbym zmienić kapitalizację z mojego IDE / edytora i upewnić się, że poprawnie skonfiguruję git, aby odebrać zmianę nazwy.

Domyślnie szablon git jest ustawiony na ignorowanie wielkości liter (Git niewrażliwe na wielkość liter). Aby sprawdzić, czy masz domyślny szablon użyj --get, Aby pobrać wartość dla określonego klucza. Użyj --local i --global, aby wskazać gitowi, czy wybrać wartość klucza config z lokalnej konfiguracji git repo, czy globalnej. Jako przykład, jeśli chcesz wyszukać swój klucz globalny core.ignorecase:

git config --global --get core.ignorecase

Jeśli zwróci true Upewnij się, że ustawisz ją jako:

git config --global core.ignorecase false

(upewnij się, że masz odpowiednie uprawnienia do zmiany globalnej) I już to masz, teraz twój git nie zignoruje wielkich liter i nie potraktuje ich jako zmian.

Jako sugestię, jeśli pracujesz nad projekty wielojęzyczne i uważasz, że nie wszystkie projekty powinny być traktowane przez git jako uwzględniające wielkość liter, wystarczy zaktualizować lokalny core.ignorecase

 16
Author: Segmented,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 09:52:28

Możesz otworzyć ".katalog "git", a następnie edytować plik "config". Under "[core] " set "ignorecase = true" i gotowe;)

 3
Author: Деян Добромиров,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-14 07:24:50

Ten fragment Pythona spowoduje git mv --force, że wszystkie pliki w katalogu będą pisane małymi literami, np: foo / Bar.js stanie się foo / bar.js via git mv foo/Bar.js foo/bar.js --force

Zmodyfikuj go do swoich upodobań, po prostu pomyślałem, że się podzielę:)

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)
 1
Author: blented,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-01 04:05:42

Zbiorcze git mv pliki na małe litery w systemie macOS:

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

Spowoduje pisanie małymi literami wszystkich plików w folderze.

 0
Author: softarn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 07:54:50