Jak zduplikować repozytorium Git? (bez rozwidlenia)


117

Mam dwa repozytoria i muszę skopiować jeden na drugi, pusty, który ma inne poziomy dostępu niż pierwszy. Kopia i repozytorium macierzyste nie powinny być ze sobą połączone.

Jestem nowy w git i byłoby wspaniale, gdyby ktoś mógł mi w tym pomóc.


5
Nie jestem pewien, ale myślę, że możesz go po prostu sklonować, a następnie użyć git config remote.origin.url git: //new.url/proj.git, aby ustawić remote.origin na nowego rep.
— Rufinus,

tak, link, który właśnie opublikowałem, robi coś takiego.
— nbz

@rudinus Właśnie to zrobiłem. Dzięki.
— cowboybebop

Odpowiedzi:


205

Zobacz https://help.github.com/articles/duplicating-a-repository

Krótka wersja:

Aby wykonać dokładny duplikat, musisz wykonać zarówno nagi klon, jak i wypychanie lustrzane:

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

UWAGA: powyższe będzie działać dobrze z każdym zdalnym repozytorium git, instrukcje nie są specyficzne dla github

Powyższe tworzy nową zdalną kopię repozytorium. Następnie sklonuj go do działającej maszyny.


2
Co się stanie, jeśli stare i nowe repozytoria miały taką samą nazwę (nie ten sam adres URL git). Tak jak w, po prostu Jeremy.gitJeremy.git
— klonuję

To nie będzie dokładny duplikat. Problemy nie zostaną przeniesione.
— Slam

Czy to zachowuje historię?
— Thomas

@Thomas Właśnie to zrobiłem i tak, zachowałem całą moją historię w kopii. Zauważ, że po wciśnięciu i cd do nowego repozytorium nadal nic tam nie ma, ponieważ wcisnąłeś do pilota, więc musisz wyciągnąć
— PfunnyGuy

7
Aby ta odpowiedź działała z GitHubem, należy najpierw utworzyć nowe repozytorium na GitHub.
— Alex Holcombe

23

Możesz także użyć git-copy .

Zainstaluj go za pomocą Gem,

gem install git-copy

Następnie

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git

1
Jak w pierwszej kolejności zainstalować klejnot? Wydaje się, że jest to najbardziej bezproblemowe rozwiązanie. Głosowano!
— saran3h

Zwykle jest częścią instalacji Rubiego. Na Ubuntu zrób sudo apt install ruby.
— szkoda

10

Jeśli kopiujesz do GitHub, możesz skorzystać z importera GitHub, aby zrobić to za Ciebie. Oryginalne repozytorium może pochodzić nawet z innych systemów kontroli wersji.


4
Działa to doskonale, a nawet zachowuje historię - powinno być wyżej głosowane
— John D

1
Zgadzam się. To podejście jest znacznie bardziej intuicyjne, można to zrobić całkowicie w interfejsie GUI Github i nie wiąże się z żadnym z tych mylących bzdur z wiersza poleceń. Kroki: 1) W graficznym interfejsie użytkownika utwórz nowe repozytorium, ale nie zaznaczaj pola wyboru „Zainicjuj to repozytorium za pomocą pliku README”. Po wykonaniu tej czynności Github wyświetli nową stronę i opcję oznaczoną „… lub importuj kod z inne repozytorium. " Otóż ​​to!
— Luke F.

5

Jeśli chcesz po prostu utworzyć nowe repozytorium, używając wszystkich lub większości plików z istniejącego (tj. Jako rodzaj szablonu), uważam, że najłatwiejszym podejściem jest utworzenie nowego repozytorium o żądanej nazwie itp., Sklonuj je do na pulpicie, a następnie po prostu dodaj pliki i foldery, które chcesz w nim umieścić.

Nie masz całej historii itp., Ale prawdopodobnie nie chcesz tego w tym przypadku.


-1

Otwórz terminal.

Utwórz czysty klon repozytorium.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd stare repozytorium.git

git push --mirror https://github.com/exampleuser/new-repository.git


Próbowałem twojego podejścia. Otrzymałem ten komunikat o błędzie:! [zdalne odrzucenie] master -> master (odebranie połączenia odrzucone) i kilka innych podobnych wiadomości. Ostatni był: błąd: nie udało się wysłać niektórych referencji. Jak mogę to poprawić?
— LND
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.