Hosting Git Repository in Windows

108

Gibt es derzeit eine Möglichkeit, ein freigegebenes Git-Repository in Windows zu hosten? Ich verstehe, dass Sie den Git-Dienst unter Linux konfigurieren können mit:

git daemon

Gibt es eine native Windows-Option zum Freigeben von Ordnern, um einen Git-Dienst zu hosten?

BEARBEITEN: Ich verwende derzeit die Cygwin-Installation von Git, um Git-Repositorys in Windows zu speichern und damit zu arbeiten. Ich möchte jedoch den nächsten Schritt zum Hosten eines Repositorys mit einem Dienst ausführen, der anderen Zugriff gewähren kann.

Jeff Fritz
quelle
35
Mein aktueller Arbeitgeber hat keine Unix- oder Linux-Maschinen ... die gleichzeitige Einführung eines neuen Versionsverwaltungsanbieters und Betriebssystems kann ein bisschen ... traumatisch sein.
Jeff Fritz
1
Was ist los mit Git-Daemon? AFAIK es funktioniert gut unter Windows.
Aristoteles Pagaltzis
10
Die Installation von Git mit dem Standard-Installationsprogramm von msysgit für Windows scheint nicht installiert zu sein git daemon. : \
Tim Visher
1
Es gibt ein mitgeliefertes CopSSH- und msysgit-Installationsprogramm , das Sie sich vielleicht ansehen möchten. Es verwendet die Authentifizierung mit öffentlichem Schlüssel und macht es einfach. Haftungsausschluss: Ich bin der Webmaster. Ich habe das Projekt gestartet, nachdem ich das Tutorial von Tim Davis zum Einrichten eines sicheren Git-Servers
Lilith River
3
Für die Aufzeichnung: Git für Windows enthält seit Version 1.7.4 (veröffentlicht im Februar 2011) eine funktionierende Version des Git-Daemons. Cygwin wird also nicht mehr benötigt. Siehe auch stackoverflow.com/q/5186070/291641
patthoyts

Antworten:

75

Hier sind einige Schritte, die Sie ausführen können, um den Git-Daemon unter Windows auszuführen:

(Voraussetzungen: Eine Standardinstallation von Cygwin und ein Git-Client, der den Git-Daemon unterstützt.)

Schritt 1 : Öffnen Sie eine Bash-Shell

Schritt 2 : Erstellen Sie im Verzeichnis / cygdrive / c / cygwin64 / usr / local / bin / eine Datei mit dem Namen "gitd" mit folgendem Inhalt:

#!/bin/bash

/usr/bin/git daemon --reuseaddr --base-path=/git --export-all --verbose --enable=receive-pack

Schritt 3 : Führen Sie den folgenden Befehl cygrunsrv an einer Eingabeaufforderung mit erhöhten Rechten (dh als Administrator) aus, um das Skript als Dienst zu installieren (Hinweis: Es wird davon ausgegangen, dass Cygwin unter C: \ cygwin64 installiert ist):

cygrunsrv   --install gitd                          \
            --path c:/cygwin64/bin/bash.exe         \
            --args c:/cygwin64/usr/local/bin/gitd   \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Schritt 4 : Führen Sie den folgenden Befehl aus, um den Dienst zu starten:

cygrunsrv --start gitd

Du bist fertig. Wenn Sie es testen möchten, finden Sie hier ein schnelles und schmutziges Skript, das zeigt, dass Sie das Git-Protokoll auf Ihren lokalen Computer übertragen können:

#!/bin/bash

