Ich füge diese Antwort hinzu, weil, nachdem ich hier angekommen bin (mit der gleichen Frage), keine der Antworten wirklich alle erforderlichen Schritte beschreibt, die notwendig sind, um von nichts zu einem voll nutzbaren Remote (bare) Repo zu kommen.
Hinweis: In diesem Beispiel werden lokale Pfade für den Speicherort des bloßen Projektarchivs verwendet, aber andere Git-Protokolle (wie das vom Auftraggeber angegebene SSH) sollten problemlos funktionieren.
Ich habe versucht, für diejenigen, die mit Git nicht so vertraut sind, einige Anmerkungen hinzuzufügen.
1. Initialisieren Sie das bloße Repo...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
Dadurch wird ein Ordner (repo.git) erstellt und mit Git-Dateien gefüllt, die ein Git-Repository darstellen. Im jetzigen Zustand ist dieses Repo nutzlos - es hat keine Commits und, was noch wichtiger ist, keine Zweige . Obwohl Sie dieses Repository klonen können, können Sie nicht von ihm ziehen.
Als nächstes müssen wir einen Arbeitsordner erstellen. Dazu gibt es mehrere Möglichkeiten, je nachdem, ob Sie bereits Dateien haben.
2a. Erstellen Sie einen neuen Arbeitsordner (ohne vorhandene Dateien), indem Sie das leere Projektarchiv klonen
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.
Dieser Befehl funktioniert nur, wenn /path/to/work
nicht existiert oder ein leerer Ordner ist. Beachten Sie die Warnung - in diesem Stadium haben Sie noch nichts Brauchbares. Wenn Sie cd /path/to/work
und laufen git status
erhalten Sie etwas wie:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
aber das ist eine Lüge. Sie sind nicht wirklich auf dem Zweig master
(weil git branch
gibt nichts zurück) und bisher gibt es keine Übertragungen.
Als Nächstes kopieren/verschieben/erstellen Sie einige Dateien im Arbeitsordner, fügen Sie sie zu git hinzu und erstellen Sie den ersten 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
En git config
Befehle werden nur benötigt, wenn Sie Git nicht bereits mitgeteilt haben, wer Sie sind. Beachten Sie, dass Sie, wenn Sie jetzt den Befehl git branch
sehen Sie nun die master
Branche aufgeführt. Führen Sie nun 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
Dies ist ebenfalls irreführend - der Upstream ist nicht "weg", er wurde nur noch nicht erstellt und git branch --unset-upstream
wird nicht helfen. Aber das ist OK, jetzt, wo wir unseren ersten Commit haben, können wir pushen und Master wird auf dem Bare Repo erstellt.
> 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
An diesem Punkt haben wir ein voll funktionsfähiges Bare Repo, das an anderer Stelle auf einen Master-Branch geklont werden kann, sowie eine lokale Arbeitskopie, die Pull und Push kann.
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2b. Erstellen eines Arbeitsordners aus vorhandenen Dateien Wenn Sie bereits einen Ordner mit Dateien darin haben (so dass Sie nicht in diesen klonen können), können Sie ein neues Git-Repositorium initialisieren, eine erste Übergabe hinzufügen und es anschließend mit dem bloßen Repo verknüpfen.
> 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
...
An diesem Punkt haben wir unseren ersten Commit und einen lokalen Master-Zweig, den wir in einen Upstream-Zweig mit Remote-Tracking verwandeln müssen.
> 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.
Beachten Sie die -u
Flagge bei Git-Push, um den (neuen) verfolgten Upstream-Zweig zu setzen. Wie zuvor haben wir nun ein voll funktionsfähiges Bare Repo, das an anderer Stelle auf einen Master-Branch geklont werden kann, sowie eine lokale Arbeitskopie, die Pull und Push kann.
All dies mag für einige offensichtlich erscheinen, aber Git verwirrt mich zu den besten Zeiten (seine Fehler- und Statusmeldungen müssen wirklich überarbeitet werden) - hoffentlich wird dies anderen helfen.