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?

qazwsx
źródło
1
Możliwy duplikat: jak powiedzieć Gitowi, że to ten sam katalog, tylko inna nazwa
Christopher Peisert
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.

CB Bailey
źródło
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

Jacques Betancourt
źródło
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 :)

akshay_rahar
źródło
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

Oleksi
źródło
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!

Syncro
źródło
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ę.

Nilesh
źródło
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.

Ryan Walker
źródło
-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
fala bitowa
źródło
1
To nie zawsze działa. Z pewnością nie działało dla mnie na coś. jak 20% plików ...
Tomáš Fejfar