Mam katalog gitrepo1 . Ten katalog jest repozytorium git.
Chciałbym przenieść ten plik gitrepo1 do innego katalogu newrepo .
Katalog newrepo powinien być nowym repozytorium git bez utraty historii git i powinien zawierać katalog gitrepo1 .
Katalog gitrepo1 powinien być teraz po prostu katalogiem (wewnątrz newrepo ), bez żadnego
.git
indeksu, tj. NIE powinien już być niezależnym repozytorium git ani podmodułem.
W jaki sposób mogę to zrobić?
mv girepo1 newrepo
??Odpowiedzi:
To jest bardzo proste. Git nie dba o to, jaka jest nazwa jego katalogu. Dba tylko o to, co jest w środku. Możesz więc po prostu zrobić:
Zwróć uwagę, że kopia jest dość droga, jeśli repozytorium jest duże i ma długą historię. Możesz tego łatwo uniknąć:
Po utworzeniu
newrepo
miejsce docelowe, które chcesz umieścić,gitrepo1
może znajdować się w dowolnym miejscu, nawet w środku,newrepo
jeśli chcesz. Nie zmienia procedury, tylko ścieżkę, którą piszeszgitrepo1
.źródło
cp
podobnie jak prawie każde polecenie lub funkcja jest specyficzna dla innych systemów operacyjnych. W rzeczywistości jest to specyficzne dla każdego systemu operacyjnego, który nie jest systemem Windows. Spróbuj zadzwonić do firmy Microsoft i zapytać, dlaczego nie są zgodne z POSIX. W każdym raziecp
oznacza kopię.mv
oznacza ruch.rm
oznacza usunąć. Możesz znaleźć odpowiedniki systemu Windows..git/
zawiera całą historię, w tym ostatnie zatwierdzenie. Gdziekolwiek to umieścisz, masz całą historię. W rzeczywistości, jeśli wszystkie pliki w tym katalogu różnią się od oryginalnego repozytorium, z którego wziąłeś.git/
, jedyną rzeczą byłoby to, że informuje cię, że niektóre pliki zostały usunięte, a niektóre nie są śledzone. Z agit reset --hard
, usunięte pliki zostaną automatycznie odzyskane! Należy tylko zauważyć, że po prostu kopiując.git/
nie można odzyskać niezatwierdzonych zmian.Trochę późno i na pytanie już udzielono odpowiedzi, ale żeby to zrobić bez bólu głowy:
git status
, powiedzmy gałąź rozwojugit clone
projekt z repozytorium do nowego folderugit checkout development
rsync
, oprócz folderu .git :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1
Wtedy możesz kontynuować od miejsca, w którym skończyłeś
źródło
To jeszcze prostsze. Właśnie to zrobiłem (w systemie Windows, ale powinno działać w innym systemie operacyjnym):
Git po prostu widzi, że dodałeś katalog i zmieniłeś nazwę kilku plików. Nic takiego.
źródło
Nie jestem ekspertem, ale kopiuję folder .git do nowego folderu, a następnie wywołuję:
git reset --HARD
źródło