Zmieniłem nazwy kilku plików przez de pierwszą literę, jak w Name.jpg
do name.jpg
. Git nie rozpoznaje tych zmian i musiałem usunąć pliki i przesłać je ponownie. Czy istnieje sposób, aby Git rozróżniał wielkość liter podczas sprawdzania zmian w nazwach plików? Nie dokonałem żadnych zmian w samym pliku.
git
case-sensitive
git-commit
git-config
Gil Shulman
źródło
źródło
git mv
praca.Odpowiedzi:
Możesz użyć git mv :
źródło
-f
flaga nie jest już potrzebna .-f
przełącznik z najnowszych git (2,18), w przeciwnym razie można dostać sięfatal: destination exists
błąd.Git posiada ustawienia konfiguracyjnego, który mówi to, czy chce być wielkość liter lub niewrażliwe:
core.ignorecase
. Aby powiedzieć Gitowi, aby rozróżniał wielkość liter, po prostu ustaw to ustawienie nafalse
:Dokumentacja
Z
git config
dokumentacji :Systemy plików bez rozróżniania wielkości liter
Są dwa najpopularniejsze systemy operacyjne, w których nie są rozróżniane małe i wielkie litery
źródło
false
w systemie plików bez rozróżniania wielkości liter jest złym pomysłem . To niekoniecznie jest oczywiste. Na przykład po prostu wypróbowałem to na komputerze Mac, myśląc, że to rozwiąże moje problemy, a następnie zmieniłem nazwę pliku zproductPageCtrl.js
naProductPageCtrl.js
.git status
zobaczyłem nowy plik o nazwie,ProductPageCtrl.js
ale nie sądziłem, żeproductPageCtrl.js
został usunięty. Kiedy dodałem nowe pliki, zatwierdziłem i przekazałem do GitHub, repozytorium GitHub zawierało teraz oba pliki, chociaż moje (podobno aktualne) repozytorium lokalne miało tylko jeden.git mv
aby przenieść plik i zobaczyć, jak git nim zarządza. Jeśli przenosisz plik bez git, nic nie może zrobić, ponieważ system plików nie mówi prawdy do git. Jest to kwestia ntfs / fat / hfs i tym podobnych, a nie git / linux.Dzięki SourceTree mogłem to wszystko zrobić z interfejsu użytkownika
FILE.ext
nawhatever.ext
whatever.ext
nafile.ext
Jest to trochę żmudne, ale jeśli musisz zrobić to tylko z kilkoma plikami, jest to dość szybkie
źródło
Oto co zrobiłem na OS X:
Dwa kroki, ponieważ w przeciwnym razie pojawia się błąd „istnieje plik”. Być może można to zrobić w jednym kroku, dodając
--cached
lub coś takiego.źródło
-f
(force) to flaga, której szukasz-f
flaga nie pomaga w przypadku, gdy FS nie uwzględnia wielkości liter. Jednak dwuetapowe rozwiązanie zadziałało dla mnie-f
działało! Dzięki za wskazówkę-f
flagi.git -c "core.ignorecase=false" add .
rozważy pliki, których wielkość liter została zmieniona w celu zatwierdzenia.Czasami przydaje się tymczasowa zmiana wielkości liter w Git:
Metoda nr 1 - Zmień rozróżnianie wielkości liter dla pojedynczego polecenia:
git -c core.ignorecase=true checkout mybranch
aby wyłączyć rozróżnianie wielkości liter dla pojedynczegocheckout
polecenia. Lub bardziej ogólnie:git -c core.ignorecase=
<<true or false>>
<<command>>
. (Podziękowania dla VonC za zasugerowanie tego w komentarzach).Metoda nr 2 - Zmień rozróżnianie wielkości liter dla wielu poleceń:
Aby zmienić ustawienie na dłużej (np. Jeśli przed ponowną zmianą należy uruchomić wiele poleceń):
git config core.ignorecase
(zwraca bieżące ustawienie, npfalse
.).git config core.ignorecase
<<true or false>>
- ustaw żądane nowe ustawienie.git config core.ignorecase
<<false or true>>
- przywróć wartość konfiguracji do poprzedniego ustawienia.źródło
git -c core.ignorecase=<true or false> checkout <<branch>>
? Nic po tym nie można zresetować.Pod OSX, aby uniknąć tego problemu i uniknąć innych problemów z rozwijającymi się bez uwzględniania wielkości liter systemu plików, można użyć Narzędzia dyskowego, aby utworzyć przypadek wrażliwe wirtualny napęd / dysk obrazu.
Uruchom narzędzie dyskowe, utwórz nowy obraz dysku i użyj następujących ustawień (lub zmień, jak chcesz, ale rozróżniaj wielkość liter):
Pamiętaj, aby powiedzieć gitowi, że jest teraz na FS z rozróżnianiem wielkości liter:
źródło
Wypróbowałem następujące rozwiązania z innych odpowiedzi i one nie działały:
git mv filename
git rm -f filename
Jeśli Twoje repozytorium jest hostowane zdalnie (GitHub, GitLab, BitBucket), możesz zmienić nazwę pliku w miejscu pochodzenia (GitHub.com) i wymusić zmianę nazwy pliku w odgórny sposób.
Poniższe instrukcje dotyczą GitHub, jednak ich ogólna idea powinna dotyczyć każdej platformy zdalnego hostowania repozytoriów. Pamiętaj, że typ pliku, którego nazwę próbujesz zmienić, ma znaczenie, to znaczy, czy jest to typ pliku, który GitHub uważa za edytowalny (kod, tekst itp.) Lub nieedytowalny (obraz, plik binarny itp.) W przeglądarce.
branchname
jest zaznaczony przycisk opcji „Zatwierdź bezpośrednio w oddziale”, a następnie kliknij przycisk „Zatwierdź zmiany”branchname
jest zaznaczony przycisk opcji „Zatwierdź bezpośrednio w oddziale”, a następnie kliknij przycisk „Zatwierdź zmiany”źródło
Podobnie do odpowiedzi @ Sijmen, to właśnie działało dla mnie w OSX podczas zmiany nazwy katalogu (zainspirowany tą odpowiedzią z innego postu):
Samo działanie
git mv CSS css
spowodowało błąd nieprawidłowego argumentu:fatal: renaming '/static/CSS' failed: Invalid argument
być może dlatego, że system plików OSX nie rozróżnia wielkości literps BTW, jeśli używasz Django, collectstatic również nie rozpoznałby różnicy wielkości liter i musiałbyś to zrobić ręcznie, również w statycznym katalogu głównym
źródło
1) zmień nazwę pliku
Name.jpg
naname1.jpg
2) zatwierdzić usunięty plik
Name.jpg
3) zmień nazwę pliku
name1.jpg
naname.jpg
4) Popraw plik dodany
name.jpg
do poprzedniego zatwierdzeniaźródło
fatal: bad source, source=name1.jpg, destination=name.jpg
w kroku 3. Czy masz jakieś sugestie? Thxgit add
.Zastosowałem następujące kroki:
Dla mnie to proste rozwiązanie
źródło
Możemy użyć polecenia git mv. Przykład poniżej, jeśli zmieniliśmy nazwę pliku abcDEF.js na abcdef.js, możemy uruchomić następującą komendę z terminala
źródło
Mac OSX High Sierra 10.13 nieco to rozwiązuje. Po prostu stwórz wirtualną partycję APFS dla swoich projektów git, domyślnie nie ma limitu rozmiaru i nie zajmuje miejsca.
Sensitive
git
iln -s /Volumes/Sensitive/git /Users/johndoe/git
Twój dysk będzie włączony
/Volumes/Sensitive/
Jak zatwierdzić zmiany nazw plików z rozróżnianiem wielkości liter w Git?
źródło
Kilka razy spotkałem się z tym problemem na MacOS. Git rozróżnia małe i wielkie litery, ale Mac zachowuje tylko małe i wielkie litery.
Ktoś zatwierdza plik:
Foobar.java
i po kilku dniach decyduje się zmienić nazwę naFooBar.java
. Gdy pobierzesz najnowszy kod, nie powiedzie sięThe following untracked working tree files would be overwritten by checkout...
Jedyny niezawodny sposób, w jaki to widziałem, to:
git rm Foobar.java
git commit -m 'TEMP COMMIT!!'
git rebase --continue
git rebase -i HEAD~2
idrop
TEMP COMMIT!!
FooBar.java
źródło
Kiedy dokonałeś wielu zmian nazw plików, a niektóre z nich to tylko zmiana wielkości obudowy, trudno jest zapamiętać, która jest która. ręcznie „git move” plik może być dość pracochłonny. Tak więc, co zrobiłbym podczas zadań zmiany nazwy pliku:
To rozwiąże wszystkie problemy ze sprawami bez próby ustalenia, które pliki lub foldery zostały zmienione.
źródło
git commmit --amend
w ust. 4? W przeciwnym razie nastąpi dodatkowe zatwierdzenie po usunięciu wszystkich plików. Lub możesz użyćgit rebase -i
do squasha.Jeśli nic nie działało, użyj git rm nazwa_pliku, aby usunąć plik z dysku i dodać go z powrotem.
źródło
Wziąłem @CBarr odpowiedź i napisał Pythona 3 Script to zrobić z listą plików:
źródło