Jak poprawnie zmienić nazwę katalogu w repozytorium Git?


652

Myślę, że to powinno działać, aby skopiować katalog, aby zostać zmieniona do nowego katalogu z żądaną nazwę i usunąć stary katalog , i git add, git commiti pushwszystko. Ale czy to najlepszy sposób?



5
Jeśli chodzi o Git, kopiowanie i usuwanie jest tym samym, co ruch. Git nagrywa (kopiuj + usuń) i (przenieś) w ten sam sposób.
Dietrich Epp,

Odpowiedzi:


1179

Podstawowa zmiana nazwy (lub przeniesienie):

git mv <old name> <new name>

Rozróżniana jest wielkość liter - np. od casesensitivedo CaseSensitive- musisz wykonać dwa kroki:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Więcej o rozróżnianiu wielkości liter w Git… )

… A następnie zatwierdzenie i wypchnięcie byłoby najprostszym sposobem na zmianę nazwy katalogu w repozytorium git.


231
Ale jeśli chcesz zmienić nazwę od casesensitivena CaseSensitive, możesz to zrobić w następujący sposób: git mv casesensitive Tempa następnie git mv Temp CaseSensitive
ViliusK

3
Czy zapisuje cały dziennik i statystyki?
orezvani

23
@ViliusK, jeśli masz do czynienia z katalogami, w których rozróżniana jest wielkość liter, w jakikolwiek prosty sposób, który znalazłem, to git rm -rf --cached path/to/your/directoriesponownie dodaj i zatwierdź
dtothefp

1
Ale dlaczego GIT nie ma odpowiedniej obsługi zmiany nazwy pakietu / katalogu? Dlaczego muszę nawet utworzyć osobny folder. Kiedy zmieniam nazwę pakietu, czy nie powinien on traktować go jako różnicy i zająć się nim w momencie zatwierdzania i wypychania?
Ahmed

1
Wielkie dzięki za to. Dla mnie musiałem najpierw wykonać, git config core.ignorecase falsea następnie uruchomić kolejno polecenia, w przeciwnym razie dostaniesz source is emptybłąd.
Rika

107

Jeśli pojawi się ten błąd: fatal: zmiana nazwy „foldername” nie powiodła się: Niepoprawny argument

Spróbuj tego:

git mv foldername tempname && git mv tempname folderName


8
Właśnie tego potrzebowałem, aby zmienić wielkość liter w katalogu.
cjserio

Token „&&” nie jest prawidłowym separatorem instrukcji w tej wersji. git wersja 2.11.0. okna.
Tim Hardy

@Tim Hardy może być również prowadzony w dwóch oddzielnych komend, git mv foldername tempnamei git mv tempname folderName, które powinny działać w systemie Windows.
Larkeith,

to nie działa ! wynik końcowy umieści nowy folder „folderName” w folderze „tempname”
zakład

61

1. Zmień nazwę folderu ze starego na nowy

git mv oldfolder newfolder

2. Jeśli newfolder jest już w twoim repozytorium i chcesz go zastąpić i użyć: - force

git mv -f oldfolder newfolder

Nie zapomnij dodać zmian do indeksu i zatwierdzić je po zmianie nazwy za pomocą git mv.

3. Zmiana nazwy foldername na folderName w systemach plików bez rozróżniania wielkości liter

Prosta zmiana nazwy za pomocą normalnej komendy mv (nie git mv) nie zostanie rozpoznana jako zmiana pliku z git. Jeśli spróbujesz, używając polecenia „git mv”, jak w poniższym wierszu

git mv foldername folderName

Jeśli używasz systemu plików bez rozróżniania wielkości liter, np. Na komputerze Mac i nie skonfigurowałeś go tak, aby rozróżniał wielkość liter, pojawi się komunikat o błędzie taki jak ten:

fatal: zmiana nazwy „foldername” nie powiodła się: niepoprawny argument

Oto, co możesz zrobić, aby działało:

git mv foldername tempname && git mv tempname folderName

