2009-06-30 13 views
7

Robię trochę pracy, aby wyśledzić zauważony błąd w narzędziu wsparcia git i chcę skopiować repozytorium (prawdopodobnie wiele razy) do celów eksperymentalnych. Chciałbym, aby tworzone były twarde łącza do bazy danych oryginalnych obiektów repozytorium, aby nie marnować miejsca na dysku, przechowując wiele kopii identycznych obiektów o identycznych wartościach SHA. git clone realizuje to ładnie, ale niestety nie mogę wydawać się znaleźć sposób, aby uczynić git clone dać mi nową kopię bazy utworzonej jak oryginalny repozytorium:Jak skopiować/sklonować repozytorium git bez marnowania miejsca?

  1. punkty klon z powrotem do skopiowanego repozytorium jako jego pochodzenia, ale chcę go mieć takie samo pochodzenie jak skopiowanym repozytorium
  2. klon nakręca tylko jeden oddział, ale chcę mieć wszystkich gałęziach skopiowanym repozytorium

I może poprawić niektóre z nich za pomocą git clone --mirror, ale to tylko działa, aby utworzyć puste repozytorium, a repozytorium eksperymentuję on nie jest pusty, a narzędzie pomocnicze, które próbuję debugować, nie działa na repozytoriach nagich.

Pomyślałem o napisaniu pętli szybkiej powłoki, aby utworzyć nową bazę danych obiektów pełnych twardych linków do oryginalnej bazy danych obiektów, a następnie skopiować wszystko inne z oryginalnego katalogu .git, a następnie wykonać polecenie git, ale ja jestem zaniepokojony, że jest to wystarczająco skomplikowane, aby być podatnym na błędy i że nie wiem wystarczająco dużo, aby poprawnie wykonać ten rodzaj operacji na niskim poziomie i zbuduje repozytorium z subtelnymi błędami. Czy to podejście powinno działać teoretycznie?

jeszcze lepiej, czy jest jakiś sposób, aby przejść do opcji git clone, aby robić to, co chcę?

Czy istnieje sposób można utworzyć nowe repozytorium ale powiedz jej, że jej baza danych obiekt znajduje się w innym folderze, w zasadzie mówi go udostępnić bazę danych obiektów z oryginalnego repozytorium?

Jeśli żadna z powyższych prac, to pozostaje mi tylko -PR cp, która ma zamiar zużywają dużo miejsca i być czasochłonne.

Odpowiedz

5

myślę szukasz

git clone --reference=/path/to/existing/repo url 

W slangu to git wiadomo jak przy użyciu „zastępców”. Istnieją potencjalne problemy z tą opcją, jak wspomniano w git clone help, ale może to odpowiadać twoim celom.

Możesz być także zainteresowany Dustina pomocnika git-alternates.

0

Użyj "git clone - mirror", a następnie zmień go z bare do non-bare repozytorium (zmień nazwę repo.git na repo/.git, skopiuj plik .git/config, sprawdź katalog roboczy używając "git checkout HEAD"). Uwaga: Nie sprawdziłem, czy działa zgodnie z przeznaczeniem!

0

Użyj git clone z opcją --no-checkout. Zaktualizuj repozytorium git za pomocą git fetch zamiast git pull, aby uniknąć zapłaty.

Powiązane problemy