Muszę utworzyć centralne repozytorium Git, ale jestem trochę zdezorientowany ...
Utworzyłem puste repozytorium (na moim serwerze git, maszyna 2) z:
$ mkdir test_repo
$ git --bare init
Teraz muszę przesłać pliki z mojego lokalnego repozytorium (komputer 1) do nagiego repozytorium (komputer 2). Mam dostęp do maszyny 2 przez SSH. Chodzi o to, że myślę, że nie rozumiem koncepcji nagiego repozytorium ...
Jaki jest właściwy sposób przechowywania mojego kodu w czystym repozytorium? Jak mogę wypchnąć zmiany z mojego lokalnego repozytorium do samego repozytorium?
Czy to właściwy sposób na posiadanie centralnego repozytorium, aby mieć puste repozytorium?
Jestem trochę zmieszany z tym tematem. Proszę dać mi wskazówkę na ten temat.
--shared
opcję,init
jeśli planujesz, aby inne osoby naciskały na to repozytorium. Automatycznie dodaje uprawnienia do zapisu grupowego do repozytorium - linkDodam tę odpowiedź, ponieważ po przybyciu tutaj (z tym samym pytaniem) żadna z odpowiedzi tak naprawdę nie opisuje wszystkich wymaganych kroków niezbędnych do przejścia od zera do w pełni użytecznego zdalnego (nagiego) repozytorium.
Uwaga: ten przykład używa lokalnych ścieżek do lokalizacji samego repo, ale inne protokoły git (takie jak SSH wskazane przez OP) powinny działać dobrze.
Po drodze próbowałem dodać notatki dla osób mniej zaznajomionych z git.
1. Zainicjuj nagie repo ...
Spowoduje to utworzenie folderu (repo.git) i zapełnienie go plikami git reprezentującymi repozytorium git. W obecnej chwili repozytorium jest bezużyteczne - nie zawiera żadnych zobowiązań, a co ważniejsze, nie ma oddziałów . Chociaż możesz sklonować to repozytorium, nie możesz z niego wyciągnąć.
Następnie musimy utworzyć folder roboczy. Można to zrobić na kilka sposobów, w zależności od tego, czy masz istniejące pliki.
2a. Utwórz nowy folder roboczy (bez istniejących plików), klonując puste repozytorium
To polecenie działa tylko wtedy,
/path/to/work
gdy nie istnieje lub jest pustym folderem. Zwróć uwagę na ostrzeżenie - na tym etapie nadal nie masz nic przydatnego. Jeślicd /path/to/work
pobiegnieszgit status
, dostaniesz coś takiego:ale to kłamstwo. Tak naprawdę nie jesteś na gałęzi
master
(ponieważgit branch
nic nie zwraca) i jak dotąd nie ma żadnych zobowiązań.Następnie skopiuj / przenieś / utwórz niektóre pliki w folderze roboczym, dodaj je do git i utwórz pierwszy zatwierdzenie.
Te
git config
polecenia są potrzebne tylko wtedy, gdy nie mają już powiedziano git, kim jesteś. Pamiętaj, że jeśli teraz uruchomiszgit branch
, zobaczyszmaster
gałąź na liście. Teraz uruchomgit status
:Jest to również mylące - upstream jeszcze nie „zniknął”, po prostu nie został jeszcze stworzony i
git branch --unset-upstream
nie pomoże. Ale to w porządku, teraz, kiedy mamy pierwsze zatwierdzenie, możemy wypchnąć, a master zostanie utworzony na samym repozytorium.W tym momencie mamy w pełni funkcjonalne nagie repozytorium, które można klonować gdzie indziej w gałęzi master, a także lokalną kopię roboczą, która może ciągnąć i pchać.
2b. Utwórz folder roboczy z istniejących plików Jeśli masz już folder z plikami (więc nie możesz go sklonować), możesz zainicjować nowe repozytorium git, dodać pierwsze zatwierdzenie, a następnie połączyć je z samym repozytorium.
W tym momencie mamy nasz pierwszy zatwierdzenie i lokalną gałąź master, którą musimy przekształcić w zdalnie śledzoną gałąź upstream.
Zwróć uwagę na
-u
flagę na git push, aby ustawić (nową) śledzoną gałąź nadrzędną. Tak jak poprzednio, mamy teraz w pełni funkcjonalne nagie repozytorium, które można klonować w innym miejscu w gałęzi master, a także lokalną kopię roboczą, którą można pobierać i wypychać.Dla niektórych może to wydawać się oczywiste, ale git w najlepszym razie mnie dezorientuje (komunikaty o błędach i statusie naprawdę wymagają przeróbek) - mam nadzieję, że pomoże to innym.
źródło
Odpowiadając na pytania jeden po drugim:
Nagie repozytorium to takie, które nie ma działającego drzewa . Oznacza to, że cała jego zawartość jest tym, co masz w
.git
katalogu.Możesz tylko
commit
odsłonić repozytorium,push
wchodząc do niego z lokalnego klonu. Nie ma działającego drzewa, więc nie ma zmodyfikowanych plików, żadnych zmian.Aby mieć centralne repozytorium, jedynym sposobem jest posiadanie
bare
repozytorium.źródło
Możesz także poprosić git o utworzenie dla ciebie katalogu:
źródło
Ogólna praktyka polega na tym, że centralne repozytorium ma dostęp do repozytorium.
Jeśli masz tło SVN, możesz powiązać repozytorium SVN z repozytorium Git bare. Nie ma plików w repozytorium w oryginalnej formie. Podczas gdy Twoje lokalne repozytorium będzie dodatkowo zawierało pliki, które tworzą „kod”.
Musisz dodać pilota do samego repozytorium z repozytorium lokalnego i wcisnąć do niego swój „kod”.
Będzie to coś w stylu:
źródło
git remote add central <url>
, w przypadku SSH, czy obejmuje to również ścieżkę? np.git remote add central ssh://user@server/home/user/repo.git
To powinno wystarczyć:
Zobacz więcej szczegółów „ GIT: Jak zaktualizować moje nagie repo? ”.
Uwagi:
origin
” dla zdalnego odniesienia do repozytorium.git push --tags origin
.źródło
Miło jest zweryfikować, czy kod, który wypchnąłeś, rzeczywiście został zatwierdzony.
Możesz uzyskać dziennik zmian w czystym repozytorium, jawnie ustawiając ścieżkę za pomocą opcji --relative.
Spowoduje to wyświetlenie zatwierdzonych zmian, jakby to było zwykłe repozytorium git.
źródło
Na podstawie odpowiedzi Marka Longaira i Roboprog:
jeśli wersja git> = 1.8
Lub:
jeśli wersja git <1.8
źródło
Flaga --bare tworzy repozytorium, które nie ma katalogu roboczego. Samo repozytorium jest centralnym repozytorium i nie można tutaj edytować (przechowywać) kodów, aby uniknąć błędu scalania.
Na przykład po dodaniu pliku do lokalnego repozytorium (komputer 1) i wypchnięciu go do pustego repozytorium nie można zobaczyć pliku w pustym repozytorium, ponieważ jest on zawsze „pusty”. Jednak naprawdę wypychasz coś do repozytorium i możesz to zobaczyć w sposób niejawny poprzez klonowanie innego repozytorium na twoim serwerze (maszyna 2).
Zarówno lokalne repozytorium na komputerze 1, jak i repozytorium „kopiuj” na komputerze 2 nie są puste. związek między nagimi a nie nagimi repozytoriami
Blog pomoże ci to zrozumieć. https://www.atlassian.com/git/tutorials/setting-up-a-repository
źródło
Możesz wykonać następujące polecenia, aby zainicjować lokalne repozytorium
Powinieneś pracować nad projektem z lokalnego repozytorium i używać serwera jako centralnego repozytorium.
Możesz również postępować zgodnie z tym artykułem, który wyjaśnia każdy aspekt tworzenia i utrzymywania repozytorium Git. Git dla początkujących
źródło