To dzieli proces zmiany nazwy, zmieniając najpierw folder na zupełnie inną nazwę folderu. Po zmianie nazwy na inną nazwę folderu nazwa folderu może wreszcie zostać zmieniona na nową nazwę folderu. Po tych „git mv” znowu nie zapomnij dodać i zatwierdzić zmian. Chociaż prawdopodobnie nie jest to piękna technika, działa ona doskonale. System plików nadal nie rozpoznaje zmiany wielkości liter, ale git robi to z powodu zmiany nazwy na nową nazwę folderu i to wszystko, czego chcieliśmy :)


9

Możesz zmienić nazwę katalogu za pomocą systemu plików. Następnie możesz zrobić git rm <old directory>i git add <new directory>( Strona pomocy ). Następnie możesz zatwierdzać i naciskać.

Git wykryje, że zawartość jest taka sama i że jest to tylko operacja zmiany nazwy i pojawi się jako wpis zmiany nazwy w historii. Możesz sprawdzić, czy tak jest przed użyciem zatwierdzeniagit status


12
hej, ale w ten sposób stracę całą historię popełnień.
ViliusK

1
Możesz go zachować, jeśli użyjesz flagi -follow.
Oleksi

Dwa polecenia zamiast jednego i konieczność dodania flagi? Czy jest to w jakikolwiek sposób lepsze niż git mv?
antygel

4
@topper Nie, git mv to tylko alias dla rm + add. Korzystanie z git mv jest lepszym rozwiązaniem.
Oleksi

5
@topper Pamiętaj, że nadal będziesz musiał użyć opcji - śledź, aby wyświetlić historię, niezależnie od tego, której metody używasz do przeniesienia pliku.
Oleksi

3

Wydaje mi się, że z aplikacji internetowej nie możesz, ale możesz zmienić nazwę wszystkich folderów w Git Client, spowoduje to przeniesienie plików do nowych folderów o zmienionych nazwach, niż zatwierdzanie i wypychanie do zdalnego repozytorium.

Miałem bardzo podobny problem: musiałem zmienić nazwę różnych folderów z wielkich na małe (jak Abc -> abc), zmieniłem nazwy wszystkich folderów na atrapę (np. „Abc___”) i później zdecydowałem się na zdalne repozytorium po że zmieniłem nazwę wszystkich folderów na pierwotną nazwę małymi literami (jak abc) i zajęło im to!


0

Rozwiązałem to w dwóch krokach. Aby zmienić nazwę folderu za pomocą polecenia mv, potrzebujesz do tego odpowiednich uprawnień, jeśli nie masz odpowiednich uprawnień, możesz wykonać następujące kroki. Załóżmy, że chcesz zmienić nazwę rozróżniającą wielkość liter na rozróżniającą wielkość liter.

Krok 1: Zmień nazwę folderu (z rozróżnianiem wielkości liter) na coś innego z Eksploratora. np. Zmień nazwę z rozróżnianiem wielkości liter w folderze 1, zatwierdź tę zmianę.

Krok 2: Zmień nazwę tego nowo nazwanego folderu (folder1) na oczekiwaną nazwę z rozróżnianiem wielkości liter (rozróżniana wielkość liter), np. Zmień nazwę folderu 1 na wielkość liter. Zatwierdź tę zmianę.


0

W przypadku zmiany nazwy z rozróżnianiem wielkości liter, git mv somefolder someFolderdziałało dla mnie wcześniej, ale dzisiaj z jakiegoś powodu nie. Więc jako obejście stworzyłem nowy folder temp, przeniosłem całą zawartość somefolderdo temp, usunąłem somefolder, zatwierdziłem temp, a następnie utworzyłem someFolder, przeniosłem całą zawartość tempdo someFolder, usunąłem temp, zatwierdziłem i wypchnąłem someFolderi zadziałało! Pokazuje się jak someFolderw git.


-16

Po prostu zmień nazwę folderu. git to „narzędzie do śledzenia zawartości”, więc skróty SHA1 są takie same i git wie, że zmienisz jego nazwę. Jedyne, co się zmienia, to obiekt drzewa.

rm <directory>
git add .
git commit

1
To nie zawsze działa. Z pewnością nie działało dla mnie na coś. jak 20% plików ...
Tomáš Fejfar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.