Mam czyste repozytorium git, ale muszę uzyskać dostęp i przeglądać jego zawartość przez ssh (w menedżerze plików, takim jak doświadczenie użytkownika).
Zakładam, że mógłbym to sklonować:
git clone -l <path_to_bare_repo> <new_normal_repo>
Jednak moje repozytorium ma około 20 GB i nie mam miejsca na jego skopiowanie. Czy istnieje sposób na konwersję czystego repozytorium na miejscu, aby uzyskać w nim kopię roboczą?
.git
katalogu i ustawiszbare
parametr w konfiguracji na false, powinno zachowywać się jak zwykłe repozytorium, z którego możesz po prostugit checkout
pobrać pliki.git show
igit cat-file
Odpowiedzi:
Uwaga : przetestowałem to na bardzo prostym repozytorium z jednym zatwierdzeniem. Sprawdź to dokładnie, przeczytaj strony podręcznika i zawsze bądź szczęśliwy, że wykonałeś kopię zapasową, zanim skorzystasz z porad znalezionych w StackOverflow. (Ty się cofasz, prawda?)
Aby przekonwertować
--bare
repozytorium na nie-bare:.git
folder na najwyższym poziomie repozytorium.HEAD branches config description hooks info objects refs
itp.) Do.git
właśnie utworzonego.git config --local --bool core.bare false
aby przekonwertować lokalne repozytorium git na non-bare.master
(lub gdziekolwiek jest twoja główna gałąź) i wszystkie twoje pliki są usuwane, a usuwanie jest etapowane. To normalne. Po prostu ręcznie zapłaćmaster
lub zróbgit reset --hard
i gotowe..git/config
wiersz dodawania plikufetch = +refs/heads/*:refs/remotes/origin/*
pourl = <...>
w[remote "origin"]
sekcji. W przeciwnym raziegit fetch
nie zobaczyorigin/master
i innych gałęzi pochodzenia.Te kroki są w odwrotnym kierunku od tego pytania , „git-convert normal to bare repository” - w szczególności zwróć uwagę na tę odpowiedź , która stwierdza, że powyższe kroki (w, jak przypuszczam, w dowolnym kierunku) różnią się od zrobienia pliku
git-clone
. Nie jestem jednak pewien, czy to dotyczy Ciebie, ale wspomniałeś o tymgit clone
w pytaniu.źródło
Miałem nieco inny scenariusz:
Rozwiązanie:
.git
katalogu:git clone --bare https://github.com/user/project .git
git config --local --bool core.bare false
.git
nagie repozytorium nie zawiera pliku 'index
').git reset HEAD -- .
To przywraca plik
.git/index
.Skutecznie przekształciłem gołe repozytorium w nie-nagie, zachowując zawartość, którą otrzymałem wcześniej. Pełny skrypt używam od lat obejmuje etapy:
Ale rozumiem, że zaakceptowane rozwiązanie (z pomocnym
git reset
krokiem dodanym przez ADTC ) jest prostsze.źródło
.git
podfolderu w drzewie roboczym (o którym wiesz, że jest twoim repozytorium), początkowo utworzonego z archiwum (non-git). Nie mogłem wyewidencjonować non-bare repo, ponieważ folder, w którym robiłem transakcję, nie jest pusty. Wykonywanie czynności nie-gołychgit clone --no-checkout
w podfolderze zmusiłoby mnie do przejścia o.git
jeden poziom wyżej. Zrobienie samego klona pozwoliło mi bezpośrednio utworzyć.git
podfolder tam, gdzie chciałem. Możesz zobaczyć skrypt tutaj: github.com/VonC/compileEverything/blob/ ....git
. Przychodzę.git
przez nagiego klona, przekształcam ten.git
folder w nie-nagi i robię,git reset
aby git zorientował się, że drzewo robocze już tam jest. Dokładnie to robi github.com/VonC/compileEverything/blob/… .Aby uprościć i połączyć informacje w odpowiedziach:
Istnieją trzy różnice, które sprawiają, że nagie repozytorium różni się od zwykłego folderu .git:
Możesz więc po prostu przenieść swoje gołe repozytorium do podfolderu .git nowego folderu,
Zmień core.bare:
Dodaj domyślną referencję źródłową, aby utworzyć
git fetch
igit push
wybierz te same wartości domyślne, co zwykle:I wygeneruj plik indeksu i drzewo robocze:
Zalecam
git checkout
raczej niżgit reset
generowanie plików, na wypadek gdyby zostały przypadkowo wpisane w niewłaściwym miejscu.źródło
Pytanie pierwotnego autora plakatu dotyczy braku miejsca, aby robić rzeczy w prosty sposób. Dla tych, którzy mają wystarczająco dużo miejsca, odpowiedź jest znacznie prostsza:
źródło
Jeśli masz mało miejsca na dysku, rozszerzenie drzewa roboczego przez konwersję do normalnego repozytorium będzie problemem, ale możesz przeglądać zawartość samego repozytorium bez konwersji. Użyj
git cat-file -p <commit-sha>
na dowolnym zatwierdzeniu, aby zobaczyć drzewo, do którego się odnosi. Służygit cat-file -p <blob-sha>
do wyświetlania zawartości pliku, do którego odwołuje się obiekt BLOB. Użyj,git show <sha>:path
gdzie sha jest zatwierdzeniem lub drzewem, aby zobaczyć zawartość obiektu BLOB na ścieżce.źródło
cd
do samego repozytorium i zrób(da ci regularne repozytorium git o nazwie X)
źródło
Jeśli nie masz nic przeciwko pracy na innym drzewie roboczym, to
Należy pamiętać, że to nie jest klon.
źródło
Wypchnij do wdrożenia
Zamiast konwertować samego pilota do standardowego repozytorium, możesz użyć skryptu po odbiorze w katalogu hooks, aby rozszerzyć repozytorium do katalogu wdrażania.
Oto dobry przykład konfiguracji Push-to-Deploy
Dla ułatwienia jest to przykład zawartości skryptu z powyższego linku. Wdraża tylko wypychanie z gałęzi „master” do katalogu o nazwie „deploy”, który znajduje się na tym samym poziomie, co katalog nadrzędny repozytorium:
źródło