Zmień lokalizację katalogu repozytorium Git.

200

W przypadku Git / Github dla Windows, jeśli mam repozytorium z tym katalogiem: C:\dir1\dir2co muszę zrobić, aby przenieść pliki repo C:\dir1? Mogę oczywiście fizycznie skopiować i wkleić pliki, ale co muszę zrobić po stronie Git?

Mam to repozytorium na GitHub i używam Git Bash i GitHub dla Windows.

Mikael Engver
źródło
1
Spójrz na tę odpowiedź , to samo dotyczy przeniesienia do innego folderu lub innego komputera.
wygenerowany

Odpowiedzi:

234

Po prostu skopiuj całą zawartość katalogu roboczego (w tym ukryty .gitkatalog). Spowoduje to przeniesienie całego katalogu roboczego do nowego katalogu i nie wpłynie na zdalne repozytorium w GitHub.

Jeśli korzystasz z GitHub dla Windows, możesz przenieść repozytorium przy użyciu metody opisanej powyżej. Jednak po kliknięciu repozytorium w aplikacji nie będzie można go znaleźć. Aby rozwiązać ten problem, kliknij niebieski okrąg za pomocą!, Wybierz Znajdź, a następnie przejdź do nowego katalogu.

ctor
źródło
3
Ale co powiesz na to, jak GitHub dla systemu Windows śledzi lokalne repozytorium? Na tym musi być jakaś konfiguracja.
3
Kiedy zrobiłem to w systemie Windows, zmusiło mnie to do utworzenia nowego repozytorium.
472084
1
@Jleagle, Mogli to zmienić od czasu opublikowania tej odpowiedzi. Zajrzę i w razie potrzeby zaktualizuję odpowiedź.
ctor
2
Nie powinno Cię prosić o utworzenie nowego repozytorium: jeśli tak się stało, najwyraźniej przegapiłeś plik git (może ukryty). Stało się to dla mnie, a kiedy spróbowałem ponownie, zauważyłem, że coś mi umknęło.
Juan
1
Jestem na Win. Po ręcznym przeniesieniu folderu do nowej lokalizacji ponownie otworzyłem aplikację Git GUI i tam też ręcznie przenieś folder projektu. W ten sposób działa dla mnie.
kuncevic.dev,
42

Nie jestem pewien pytania, więc oto dwie odpowiedzi:

Jeśli chcesz przenieść swoje repozytorium:

Po prostu skopiuj całe repozytorium (wraz z jego .gitkatalogiem).

W .gitstrukturze nie ma bezwzględnej ścieżki i nic nie stoi na przeszkodzie, aby ją przenieść, więc po ruchu nie masz nic do roboty. Wszystkie linki do github (patrz w .git/config) będą działać jak poprzednio.

Jeśli chcesz przenieść pliki do repozytorium:

Po prostu przenieś pliki. Następnie dodaj zmiany wymienione w git status. Następny commitzrobi konieczne. Z przyjemnością dowiesz się, że żaden plik nie zostanie zduplikowany: przenoszenie pliku w git jest prawie bezkosztowe.

Denys Séguret
źródło
1
Ale co powiesz na to, jak GitHub dla systemu Windows śledzi lokalne repozytorium? Na tym musi być jakaś konfiguracja.
@ user596075 znajduje się w .gitkatalogu.
OrangeDog,
24

Jeśli używasz GitHub Desktop, wykonaj następujące czynności:

  1. Zamknij GitHub Desktopi wszystkie inne aplikacje z otwartymi plikami do bieżącej ścieżki do katalogu.
  2. Przenieś cały katalog, jak wspomniano powyżej, do nowej lokalizacji katalogu.
  3. Otwórz GitHub Desktopi kliknij niebieską (!) Ikonę „nie znaleziono repozytorium”. Następnie otworzy się okno dialogowe i zobaczysz przycisk „Zlokalizuj ...”, który otworzy wyskakujące okienko, pozwalając ci skierować jego ścieżkę do nowej lokalizacji.
Mikael Engver
źródło
8

Chociaż pytanie dotyczy Git dla Windows, wydaje się, że jest to najlepszy wynik, nawet podczas wyszukiwania Visual Studio Tools For Git (rozszerzenie w VS 2012, natywne wsparcie w VS 2013).

Wykorzystując powyższe rozwiązania jako przewodnik, ustaliłem, że Visual Studio Git Tools sprawia, że ​​przenoszenie repozytoriów (lub nawet całej struktury katalogów dla wszystkich repozytoriów) jest bardzo łatwe lokalnie.

1) Zamknij program Visual Studio. 2) Przenieś foldery Repo do nowej lokalizacji. 3) Otwórz Visual Studio. Otwórz Team Explorer. Przejdź do widoku „Połącz” (ikona wtyczki u góry). 3a) Jeśli Repos nadal pokazują starą ścieżkę, kliknij Odśwież, aby wymusić aktualizację. 4) Repo, które zostały przeniesione lokalnie, nie powinny już być wyświetlane w „ Lokalnych repozytoriach Git ”. 5) Kliknij Dodaj (nie nowy lub klon) i wybierz folder repo, który chcesz dodać.

W kroku 5 naprawdę podajesz ścieżkę wyszukiwania, a wyszukiwanie automatycznie obejmuje wszystkie podfoldery. Jeśli masz wiele repozytoriów zorganizowanych w jednym katalogu głównym (niezależne repozytoria mają tylko ten sam folder nadrzędny), wówczas wybranie nadrzędnego obejmie wszystkie repozytoria znalezione poniżej.

