Sto aggiungendo questa risposta perché dopo essere arrivati qui (con la stessa domanda), nessuna delle risposte descrive in realtà tutti i passaggi necessari per passare dal nulla a un repository remoto (semplice) completamente utilizzabile.
Nota: questo esempio usa percorsi locali per l'ubicazione del repository nudo, ma altri protocolli git (come SSH indicato dall'OP) dovrebbero funzionare bene.
Ho provato ad aggiungere alcune note lungo la strada per coloro che hanno meno familiarità con Git.
1. Inizializza il repository nudo ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
Questo crea una cartella (repo.git) e la popola con file git che rappresentano un repository git. Allo stato attuale, questo repository è inutile: non ha impegni e, soprattutto, non ha filiali . Sebbene sia possibile clonare questo repository, non è possibile estrarlo.
Successivamente, dobbiamo creare una cartella di lavoro. Ci sono un paio di modi per farlo, a seconda che tu abbia file esistenti.
2a. Creare una nuova cartella di lavoro (nessun file esistente) clonando il repository vuoto
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.
Questo comando funzionerà solo se /path/to/worknon esiste o è una cartella vuota. Prendi nota dell'avvertimento: in questa fase non hai ancora nulla di utile. Se cd /path/to/workcorri e git statusotterrai qualcosa come:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
ma questa è una bugia. Non sei davvero sul ramo master(perché git branchnon restituisce nulla) e finora non ci sono commit.
Quindi, copia / sposta / crea alcuni file nella cartella di lavoro, aggiungili a git e crea il primo commit.
> 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
I git configcomandi sono necessari solo se non hai già detto a git chi sei. Nota che se ora esegui git branch, ora vedrai il masterramo elencato. Ora esegui 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
Anche questo è fuorviante: l'upstream non è "andato", semplicemente non è stato ancora creato e git branch --unset-upstreamnon aiuterà. Ma va bene, ora che abbiamo il nostro primo commit, possiamo spingere e il master verrà creato sul repository nudo.
> 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
A questo punto, abbiamo un repository nudo completamente funzionale che può essere clonato altrove su un ramo master, nonché una copia di lavoro locale che può essere estratta e spinta.
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2b. Creare una cartella di lavoro da file esistenti
Se si dispone già di una cartella con file (quindi non è possibile clonare in essa), è possibile inizializzare un nuovo repository git, aggiungere un primo commit e collegarlo successivamente al repository nudo.
> 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
...
A questo punto abbiamo il nostro primo commit e un ramo master locale che dobbiamo trasformare in un ramo upstream con tracciamento remoto.
> 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.
Nota il -uflag su git push per impostare il (nuovo) ramo tracciato a monte. Proprio come prima, ora abbiamo un repository nudo completamente funzionale che può essere clonato altrove su un ramo master, nonché una copia di lavoro locale che può estrarre e spingere.
Tutto questo può sembrare ovvio per alcuni, ma git mi confonde il più delle volte (è un messaggio di errore e di stato che ha davvero bisogno di essere rielaborato) - si spera, questo aiuterà gli altri.
--sharedopzione perinitse si prevede di fare in modo che altre persone spingano in questo repository. Aggiunge automaticamente le autorizzazioni di scrittura di gruppo al repository - link