Wie kann ich mein lokales Repository für Git-Pull verfügbar machen?


89

Ich habe ein Arbeitskopie-Repository, in dem ich problemlos gearbeitet habe. Der Ursprung für dieses Repository liegt auf GitHub.

Ich möchte mein Arbeitskopie-Repository als Ursprung für meinen Build-Computer (eine VM auf einem anderen physischen Host) verfügbar machen, damit Commits, die ich für meine Arbeitskopie mache, auf dem Build-Computer erstellt und getestet werden können, ohne dass dies erforderlich ist GitHub zuerst. Ich habe bereits einen Build für das GitHub-Repository, aber ich möchte, dass dies ein "goldenes" Repository / Build ist. dh wenn dort etwas rein geht, sollte der Build gegen GitHub garantiert bestanden werden.

Ich habe mir die Dokumentation zu Git-URLs angesehen und festgestellt, dass es eine Option gibt, eine URL im Formular zu verwenden git://host.xz[:port]/path/to/repo.git/(siehe z. B. Git-Clone-Dokumentation) ). Ich möchte dies auf möglichst einfache Weise mit einem Minimum an Konfiguration tun: Ich möchte keinen SSH-Daemon oder Webserver einrichten müssen, um dies auf meinem Build-Computer zu veröffentlichen.

Ich verwende Windows 7 x64 RC, habe MSysGit und TortoiseGit installiert und den Standardport (9814) von Git in der Firewall geöffnet. Bitte nehmen Sie an, dass sich das Repo für Arbeitskopien bei D:\Visual Studio Projects\MyGitRepobefindet und der Hostname lautet devbox. Der Buildcomputer ist Windows Server 2008 x64. Ich habe den folgenden Befehl auf der Build-Maschine mit der zugehörigen Ausgabe versucht:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

Vermisse ich etwas


Können Sie nicht einfach eine Freigabe lokal einrichten und dann 'git clone \\ workmachine \ share' von Ihrer Buildmachine aus ausführen? Nicht der beste / effektivste Weg, aber das Einfachste.
Joakim Elofsson

Antworten:


131

