W jakiś sposób, kiedy git init
około miesiąca temu zredagowałem swój najnowszy projekt, uruchomiłem polecenie w katalogu o jeden katalog wyżej niż katalog główny mojego projektu.
Więc moje repozytorium znajduje się w ./project
katalogu, a nie w ./project/my-new-project
katalogu. Nie wiem, jak wcześniej nie zdawałem sobie sprawy z tego problemu, ale do tej pory po prostu nigdy nie szukałem katalogu .git.
Czy jest sposób, bez zabijania mojego projektu, aby przenieść repozytorium do odpowiedniego katalogu, a następnie powiedzieć gitowi, jaka jest nowa baza projektu? Samo przeniesienie katalogu nie działa. Git uważa, że wszystkie pliki zostały usunięte.
Miałem odwrotny problem - musiałem przenieść katalog główny git do katalogu nadrzędnego (z projektu / src do projektu). Ku mojemu wielkiemu zdziwieniu, poniższe zadziałały !!
git sprytnie wykrył, że wszystkie nowe pliki zostały przemianowane na wersje starych i żadna historia nie została utracona
Możesz spróbować czegoś podobnego ... przenieść folder .git i ponownie dodać pliki przed zatwierdzeniem
źródło
git rm'd
pliki pochodzą z ich starej lokalizacji, więcgit status
(poprawnie) zakończyło się raportowaniem wielu operacji zmiany nazwy. Im więcej pracuję z git, tym bardziej mi się to podoba..gitignore
i uruchomiłemgit add -A
w folderze głównym; potem git poprawnie pokazywał wszystkie pliki jakorenamed
zamiastdeleted
. 2. Ponieważ używam modułów podrzędnych, musiałem przejść.gitmodules
do nowego katalogu głównego i zaktualizować ścieżkę modułu podrzędnego w różnych plikach konfiguracyjnych git. Aby znaleźć pliki do zmodyfikowania, uruchomiłemgrep -nrI --color 'old/path/to/submodule' .
To zadziałało dla mnie i zachowało całą moją historię nietkniętą. Z nieprawidłowego folderu głównego (nadrzędnego, w którym przypadkowo zainicjowałeś repozytorium):
Przenieś folder:
Ponownie zainicjuj repozytorium git:
Ponownie dodaj wszystkie pliki, zatwierdź i wypchnij:
Gotowe! Kup sobie piwo.
Kiedy zatwierdzasz repozytorium git po ponownej inicjalizacji, otrzymasz zbiór danych wyjściowych, które wyglądają następująco:
Innymi słowy, wszystkie odwołania z folderu nadrzędnego i zmiana nazwy w celu użycia właściwego folderu.
źródło
git filter-branch
pozwala na przepisywanie historii w ten sposób. Stronagit filter-branch
podręcznika zawiera nawet Twój przypadek jako przykład :Prawdopodobnie chcesz
git clone
przenieść repozytorium do nowego podkatalogu przed (lub po?)git filter-branch
Uruchomieniu. (Klonowanie przed filter-branch i uruchamianie filter-branch na nowym klonie miałoby tę zaletę, że pozostawiłoby oryginalny.git/
katalog na miejscu jako kopię zapasową na wypadek, gdyby coś poszło nie tak.)źródło
.git
repozytorium pozostaje na najwyższym poziomie, podczas gdy podkatalogi stają się „traktowane jako katalog główny”) - spowoduje to dosłowne odrzucenie wszystkich innych plików w repozytorium i przeniesienie wszystkichsubdirectory/*
plików do folderu głównego .git push --force
aby zaktualizować późniejsze repozytorium.Git może zapamiętywać pliki wraz z ich hashami,
Po prostu przenieś się
.git
do katalogu głównego i powiedz,git
aby zapamiętać wszystkie zmiany plików za pomocą--all
opcji.źródło
Użyj,
git-mv
aby przenieść pliki „w górę” do właściwej lokalizacji, a następnie dogit-rm
katalogu „mój-nowy-projekt”.źródło
Przyjechałem tutaj, szukając sposobu, aby przenieść moje repozytorium w dowolne miejsce .
W przypadku, gdy nie byłem jedyny, oto co zrobiłem w końcu:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F Zrobiłem „git clone --mirror” da gołą kopię mojego repozytorium, a następnie powiedziałem mu, aby nie było już nagie, więc pliki się pojawiły w tym nowym folderze. (Następnie sprawdziłem, czy pojawiły się pliki i dziennik). Zatrzymałem stare repozytorium przez chwilę, na wszelki wypadek ...
W ten sposób mogłem przenieść repozytorium bez utraty historii.
Pozdrowienia, Dinah
źródło
mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
.Po przejściu przez ten sam problem, moim ostatecznym rozwiązaniem było:
git reset --hard HEAD
Działało jak magia, bez wpływu na historię. - UWAGA: Jeśli dokonałeś jakichś zmian, upewnij się, że zostały one zatwierdzone przed przeniesieniem katalogu .git.
źródło
Istnieją dwa sposoby:
źródło