echo "Creating main git repo ..."
mkdir -p /git/testapp.git
cd /git/testapp.git
git init --bare
touch git-daemon-export-ok
echo "Creating local repo ..."
cd
mkdir testapp
cd testapp
git init
echo "Creating test file ..."
touch testfile
git add -A
git commit -m 'Test message'
echo "Pushing master to main repo ..."
git push git://localhost/testapp.git master
Derek Greer
quelle
2
Wenn ich diesen Beitrag bearbeiten könnte, würde ich Folgendes hinzufügen: Voraussetzungen: cygwin mit den installierten Paketen git und cygrunsrv.
Mario
2
Ein weiterer Hinweis: Qualifizieren Sie den Pfad zu git innerhalb des gitd-Shell-Skripts vollständig. Auf einem meiner Computer wurde MSYSGit anstelle von cygwin-git gestartet, wenn es als Windows-Prozess ausgeführt wurde. MSYSGit unterstützt den Daemon-Modus nicht, sodass der Dienst nicht gestartet werden konnte.
Mario
26
Ich habe Cygwin-Lösungen nie als "Arbeiten unter Windows" angesehen. Es ist so, als würde man sagen "Linux unter einer VM ausführen funktioniert unter Windows". Aber das ist nur meine puristische Meinung;)
Rook
3
Kurzer Hinweis: / usr / bin hat bei mir nicht funktioniert, aber das Platzieren in / bin hat funktioniert (und die Verwendung von c: / cygwin / bin / gitd im cygrunsrv). Ich bin mir nicht sicher, wie alt meine Cygwin-Installation ist, aber es sieht so aus, als ob / usr / bin ein Link zu dem ist, was in / bin ist, von dem Windows nichts weiß ... Auch ein bisschen offensichtlich, aber denken Sie daran, den Ordner / git in c: / cygwin /
Armyofda12mnkeys
3
@Rook - Im Gegenteil, die Cygwin-Tool-Suite unterscheidet sich nicht von anderen Anwendungen von Drittanbietern, die Sie möglicherweise installieren. Cygwin ist keine virtuelle Maschine, sondern eine vorgefertigte Suite von Tools. Es ist nur eine Reihe von ausführbaren Windows-Dateien und DLLs wie alles andere auf Ihrem Computer.
Derek Greer
16

GitStack könnte Ihre beste Wahl sein. Es ist derzeit kostenlos (für bis zu 2 Benutzer) und zum Zeitpunkt des Schreibens Open Source .

poiuytrez
quelle
2
Anscheinend war dies auf Open Source- oder Studentenprojekte beschränkt: "GitStack ist kostenlos für Open Source- und Studentenprojekte!"
Keller
12

Hier ist ein dedizierter Git-Server für Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki

Daniel O.
quelle
Wie ist der Status des Bonobo-Servers? Ist es voll funktionsfähig? Ich kann es den Dokumenten nicht entnehmen, aber es sieht sehr überzeugend aus.
Jeff Fritz
1
@ JeffFritz: Ich habe gerade aufgehört, es zu benutzen. Das verdammte Ding aktualisiert den Repository-Status ( git update-server-info) nach dem HTTP-Push nicht und diese Logik wird von ihrer Git-Bibliothek (GitSharp) nicht implementiert. Ich bezweifle, dass es bald einen echten Arbeitszustand erreichen wird.
André Caron
Funktioniert auch nicht mit Teamcity (was der Hauptgrund dafür ist, dass ich es nicht benutze) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg
3
Glücklicher Bonobo Benutzer hier. Ich glaube, sowohl Andre als auch Piers Bedenken sollten jetzt gelöst werden. Dieses TeamCity-Problem wurde als geschlossen markiert, und ich habe keine Probleme mit der Verwendung eines zentralen zentralen Repositorys festgestellt.
Quinn Bailey
9

Wenn Sie in einer Windows-Umgebung arbeiten, haben Sie Mercurial in Betracht gezogen ? Es ist ein verteiltes Versionskontrollsystem wie Git, lässt sich jedoch wesentlich besser und einfacher in Windows integrieren.

David Arno
quelle
9
Es ist wahr, dass es viel einfacher ist, Mercurial auf Windows-Computern zu verwenden, zumindest was die Synchronisierung von Repositorys betrifft. Keine besonders nützliche Antwort, wenn Sie Git tatsächlich verwenden müssen!
Frank Shearar
Auch Bazaar funktioniert nativ an Fenstern; Es hat sogar kommerzielle Unterstützung.
Hasen
7

Wenn Sie cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.nach dem Ausführen des Befehls den Fehler erhalten :

cygrunsrv --start gitd

Das bedeutet, dass Sie den Ordner 'Basispfad' nicht erstellt haben.

