Jak przekonwertować „normalne” repozytorium Git na zwykłe?
Główną różnicą wydaje się być:
w normalnym repozytorium Git w
.git
folderze znajduje się folder zawierający wszystkie istotne dane i wszystkie inne pliki tworzące kopię robocząw czystym repozytorium Git nie ma kopii roboczej, a folder (nazwijmy go
repo.git
) zawiera rzeczywiste dane repozytorium
mv repo/.git repo.git; rm -rf repo
&&
zamiast;
w przypadkumv
niepowodzenia!Odpowiedzi:
W skrócie: zamień zawartość
repo
na zawartośćrepo/.git
, a następnie powiedz repozytorium, że jest to już samo repozytorium.Aby to zrobić, wykonaj następujące polecenia:
Pamiętaj, że różni się to od robienia
git clone --bare
nowej lokalizacji (patrz poniżej).źródło
core.bare
. Teraz, po przejrzeniu tej opcji, mogę to potwierdzić: kernel.org/pub/software/scm/git-core/docs/git-config.htmlgit clone --bare /path/to/repo
).rm
polecenie może wymagać* \.[!.]*
raczej niż*
usunięcia plików-kropek i katalogów-kropek.Twoja metoda wygląda, jakby działała; struktura plików nagiego repozytorium jest właśnie tym, co znajduje się w katalogu .git. Ale nie wiem, czy któryś z plików został faktycznie zmieniony, więc jeśli to się nie powiedzie, możesz to zrobić
Prawdopodobnie będziesz musiał to zrobić w innym katalogu, aby uniknąć konfliktu nazw, a następnie możesz po prostu przenieść go z powrotem w wybrane miejsce. Konieczna może być zmiana pliku konfiguracyjnego, aby wskazywał gdziekolwiek znajduje się repozytorium oryginału.
źródło
git clone --bare /path/to/repo.git /path/to/newbarerepo.git
git update-server-info
po utworzeniu uruchomisz repozytorium.Myślę, że poniższy link byłby pomocny
GitFaq: Jak sprawić, by istniejące repozytorium nie było puste?
źródło
git clone
) ma wady wspomniane powyżej przez nosatalian.O ile nie chcesz lub nie chcesz przekręcać bitów w systemie plików, naprawdę nie jest łatwo stworzyć nagą wersję nie-nagiego repozytorium (wspomnianego w kilku innych postach tutaj). Jest to część podstawowej funkcjonalności gita:
git clone --bare existing_repo_path bare_repo_path
źródło
Proszę również rozważyć użycie
Z dokumentacji :
źródło
clone
). Czy coś brakuje? Czy był--mirror
to stosunkowo nowy dodatek?--mirror
jest ona dostępna od wersji 1.7, więc już dość długo. Możesz sprawdzić tutajChciałem tylko wypchnąć repozytorium na ścieżce sieciowej, ale git nie pozwoli mi tego zrobić, chyba że to repozytorium zostanie oznaczone jako puste. Wszystko czego potrzebowałem to zmienić jego konfigurację:
Nie musisz majstrować przy plikach, chyba że chcesz je utrzymać w czystości.
źródło
przeczytałem odpowiedzi i zrobiłem to:
pozostawi to zawartość
repos/.git
nagąrepos.git
źródło
Oto, co uważam za najbezpieczniejsze i najprostsze. Nic tu nie zostało powiedziane powyżej. Chcę tylko zobaczyć odpowiedź, która pokazuje bezpieczną procedurę krok po kroku. Zaczynasz jeden folder z repozytorium (repo), które chcesz odsłonić. Przyjąłem konwencję sugerowaną powyżej, że nagie foldery repozytoriów mają rozszerzenie .git.
źródło
Po prostu przeczytaj
Pro Git Book: 4.2 Git na serwerze - uzyskiwanie Git na serwerze
które boild do
Następnie umieść my_project.git na serwerze
Która głównie jest taka, na jaką próbę wskazała odpowiedź nr 42 . Z pewnością można by na nowo wymyślić koło ;-)
źródło
Oto mała funkcja BASH, którą możesz dodać do .bashrc lub .profile w systemie UNIX. Po dodaniu i powłoka jest albo restartowana, albo plik jest ładowany ponownie przez wywołanie do
source ~/.profile
lubsource ~/.bashrc
.Po wywołaniu w katalogu zawierającym katalog .git dokona odpowiednich zmian w celu konwersji repozytorium. Jeśli po wywołaniu nie ma katalogu .git, pojawi się komunikat BŁĄD i nie nastąpi zmiana systemu plików.
źródło
Metody, które mówią o usuwaniu plików i grzebaniu przy przenoszeniu katalogu .git, nie są czyste i nie używają metody „git” do robienia czegoś, co powinno być proste. To najczystsza metoda, jaką znalazłem, aby przekonwertować normalne repo na zwykłe repo.
Najpierw klon / path / to / normal / repo do samego repo o nazwie repo.git
Następnie usuń początek wskazujący na / path / to / normal / repo
Wreszcie możesz usunąć swoje oryginalne repozytorium. W tym momencie możesz zmienić nazwę repo.git, aby repo, ale standardowa konwencja oznaczająca repozytorium git to coś.git, więc osobiście zostawiłbym to w ten sposób.
Po wykonaniu tego wszystkiego możesz sklonować swoje nowe repozytorium (co w efekcie tworzy normalne repo, a także sposób, w jaki przekształcisz go z wersji zwykłej na normalną)
Oczywiście, jeśli masz inne upstamy, zechcesz je zanotować i zaktualizować swoje repozytorium, aby je uwzględnić. Ale znowu wszystko można zrobić za pomocą polecenia git. Pamiętaj, że strony podręcznika man są twoim przyjacielem.
źródło
.git
folderu. Bardzo pouczające jest nauczenie się, jak pasują do siebie części.Jeśli masz repozytorium z kilkoma lokalnymi oddziałami do kasy / refs / heads / * i kilkoma zdalnymi oddziałami pilotów / origin / * ORAZ jeśli chcesz przekonwertować to na BARE repozytorium ze wszystkimi oddziałami w / refs / heads / *
możesz wykonać następujące czynności, aby zapisać historię.
źródło
Użyłem następującego skryptu, aby odczytać plik tekstowy z listą wszystkich moich repozytoriów SVN i przekonwertować je na GIT, a następnie użyć git clone --bare, aby przekonwertować na zwykłe repozytorium git
list.txt ma format
i users.txt ma format
www-data jest użytkownikiem serwera WWW Apache, potrzebne jest zezwolenie na przesyłanie zmian przez HTTP
źródło
Oto definicja nagiego repozytorium z gitglossary :
Przybyłem tutaj, ponieważ bawiłem się „lokalnym repozytorium” i chciałem móc robić wszystko, co chciałem, tak jakby to było zdalne repozytorium. Po prostu się bawiłem, próbując dowiedzieć się o git. Zakładam, że taka jest sytuacja każdego, kto chce przeczytać tę odpowiedź.
Chciałbym na opinii biegłego lub kilku konkretnych przykłady przeciwne, jednak wydaje się, że (po grzebać jakiegoś kodu źródłowego git że znalazłem) po prostu przechodząc do pliku
.git/config
i ustawienie rdzeń atrybut urodziła się prawdą , git pozwoli Ci zrobić cokolwiek chcesz zrobić zdalnie z repozytorium. To znaczy, następujące linie powinny istnieć w.git/config
:(To jest mniej więcej to polecenie
git config --bool core.bare true
zrobi to , co prawdopodobnie zaleca się w przypadku bardziej skomplikowanych sytuacji)Moim uzasadnieniem dla tego twierdzenia jest to, że w kodzie źródłowym git wydaje się, że istnieją dwa różne sposoby testowania, czy repo jest czyste, czy nie. Jednym z nich jest sprawdzenie zmiennej globalnej
is_bare_repository_cfg
. Jest to ustawiane podczas pewnej fazy instalacji i odzwierciedla wartość znalezioną w.git/config
pliku. Drugi jest funkcjąis_bare_repository()
. Oto definicja tej funkcji:Ja nie mam czasu ani wiedzy, aby to powiedzieć z absolutną pewnością, ale o ile mogę powiedzieć, jeśli masz
bare
zestaw przypisywaćtrue
w.git/config
ten zawsze powinien wrócić1
. Reszta funkcji prawdopodobnie dotyczy następującej sytuacji:Eksperymentuję z tym, kiedy będę mógł później, ale wydaje się to wskazywać, że ustawienie core.bare = true jest równoważne z usunięciem core.bare z pliku konfiguracyjnego i prawidłowym skonfigurowaniem katalogów.
W każdym razie ustawienie core.bare = true z pewnością pozwoli ci to zrobić, ale nie jestem pewien, czy obecność plików projektu spowoduje, że niektóre inne operacje nie będą działać poprawnie. Jest to interesujące i przypuszczam, że pouczające jest pchanie do repozytorium i sprawdzanie, co się stało lokalnie (tj. Uruchamianie i sprawdzanie
git status
wyników).źródło
Po pierwsze,
backup
twoje istniejące repozytorium:Po drugie, uruchom następujące polecenie:
źródło
Oneliner do wykonywania wszystkich powyższych operacji:
(nie obwiniaj mnie, jeśli coś wybuchnie i nie masz kopii zapasowych: P)
źródło
Wow, to po prostu niesamowite, ile osób się w to włączyło, szczególnie biorąc pod uwagę, że nie wydaje się, aby nikt nie przestał pytać, dlaczego ta osoba robi to, co robi.
Jedyną różnicą między zwykłym repozytorium git a tym, co nie, jest to, że wersja nienazywana ma kopię roboczą. Głównym powodem, dla którego potrzebujesz nagiego repozytorium, jest to, że jeśli chcesz udostępnić go innej osobie, nie możesz bezpośrednio nad nim pracować, więc w pewnym momencie będziesz musiał go sklonować. wróć do zwykłej wersji roboczej.
Biorąc to pod uwagę, aby przejść do zwykłego repozytorium, wystarczy upewnić się, że nie ma żadnych oczekujących zmian, a następnie:
Proszę bardzo, repo.
źródło
git config core.bare true
.git config core.bare true
, tak jak w tej odpowiedzi .