Przykład: E: \ Repos \ RepoA E: \ Repos \ RepoB E: \ Repos \ RepoC

W Visual Studio Team Explorer [Dodaj]> „E: \ Repos \”> [Dodaj] zwróci wszystkie trzy do repozytoriów lokalnych.

Gerald Davis
źródło
6

Chociaż wszystkie poprzednie odpowiedzi wydają się mówić, że możesz po prostu przenieść katalog i nie ma ścieżek bezwzględnych w strukturze .git. Odkryłem, że jest to nieprawda, gdy korzystam z gita z Cygwin.

Kiedy przeniosłem moje repozytorium git (w rzeczywistości przywróciłem je z kopii zapasowej, ale na inny dysk, ponieważ zmieniła się struktura mojego dysku w moim nowym systemie). Mam komunikat o błędzie jak

fatal: Invalid path '<part_of_the_original_repo_path>': No such file or directory

Użyłem grep, aby znaleźć, że w moim pliku .git / config w sekcji [core] jest zmienna worktree, która zawiera bezwzględną ścieżkę mojego repozytorium git. Zmiana tego rozwiązała problem dla mnie.

Phil Rosenberg
źródło
4

Używam wtyczki git Visual Studio i mam kilka stron internetowych działających na IIS, które chciałem przenieść. Prosty sposób, który zadziałał dla mnie:

  1. Zamknij Visual Studio.

  2. Przenieś kod (w tym folder git itp.)

  3. Kliknij plik rozwiązania z nowej lokalizacji

Odświeża to mapowanie do nowej lokalizacji, wykorzystując istniejące lokalne pliki git, które zostały przeniesione. Gdy wróciłem do Visual Studio, moje okno Team Explorer pokazało repozytorium w nowej lokalizacji.

Ben
źródło
2

Używam Github Desktop dla Windows i chciałem przenieść lokalizację repozytorium. Nie ma problemu, jeśli przeniesiesz katalog i wybierzesz nową lokalizację w oprogramowaniu. Ale jeśli ustawisz zły katalog, pojawi się błąd krytyczny i nie będzie drugiej szansy na przeniesienie do dobrego. Aby to naprawić. Musisz skopiować pliki projektu do złego katalogu, dokonać jego ponownej konfiguracji przez Github Desktop, po czym możesz ponownie przenieść swój projekt do innego folderu i dokonać relokacji w oprogramowaniu. Nie trzeba w tym celu zamykać programu Github Desktop, sprawdzi on foldery na żywo.

Mam nadzieję, że to komuś pomoże.

Shim-Sao
źródło
1

To nie działało dla mnie. Przenieśliłem repozytorium z (np.) C: \ project1 \ do c: \ repo \ project1 \ i Git dla Windows nie pokazuje żadnych zmian.

Status git pokazuje błąd, ponieważ jeden z submodułów „nie jest repozytorium git” i pokazuje starą ścieżkę. np. (nazwy zmieniono w celu ochrony IP)

fatal: Not a git repository: C: /project1/.git/modules/subproject/subproject2 fatal: 'git status --porcelain' nie powiodło się w podprojekcie submodułu

Musiałem ręcznie edytować pliki .git w podmodułach, aby wskazać prawidłową ścieżkę względną do repozytorium podmodułu (w katalogu .git / modules repozytorium głównego)

Chris Oates
źródło
1

Raport z przyszłości: kwiecień 2018 r.

Chciałem znormalizować moje lokalne repozytoria na komputerze Mac i Windows, które znalazły się w różnych lokalnych folderach.

Klient systemu Windows 10 kazał mi przejść przez procedurę „Nie mogę znaleźć”> „Lokalizuj”, nużącą, ale nie straszną. Należy także zaktualizować lokalną „ścieżkę klonowania” w Opcjach do przyszłego użytku.

Kiedy skonsolidowałem foldery Mac, klient Github właśnie je znalazł - nie musiałem nic robić!

Charles Ross
źródło
0

Aby ustawić domyślną ścieżkę lokalną do repozytoriów za każdym razem, gdy klonujesz jedno z nich, musisz tylko sklonować repozytorium tylko raz i ustawić ścieżkę lokalną: / twoja-ścieżka, a następnie github automatycznie wykryje tę ścieżkę jako domyślną.

BOjack
źródło
To nie wydaje się odpowiadać na pierwotne pytanie - być może możesz wyjaśnić, w jaki sposób twoja odpowiedź dodaje coś do już zaakceptowanej odpowiedzi? Dzięki.
rwp
0

Bardziej oparte na Git podejściu byłoby wprowadzenie zmian w lokalnej kopii za pomocą cd lub skopiowaniu i wklejeniu, a następnie wypchnięciu tych zmian z lokalnego do zdalnego repozytorium.

Próba sprawdzenia stanu lokalnego repozytorium może pokazać „nieśledzone zmiany”, które w rzeczywistości są przeniesionymi plikami. Aby wymusić te zmiany w sposób wymuszony, musisz wprowadzić pliki / katalogi za pomocą

$ git add -A
#And commiting them
$ git commit -m "Relocating image demo files"
#And finally, push
$ git push -u local_repo -f HEAD:master

Mam nadzieję, że to pomoże.

Pe Dro
źródło