Durch Erstellen des Ordners '/ git' und erneutes Ausführen des Befehls wird dies behoben.

isaac
quelle
Sie können diesen Fehler auch erhalten, wenn Ihre /gitNTFS-Berechtigungen dem Lese- / Schreibzugriff des Dienstkontos (SYSTEM) keinen Zugriff gewähren.
Spoulson
5

Ich verwende derzeit den ssh-Daemon von cygwin unter Windows, um den Dienst bereitzustellen und den Fernzugriff auf mein Repo zu ermöglichen. Es funktioniert ganz gut, ich habe die vollständige Kontrolle darüber, wer über seine SSH-Zertifikate auf mein Repo zugreift, und die Leistung ist selbst über Remote-WAN- und VPN-Verbindungen hervorragend.

Eine andere Lösung ist die Verwendung von Gitosis . Es ist ein Tool, das das Hosting von Repos erheblich vereinfacht.

Matthew McCullough
quelle
Wie haben Sie den Git-Daemon dazu gebracht, mit Cygwin zu arbeiten? Ich habe das SSH-Daemon-Setup und teste die Anmeldung bei meinem Computer über SSH, aber wenn ich versuche, den Git-Daemon auszuführen, hängt er einfach.
Thiru
Wie haben Sie Gitosis unter Windows zum Laufen gebracht, da es einen Fehler gibt: github.com/res0nat0r/gitosis/issues#issue/1
dalore
4

Sie müssen keinen Dienst hosten, sondern können auch ein freigegebenes Repository auf einem freigegebenen Laufwerk erstellen. Erstellen Sie einfach ein nacktes Repository. Sie können ein vorhandenes Repo mit "git clone --bare --shared [source] [dest]" in ein freigegebenes Repo klonen. Sie können ein neues Repository auch mit "git init --bare --shared = all" initiieren.

Henk

Henk
quelle
3
Ja, Sie können ein freigegebenes Repository auf einem Laufwerk erstellen, aber ich kann NICHT auf dieses Repository zugreifen, es sei denn, ich befinde mich im selben Netzwerk wie das Repository. Das Ziel der Frage ist es, einem Mitarbeiter, der außerhalb des Standorts arbeitet, den Fernzugriff auf ein Repository zu ermöglichen
Jeff Fritz
3
Dies ist keine wirkliche Lösung für die Frage und scheint sowieso eine ziemlich fragwürdige Sache zu sein.
Pat O
4

Haben Sie darüber nachgedacht, die Cygwin-Schicht zu verwenden? Siehe diesen Link .

Clokey
quelle
4

Jetzt unterstützt msysGit den Git-Daemon! Es funktioniert gut (zumindest für mich). Ich werde versuchen, es als Dienst laufen zu lassen ...

Artem
quelle
Unterstützt es sowohl Drücken als auch Ziehen? Weil beim Ausführen von Pushs ein Problem auftritt: code.google.com/p/msysgit/issues/detail?id=457 .
Vadim
Haben Sie dies als Service zum Laufen gebracht? Kennen Sie einen Leitfaden für den Einstieg?
Craig McQueen
4

SCM Manager

  • Leichter http-Server für Git-, Mercurial- und Subversion-Repos aus einer Box (nur Java wird benötigt)
  • Webschnittstelle zur Verwaltung von Benutzern, ACLs, Repos
Fauler Dachs
quelle
2

Unter Windows können Sie Git-Repositorys mit Apache auch über HTTP oder HTTPS mithilfe der DAV-Erweiterung bereitstellen.

Der Git-Repository-Pfad kann dann durch Apache-Authentifizierungsprüfungen geschützt werden, z. B. durch Beschränkung auf bestimmte IP-Adressen oder Authentifizierung vom Typ htpasswd / htdigest.

Die Einschränkung bei der Verwendung der Authentifizierung htpasswd / htdigest besteht darin, dass der Benutzername: password in der angeforderten Git-URL übergeben wird. Daher ist es besser, den Zugriff auf die Git-URL auf bestimmte IP-Adressen zu beschränken.

