Podczas gdy znalazłem podobne pytanie , nie znalazłem odpowiedzi na mój problem
Kiedy próbuję zmienić nazwę katalogu z FOO na foo przez git mv FOO foo
, dostaję
fatal: renaming 'FOO' failed: Invalid argument
DOBRZE. Więc próbujęgit mv FOO foo2 && git mv foo2 foo
Ale kiedy próbuję dokonać transakcji za pośrednictwem git commit .
, dostaję
# 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)
Gdy dodam katalog przez git add foo
nic, nic się nie zmieni i ponownie git commit .
otrzymam ten sam komunikat.
Co ja robię źle? Myślałem, że używam systemu z rozróżnianiem wielkości liter (OSX), dlaczego nie mogę po prostu zmienić nazwy katalogu?
macos
git
version-control
case-sensitive
oschrenk
źródło
źródło
git mv
praca.git mv foo Foo
jeśli używasz powłoki cygwin.Odpowiedzi:
Jesteś w środowisku niewrażliwym na wielkość liter. Co więcej, dodając bez,
-A
nie zajmie się usunięciem strony,mv
ponieważ Git to rozumie. Ostrzeżenie! Upewnij się, że nie ma w pobliżu żadnych innych zmian ani nieśledzonych plików, ponieważ zostaną one zatwierdzone w ramach tej zmiany!git stash -u
najpierw zrób to, a potemgit stash pop
. Kontynuacja: Aby obejść ten problem, wykonaj następujące czynności:Jest to wyciągnięty sposób na zmianę katalogu roboczego, zatwierdzanie, a następnie zwijanie 2 zatwierdzeń. Możesz po prostu przenieść plik do indeksu, ale dla kogoś, kto jest nowy w git, może nie być wystarczająco wyraźne, co się dzieje. Krótsza wersja to
Jak zasugerowano w jednym z komentarzy, możesz również zrobić interaktywny rebase (
git rebase -i HEAD~5
jeśli wprowadzono niewłaściwy przypadek 5 zatwierdzeń temu), aby go naprawić i nie wyświetlać niewłaściwego przypadku w dowolnym miejscu w historii. Musisz być ostrożny, jeśli to zrobisz, ponieważ odtąd skróty zatwierdzania będą inne, a inni będą musieli bazować lub ponownie łączyć swoją pracę z niedawną przeszłością oddziału.Jest to związane z poprawieniem nazwy pliku: czy w git nie jest rozróżniana wielkość liter?
źródło
git add foo2
.-A
dba o oba. Odwrotnie dla pierwszego kroku. Dodam ostrzeżenie. Dzięki!git rebase -i HEAD~2
. Uwaga: Aby to uprościć, ustaw końcową wiadomość w pierwszym zatwierdzeniu i napraw drugą.Chcesz ustawić opcję
core.ignorecase
na false, co spowoduje, że Git zwróci uwagę na wielkość liter w systemach plików, które nie obsługują go natywnie. Aby włączyć w repozytorium:Następnie możesz zmienić nazwę pliku za pomocą
git mv
i będzie działać zgodnie z oczekiwaniami.źródło
I modified a file that doesn't exist
.. hrmerror: The following untracked working tree files would be overwritten by checkout:
ale ... te pliki nie istnieją.Udało mi się to rozwiązać, używając git 1.7.7, używając tymczasowej nazwy pliku:
źródło
(
git mv
-bezpłatny wariant.)Ten problem napotkałem w Git na Mac OS X 10.9. Rozwiązałem to w następujący sposób:
git rm -r --cached /path/to/directory
To ustawia katalog do usunięcia w Git, ale tak naprawdę nie usuwa żadnych fizycznych plików (
--cached
). To sprawia, że katalog, teraz z odpowiednią literą, pojawia się w nieśledzonych plikach.Możesz to zrobić:
Git rozpozna wtedy, że zmieniłeś nazwy plików, a kiedy to zrobisz
git status
, powinieneś zobaczyć kilkarenamed:
linii. Sprawdź je i upewnij się, że wyglądają poprawnie, a jeśli tak, możesz zatwierdzić zmiany normalnie.źródło
mv
polecenie nie działało, aby faktycznie zmienić nazwę katalogu; Musiałem zmienić nazwę w Finderze. Poza tym ta poprawka działa idealnie.Jest to szybkie i bezpieczne rozwiązanie:
Ostrzeżenie! Zawsze zmieniaj nazwy wszystkich plików w folderze o zmienionej nazwie (użyj
/*
).Nie zmieniaj nazw pojedynczych plików. Prowadzi to do błędu opisanego w tej odpowiedzi .
Jeśli chcesz najpierw zobaczyć wynik, użyj
-n
:Po dokonaniu
mv
:Teraz Git powinien zmienić nazwę folderu ZARÓWNO w swoich plikach wewnętrznych i systemie plików.
źródło
Wymuś to z opcją -f:
źródło
false
, zadziałało dla mnieMiałem jeden związany problem.
Jeden folder o nazwie „Pro” (utworzony jako pierwszy) i inny „pro” (utworzony przez pomyłkę). Na Macu jest to to samo, ale różni się w zależności od git.
git config zmienia nazwy plików na właściwy folder (dzięki), a także tworzy pliki duchów w 'pro' (Nie !!). Nie mogłem dodać zmian pliku widma do ścieżki i nie mogłem wyewidencjonować innych gałęzi, chyba że niosę te pliki ze sobą, a także nie mogłem go zresetować.
Zamiast tego zrobiłem
Aby uczynić go wyjątkowo bezpiecznym, zrobiłem to w oddzielnej gałęzi napraw, a następnie ponownie połączyłem się z główną gałęzią
Czy dla guru utworzonego przez plik ducha każdy guru może wyjaśnić, jak i dlaczego? Z góry dziękuję.
źródło
Nie używasz systemu plików z rozróżnianiem wielkości liter w OS X, chyba że wyraźnie wybierzesz taki system. HFS + może być wielkość liter, ale domyślnie jest wielkość liter.
źródło
Oto naprawdę proste rozwiązanie dotyczące całego gitfoo na tej stronie.
źródło
Poprawienie odpowiedzi Adama Dymitruka (głupie, że SO nie pozwala mi skomentować jego odpowiedzi), użycie „git mv” automatycznie ustawi dokładnie przeniesione pliki. Nie jest konieczne składowanie i ryzykownego „git add -A” można uniknąć:
źródło
Działa to świetnie dla mnie w systemie Windows. Używany PowerShell z następującymi elementami:
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
Dzięki powyższej odpowiedzi Adama.
źródło