Ich muss ein zentrales Git-Repository erstellen, bin aber etwas verwirrt ...
Ich habe ein nacktes Repository (auf meinem Git-Server, Maschine 2) erstellt mit:
$ mkdir test_repo
$ git --bare init
Jetzt muss ich Dateien von meinem lokalen Repository (Maschine 1) in das nackte Repository (Maschine 2) verschieben. Ich habe Zugriff auf Maschine 2 per SSH. Die Sache ist, dass ich glaube, ich verstehe das Konzept eines nackten Repositorys nicht ...
Was ist der richtige Weg, um meinen Code im nackten Repository zu speichern? Wie kann ich Änderungen von meinem lokalen Repository in das nackte Repository übertragen?
Ist der richtige Weg, ein zentrales Repository zu haben, ein nacktes Repository?
Ich bin ein wenig verwirrt mit diesem Thema. Bitte geben Sie mir einen Hinweis dazu.
--shared
Option hinzufügen,init
wenn Sie vorhaben, dass andere Personen zu diesem Repo wechseln. Es fügt automatisch Gruppenschreibberechtigungen zum Repository hinzu - linkIch 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 ...
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
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 Siecd /path/to/work
und laufengit status
, erhalten Sie etwas wie:aber das ist eine Lüge. Sie sind nicht wirklich in der Filiale
master
(weilgit 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.
Die
git config
Befehle werden nur benötigt, wenn Sie git noch nicht mitgeteilt haben, wer Sie sind. Beachten Sie, dass beim Ausführengit branch
jetzt dermaster
Zweig aufgelistet wird. Führen Sie jetzt ausgit status
: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.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.
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.
Zu diesem Zeitpunkt haben wir unser erstes Commit und einen lokalen Hauptzweig, den wir in einen fernverfolgten Upstream-Zweig mit Fernverfolgung verwandeln müssen.
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.
quelle
Beantworten Sie Ihre Fragen einzeln:
Das nackte Repository hat keinen funktionierenden Baum . Es bedeutet, dass der gesamte Inhalt dem entspricht, was Sie im
.git
Verzeichnis haben.Sie können
commit
das Repository nur entblößen, indempush
Sie von Ihrem lokalen Klon darauf zugreifen. Es hat keinen Arbeitsbaum, also keine geänderten Dateien, keine Änderungen.Um ein zentrales Repository zu haben, ist es nur möglich, ein
bare
Repository zu haben .quelle
Sie können git auch bitten, ein Verzeichnis für Sie zu erstellen:
quelle
Die allgemeine Praxis besteht darin, das zentrale Repository, auf das Sie pushen, als nacktes Repo zu haben.
Wenn Sie einen SVN-Hintergrund haben, können Sie ein SVN-Repo mit einem Git-Bare-Repo verknüpfen. Die Dateien im Repo sind nicht in der ursprünglichen Form vorhanden. Während Ihr lokales Repo zusätzlich die Dateien enthält, die Ihren "Code" bilden.
Sie müssen dem Bare Repo von Ihrem lokalen Repo aus eine Fernbedienung hinzufügen und Ihren "Code" darauf übertragen.
Es wird so etwas sein wie:
quelle
git remote add central <url>
im Fall von SSH auch den Pfad? zBgit remote add central ssh://user@server/home/user/repo.git
Das sollte reichen:
Weitere Informationen finden Sie unter " GIT: Wie aktualisiere ich mein Bare Repo? ".
Anmerkungen:
origin
' für die Bare-Repo-Fernreferenz verwenden.git push --tags origin
.quelle
Es ist schön zu überprüfen, ob der Code, den Sie gepusht haben, tatsächlich festgeschrieben wurde.
Sie können ein Änderungsprotokoll für ein nacktes Repository abrufen, indem Sie den Pfad explizit mit der Option --relative festlegen.
Dies zeigt Ihnen die festgeschriebenen Änderungen, als wäre dies ein reguläres Git-Repo.
quelle
Basierend auf den Antworten von Mark Longair & Roboprog:
wenn git version> = 1.8
Oder :
wenn git version <1.8
quelle
Das Flag --bare erstellt ein Repository ohne Arbeitsverzeichnis. Das nackte Repository ist das zentrale Repository, und Sie können hier keine Codes bearbeiten (speichern), um den Zusammenführungsfehler zu vermeiden.
Wenn Sie beispielsweise eine Datei in Ihrem lokalen Repository (Computer 1) hinzufügen und in das Bare-Repository verschieben, wird die Datei im Bare-Repository nicht angezeigt, da sie immer "leer" ist. Sie pushen jedoch wirklich etwas in das Repository und können es unerklärlich sehen, indem Sie ein anderes Repository auf Ihrem Server (Computer 2) klonen.
Sowohl das lokale Repository in Maschine 1 als auch das 'Kopier'-Repository in Maschine 2 sind nicht leer. Beziehung zwischen nackten und nicht bloßen Repositories
Der Blog wird Ihnen helfen, es zu verstehen. https://www.atlassian.com/git/tutorials/setting-up-a-repository
quelle
Sie können die folgenden Befehle ausführen, um Ihr lokales Repository zu initialisieren
Sie sollten Ihr Projekt von Ihrem lokalen Repository aus bearbeiten und den Server als zentrales Repository verwenden.
Sie können auch diesem Artikel folgen, in dem alle Aspekte der Erstellung und Pflege eines Git-Repositorys erläutert werden. Git für Anfänger
quelle