Bearbeiten: Beachten Sie, dass Sie das Passwort aus der Git-URL herauslassen können und Git Sie stattdessen beim Drücken und Abrufen / Ziehen zur Eingabe des Passworts auffordert.

Die Verwendung von HTTPS bedeutet, dass alle Daten bei der Übertragung verschlüsselt werden.

Es ist einfach einzurichten und funktioniert.

Das folgende Beispiel zeigt die Kombination aus Zugriffskontrolle nach IP-Adresse und Benutzer: Kennwort über Standard-HTTP.

Beispiel Apache Virtualhost

## GIT HTTP DAV ##
<VirtualHost *:80>

  ServerName git.example.com
  DocumentRoot C:\webroot\htdocs\restricted\git
  ErrorLog C:\webroot\apache\logs\error-git-webdav.log

    <Location />
      DAV on
      # Restrict Access
      AuthType Basic
      AuthName "Restricted Area"
      AuthUserFile "C:\webroot\apache\conf\git-htpasswd"
      # To valid user
      Require valid-user
      # AND valid IP address
      Order Deny,Allow
      Deny from all
      # Example IP 1
      Allow from 203.22.56.67 
      # Example IP 2
      Allow from 202.12.33.44 
      # Require both authentication checks to be satisfied
      Satisfy all
    </Location>

</VirtualHost>

Beispiel .git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = http://username:[email protected]/codebase.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
David Thomas
quelle
2

Bei der Arbeit verwende ich GitBlit GO, das auf einem Windows Server installiert ist. Arbeiten Sie einwandfrei und lassen Sie sich für die Benutzerauthentifizierung und -autorisierung gut in ActiveDirectory integrieren. Es ist auch kostenlos und OpenSource (Apache lizenziert)

GitBlit-Homepage

Es wird nur HTTP (S) -Zugriff unterstützt, kein SSH, aber unter Windows sollten Sie nichts mehr benötigen.

Gian Marco
quelle
Sie unterstützen SSL (HTTPS) basierend auf dem Setup-Dokument auf der Site.
Dandré
Ja, HTTP und HTTPS werden unterstützt (ich verwende ausschließlich HTTPS), aber kein SSH. Antwort aktualisiert.
Gian Marco
2

Dies ist eine Antwort von 2015 auf eine Frage, die älter als 7 Jahre ist.

Für eine einmalige Zahlung von 10 US-Dollar kann unter https://bitbucket.org/product/server eine 64-Bit-Windows-Lizenz für bis zu 10 Benutzer erworben werden .

Anscheinend sind 32-Bit-Versionen nur über ihr Archiv verfügbar.

Bitbucket Server war zuvor als Stash bekannt .

Bitte beachten Sie, dass ich diese Version nicht ausprobiert habe, aber 10 US-Dollar scheinen ein gutes Geschäft zu sein. Hier habe ich gelesen, dass Atlassian die 10 Dollar für wohltätige Zwecke gibt. FWIW

gerryLowry
quelle
0

Ich denke, was Henk sagt, ist, dass Sie ein freigegebenes Repository auf einem Laufwerk erstellen und es dann an einen gemeinsamen Speicherort kopieren können, auf den Sie beide Zugriff haben. Wenn es einen Unternehmensserver oder etwas gibt, auf das Sie beide SSH-Zugriff haben, können Sie das Repository an einem Ort ablegen, an dem Sie es wieder auf Ihren eigenen Computer übertragen können, und dann von diesem abrufen. Ich habe das eine Weile für mich getan, da ich zwei Computer habe. Es ist ein Ärger, aber es funktioniert.

Ibrahim
quelle
2
"Keine Ordner freigeben", lautet die ursprüngliche Frage.
Leichtigkeitsrennen im Orbit
0

Für Windows 7 x64 und Cygwin 1.7.9 musste ich / usr / bin / gitd als Argument für cygrunsrv verwenden

cygrunsrv   --install gitd                          \
            --path c:/cygwin/bin/bash.exe           \
            --args /usr/bin/gitd                    \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Außerdem musste ich bash als Administrator ausführen, um den Dienst zu installieren.

disrvptor
quelle