Ich habe ein lokales Git-Repository. Ich möchte es auf einem entfernten, SSH-fähigen Server verfügbar machen. Wie mache ich das?
git
installation
Nips
quelle
quelle
git push origin master
Fehler "Repository nicht gefunden" fehlschlägt, versuchen Sie esgit update-server-info
auf der Remote-Seite, wo Sie es getan habengit init --bare
git update-server-info
aber ich bekomme den Fehlerfatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
Um zunächst einen Git-Server einzurichten, müssen Sie ein vorhandenes Repository in ein neues nacktes Repository exportieren - ein Repository, das kein Arbeitsverzeichnis enthält. Dies ist im Allgemeinen unkompliziert. Um Ihr Repository zu klonen und ein neues nacktes Repository zu erstellen, führen Sie den Befehl clone mit der
--bare
Option aus. Konventionell enden nackte Repository-Verzeichnisse.git
wie folgt:Dieser Befehl verwendet das Git-Repository für sich, ohne ein Arbeitsverzeichnis, und erstellt ein Verzeichnis speziell für dieses Verzeichnis.
Nachdem Sie eine Kopie Ihres Repositorys haben, müssen Sie es nur noch auf einen Server stellen und Ihre Protokolle einrichten. Angenommen, Sie haben einen Server eingerichtet
git.example.com
, auf den Sie SSH-Zugriff haben, und Sie möchten alle Ihre Git-Repositorys im/opt/git
Verzeichnis speichern . Sie können Ihr neues Repository einrichten, indem Sie Ihr nacktes Repository über Folgendes kopieren:Zu diesem Zeitpunkt können andere Benutzer, die SSH-Zugriff auf denselben Server haben, der Lesezugriff auf das
/opt/git
Verzeichnis hat, Ihr Repository durch Ausführen klonenWenn ein Benutzer SSHs auf einem Server hat und Schreibzugriff auf das
/opt/git/my_project.git
Verzeichnis hat, hat er automatisch Push-Zugriff. Git fügt einem Repository automatisch ordnungsgemäß Gruppenschreibberechtigungen hinzu, wenn Sie den Befehl git init mit der--shared
Option ausführen .Es ist sehr einfach, ein Git-Repository zu erstellen, eine Bare-Version zu erstellen und es auf einem Server zu platzieren, auf den Sie und Ihre Mitarbeiter SSH-Zugriff haben. Jetzt können Sie an demselben Projekt zusammenarbeiten.
quelle
scp
Lösung funktioniert IMO in der Praxis besser als dieinit --bare
. Es fühlt sich immer noch wie ein hässlicher Hack an, zuerst lokal zu klonen, dann auf den Server zu kopieren ... wünschte, Git hätte einen Befehl, dies auf einmal zu tun.--shared
für mich gearbeitet hat. Ich frage mich, was passiert, wenn Sie verwenden,git init --shared
ohne eine--bare
zu machen ...scp
das für eine Fernbedienung funktioniert besser, wenn die Fernbedienung dies nicht unterstütztgit init --bare
(wie es bei mir mit Git 1.5.5, 2008 der Fall war). Ich denke, das sollte funktionieren, auch wenn die Fernbedienung überhaupt keinen Git hat.Ein Hinweis für Personen, die die lokale Kopie unter Windows erstellt haben und ein entsprechendes Remote-Repository auf einem Unix-Line-System erstellen möchten, bei dem Textdateien LF-Endungen auf weiteren Klonen von Entwicklern auf Unix-ähnlichen Systemen erhalten, CRLF-Endungen jedoch unter Windows.
Wenn Sie Ihr Windows-Repository erstellt haben, bevor Sie die Übersetzung am Zeilenende eingerichtet haben, liegt ein Problem vor. Die Standardeinstellung von Git ist keine Übersetzung, daher verwendet Ihr Arbeitssatz CRLF, aber Ihr Repository (dh die unter .git gespeicherten Daten) hat die Dateien auch als CRLF gespeichert.
Wenn Sie auf die Fernbedienung drücken, werden die gespeicherten Dateien unverändert kopiert, und es erfolgt keine Übersetzung am Zeilenende. (Die Übersetzung am Zeilenende erfolgt, wenn Dateien in ein Repository übernommen werden, nicht, wenn Repositorys übertragen werden.) Sie landen mit CRLF in Ihrem Unix-ähnlichen Repository, was nicht das ist, was Sie wollen.
Um LF in das Remote-Repository zu laden, müssen Sie sicherstellen, dass sich LF zuerst im lokalen Repository befindet, indem Sie Ihr Windows-Repository neu normalisieren . Dies hat keine sichtbaren Auswirkungen auf Ihren Windows-Arbeitssatz, der immer noch CRLF-Endungen hat. Wenn Sie jedoch auf Remote drücken, erhält die Fernbedienung LF korrekt.
Ich bin mir nicht sicher, ob es eine einfache Möglichkeit gibt, festzustellen, welche Zeilenenden sich in Ihrem Windows-Repository befinden. Ich denke, Sie können dies testen, indem Sie core.autocrlf = false setzen und dann klonen (Wenn das Repo LF-Endungen hat, hat der Klon LF auch).
quelle
Es gibt einen interessanten Unterschied zwischen den beiden oben genannten gängigen Lösungen:
Wenn Sie das nackte Repository wie folgt erstellen:
und dann
Dann richtet git die Konfiguration in 'original_repo' mit dieser Beziehung ein:
mit letzterem als Upstream-Fernbedienung. Und die Upstream-Fernbedienung hat keine anderen Fernbedienungen in ihrer Konfiguration.
Wenn Sie es jedoch umgekehrt machen:
Dann endet 'my_remote.git' mit seiner Konfiguration, deren 'Ursprung' auf 'original_repo' als Remote verweist, wobei eine remote.origin.url dem lokalen Verzeichnispfad entspricht, was möglicherweise nicht geeignet ist, wenn sie verschoben werden soll zu einem Server.
Während diese "Remote" -Referenz später leicht entfernt werden kann, wenn sie nicht angemessen ist, muss 'original_repo' immer noch so eingerichtet werden, dass sie auf 'my_remote.git' als Upstream-Remote verweist (oder wohin sie auch geht) geteilt werden von). Technisch gesehen können Sie mit Ansatz 2 mit ein paar weiteren Schritten zum gleichen Ergebnis gelangen. # 1 scheint jedoch ein direkterer Ansatz zu sein, um ein "zentrales nacktes gemeinsames Repo" zu erstellen, das von einem lokalen Repo stammt und für den Wechsel auf einen Server mit weniger Schritten geeignet ist. Ich denke, es hängt von der Rolle ab, die das Remote-Repo spielen soll. (Und ja, dies steht im Widerspruch zur Dokumentation hier .)
Vorsichtsmaßnahme: Ich habe das oben Genannte gelernt (bei diesem Schreiben Anfang August 2019), indem ich einen Test auf meinem lokalen System mit einem echten Repo durchgeführt und dann einen Datei-für-Datei-Vergleich zwischen den Ergebnissen durchgeführt habe. Aber! Ich lerne noch, also könnte es einen korrekteren Weg geben. Aber meine Tests haben mir geholfen zu folgern, dass # 1 meine derzeit bevorzugte Methode ist.
quelle
Sie können ein Bare-Git-Repository mit dem folgenden Code erstellen:
Eine Option für ein Remote-Git-Repository ist die Verwendung des SSH-Protokolls:
Weitere Informationen finden Sie in der Referenz: Git auf dem Server - Die Protokolle
quelle
Sie müssen ein Verzeichnis auf einem Remote-Server erstellen. Verwenden Sie dann den Befehl "git init", um es als Repository festzulegen. Dies sollte für jedes neue Projekt erfolgen (jeden neuen Ordner).
Angenommen, Sie haben git bereits mit ssh-Schlüsseln eingerichtet und verwendet, habe ich ein kleines Python-Skript geschrieben, das bei Ausführung aus einem Arbeitsverzeichnis eine Fernbedienung einrichtet und das Verzeichnis als Git-Repo initialisiert. Natürlich müssen Sie das Skript (nur einmal) bearbeiten, um es dem Server und dem Root-Pfad für alle Repositorys mitzuteilen.
Überprüfen Sie hier - https://github.com/skbobade/ocgi
quelle
Normalerweise können Sie ein Git-Repo einfach mit dem
init
Befehl einrichtenIn Ihrem Fall ist bereits ein Repo auf einer Fernbedienung verfügbar. Abhängig davon, wie Sie auf Ihr Remote-Repo zugreifen (mit Benutzername in der URL oder einem SSH-Schlüssel, der die Überprüfung übernimmt), verwenden Sie nur den folgenden
clone
Befehl:Es gibt auch andere Möglichkeiten, das Repo zu klonen. Auf diese Weise rufen Sie es auf, wenn auf Ihrem Computer ein SSH-Schlüssel eingerichtet ist, der beim Abrufen Ihres Repositorys überprüft. Es gibt andere Kombinationen der URL, wenn Sie Ihr Kennwort und Ihren Benutzernamen einschließen möchten, um sich bei Ihrem Remote-Repository anzumelden.
quelle