Es gibt fünf Möglichkeiten, ein Repository zum Abrufen von einzurichten:

  • lokales Dateisystem : git clone /path/to/repooder git clone file://path/to/repo. Am wenigsten Arbeit, wenn Sie ein vernetztes Dateisystem haben, aber das Netzwerk nicht sehr effizient nutzen. (Dies ist fast genau die von Joakim Elofsson vorgeschlagene Lösung )
  • HTTP-Protokolle : git clone http://example.com/repo. Sie benötigen einen beliebigen Webserver und müssen git-update-server-info (möglicherweise automatisch von einem Hook aus) ausführen , um Informationen zu generieren, die zum Abrufen / Abrufen über "dumme" Protokolle erforderlich sind.
  • SSH : git clone ssh://example.com/srv/git/repooder git clone example.com:/srv/git/repo. Sie müssen den SSH-Server (SSH-Daemon) einrichten und SSH auf dem Client installiert haben (z. B. PuTTY unter MS Windows).
  • Git-Protokoll : git clone git://example.com/repo. Sie müssen git-daemon auf dem Server ausführen . Weitere Informationen finden Sie in der Dokumentation (Sie können es als eigenständigen Prozess nur zum Abrufen ausführen, nicht als Dienst ausführen). git-daemon ist ein Teil von git.
  • Bundle : Sie generieren ein Bundle auf dem Server mit dem Befehl git-bundle , übertragen es auf irgendeine Weise (auch über USB) auf einen Client-Computer und klonen mit git clone file.bndl(wenn der Klon nicht funktioniert, können Sie "git init", "git remote add" ausführen "und" git fetch ").

Was Sie in Ihrem Beispiel vermissen, ist wahrscheinlich, dass git-daemon auf dem Server ausgeführt wird. Das oder eine falsche Konfiguration des Git-Daemons.

Leider kann ich Ihnen nicht helfen, git-daemon als Dienst unter MS Windows auszuführen. Es gibt jedoch keine Ankündigung für die letzte Version von msysGit, dass der Git-Daemon nicht funktioniert.


Ok, also muss ich installieren jedes Mal etwas oder manuell über ein Bundle kopieren (möglicherweise per Skript, denke ich.
Benötigen

1
Nur die Option "Git-Protokoll" muss den Git-Daemon auf dem Server ausführen. Nur die Optionen "SSH" und "HTTP" erfordern zusätzliche Tools: entweder sshd (ssh-Server) oder Webserver. Die Bundle-Lösung ist eine manuelle Lösung.
Jakub Narębski

Obwohl die Frage "Pull" lautete, muss das Poster davor gewarnt werden, anschließend "Git Push" auszuführen, da das Repository, aus dem er klont, nicht leer ist.
Yhager

Könnten Sie das bitte näher erläutern, @yhager?
Alastairs

1
Hinweis für alle anderen, die die lokale Dateisystemoption ausprobieren: Denken Sie daran, die führenden Backslashes auf dem UNC-Pfad zu umgehen! :-)
Alastairs

17

Zusätzlich zu den Antworten von Jakub Narębski gibt es eine andere Möglichkeit, die eher Ihrer ursprünglichen Frage entspricht. Sie können wie gewohnt von Github klonen. Wenn Sie dann einen einmaligen Pull von Ihrem lokalen Repo ausführen möchten, tun Sie einfach Folgendes:

git pull /path/to/repo master

(Anstelle von Master können Sie einen beliebigen Filialnamen eingeben.)


Ein kleiner Tipp (oder wie ich zu dieser Frage gekommen bin): ..in <path / to / repo> scheint nicht zu funktionieren; Verwenden Sie stattdessen einen vollständigen Pfad.
Dmitry Timofeev


1

Ich habe kürzlich eines meiner Git-Projekte so geändert, dass es sich mithilfe von Sitecopy auf einen HTTP-Server repliziert, um die eigentlichen Datei-Uploads durchzuführen.

Es ist ziemlich einfach. Verwenden Sie einfach git update-server-infodas .git-Verzeichnis und spiegeln Sie es in ein http-zugängliches Verzeichnis auf Ihrem Server. Ich habe 'project.git' verwendet, was ziemlich häufig ist.

Git ziehen von http: // site / project-git funktioniert wie ein Champion, und ich muss nichts auf dem Server haben, außer FTP-Zugriff, obwohl Sitecopy auch Webdav unterstützt.

Ich empfehle jedoch nicht, Sitecopy zu verwenden, da dadurch nicht mehrere Computer gut synchronisiert werden. Für mein Projekt ist das HTTP-Repository schreibgeschützt, und Gold-Updates stammen von nur einem Computer, sodass es gut genug funktioniert.


1

Wenn Sie einen Pfad wie haben

C:\Project\

und du hast es git initschon getan , also hast du auch einen Ordner

C:\Project\.git\

Sie erstellen jetzt einen neuen Ordner

C:\.git\

Gehen Sie in diesen Ordner und führen Sie ihn aus git clone --bare ..\Project( nackt ist wichtig),
kehren Sie zu Ihrem C:\Project\Ordner zurück und führen Sie eine aus git remote add-url local ..\.git\Project.
Jetzt brauchen Sie nur was Sie tun git add -A, git commit -m "HelloWorld"undgit push local master .

Sie können den ProjectOrdner freigeben, eine Verbindung herstellen Z:und dies tun git clone Z:\Project- Sie können ihn jetzt verwenden git pull origin masterund git push origin masterÄnderungen von einem Computer auf einen anderen übertragen.


0

Befindet sich Ihr Remote-Host im selben Windows-Netzwerk, dh Sie können als \ remotehost darauf zugreifen, können Sie das Netzwerklaufwerk im Explorer zuordnen. Sagen wir z: -> \ remotehost \ repodir. Danach können Sie 'git clone / verwenden. z / myproject 'zum Klonen des Projekts

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.