Dodam 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 ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
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
git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.
To polecenie działa tylko wtedy, /path/to/workgdy nie istnieje lub jest pustym folderem. Zwróć uwagę na ostrzeżenie - na tym etapie nadal nie masz nic przydatnego. Jeśli cd /path/to/workpobiegniesz git status, dostaniesz coś takiego:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
ale to kłamstwo. Tak naprawdę nie jesteś na gałęzi master(ponieważ git branchnic 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.
> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email adelphus@example.com
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
Te git configpolecenia są potrzebne tylko wtedy, gdy nie mają już powiedziano git, kim jesteś. Pamiętaj, że jeśli teraz uruchomisz git branch, zobaczysz mastergałąź na liście. Teraz uruchom git status:
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean
Jest to również mylące - upstream jeszcze nie „zniknął”, po prostu nie został jeszcze stworzony i git branch --unset-upstreamnie pomoże. Ale to w porządku, teraz, kiedy mamy pierwsze zatwierdzenie, możemy wypchnąć, a master zostanie utworzony na samym repozytorium.
> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
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ć.
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
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.
> cd /path/to/work_with_stuff
> git init
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"
[master (root-commit) 614ab02] added stuff
20 files changed, 1431 insertions(+)
create mode 100644 stuff.txt
...
W tym momencie mamy nasz pierwszy zatwierdzenie i lokalną gałąź master, którą musimy przekształcić w zdalnie śledzoną gałąź upstream.
> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
Zwróć uwagę na -uflagę 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.
--sharedopcję,initjeśli planujesz, aby inne osoby naciskały na to repozytorium. Automatycznie dodaje uprawnienia do zapisu grupowego do repozytorium - link