Ich füge diese Antwort hinzu, da nach der Ankunft hier (mit derselben Frage) keine der Antworten wirklich alle erforderlichen Schritte beschreibt, die erforderlich sind, um von nichts zu einem vollständig verwendbaren Remote-Repo (nackten Repo) zu gelangen.
Hinweis: In diesem Beispiel werden lokale Pfade für den Speicherort des Bare-Repo verwendet, aber andere Git-Protokolle (wie das vom OP angegebene SSH) sollten einwandfrei funktionieren.
Ich habe versucht, ein paar Notizen für diejenigen hinzuzufügen, die mit Git weniger vertraut sind.
1. Initialisieren Sie das Bare 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-Repo darstellen. So wie es aussieht, ist dieses Repo nutzlos - es hat keine Commits und vor allem keine Filialen . Obwohl Sie dieses Repo klonen können, können Sie nicht daraus ziehen.
Als nächstes müssen wir einen Arbeitsordner erstellen. Es gibt verschiedene Möglichkeiten, dies zu tun, je nachdem, ob Sie über vorhandene Dateien verfügen.
2a. Erstellen Sie einen neuen Arbeitsordner (keine vorhandenen Dateien), indem Sie das leere Repo 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 er /path/to/work
nicht vorhanden ist oder ein leerer Ordner ist. Beachten Sie die Warnung - zu diesem Zeitpunkt haben Sie noch nichts Nützliches. 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 in der Filiale master
(weil git branch
nichts zurückgegeben wird) und bisher gibt es keine Commits.
Kopieren / verschieben / erstellen Sie anschließend einige Dateien im Arbeitsordner, fügen Sie sie zu git hinzu und erstellen Sie das erste 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
Die git config
Befehle werden nur benötigt, wenn Sie git noch nicht mitgeteilt haben, wer Sie sind. Beachten Sie, dass beim Ausführen git branch
jetzt der master
Zweig aufgelistet wird. Führen Sie jetzt aus 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 auch irreführend - Upstream ist nicht "gegangen", es wurde nur noch nicht erstellt und git branch --unset-upstream
wird nicht helfen. Aber das ist in Ordnung, jetzt, da wir unser erstes 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
Zu diesem Zeitpunkt verfügen wir über ein voll funktionsfähiges Bare-Repo, das an anderer Stelle in einem Hauptzweig geklont werden kann, sowie über eine lokale Arbeitskopie, die gezogen und verschoben werden 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 (sodass Sie nicht in diesen klonen können), können Sie ein neues Git-Repo initialisieren, ein erstes Commit hinzufügen und es anschließend mit dem Bare-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
...
Zu diesem Zeitpunkt haben wir unser erstes Commit und einen lokalen Hauptzweig, den wir in einen fernverfolgten Upstream-Zweig mit Fernverfolgung 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 das -u
Flag bei git push, um den (neuen) verfolgten Upstream-Zweig zu setzen. Nach wie vor haben wir jetzt ein voll funktionsfähiges Bare-Repo, das an anderer Stelle in einem Hauptzweig geklont werden kann, sowie eine lokale Arbeitskopie, die gezogen und verschoben werden kann.
All dies mag einigen offensichtlich erscheinen, aber Git verwirrt mich im besten Fall (Fehler- und Statusmeldungen müssen wirklich überarbeitet werden) - hoffentlich hilft dies anderen.
--shared
Option hinzufügen,init
wenn Sie vorhaben, dass andere Personen zu diesem Repo wechseln. Es fügt automatisch Gruppenschreibberechtigungen zum Repository hinzu - link