Hébergement du référentiel Git sous Windows

108

Existe-t-il actuellement un moyen d'héberger un référentiel Git partagé dans Windows? Je comprends que vous pouvez configurer le service Git sous Linux avec:

git daemon

Existe-t-il une option Windows native, à court de partage de dossiers, pour héberger un service Git?

EDIT: J'utilise actuellement l'installation cygwin de git pour stocker et travailler avec des référentiels git dans Windows, mais je voudrais passer à l'étape suivante consistant à héberger un référentiel avec un service qui peut donner accès à d'autres.

Jeff Fritz
la source
35
Mon employeur actuel n'a pas de machines Unix ou Linux ... introduire un nouveau fournisseur de contrôle de source et un nouveau système d'exploitation en même temps peut être un peu ... traumatisant.
Jeff Fritz
1
Quel est le problème avec git-daemon? AFAIK cela fonctionne très bien sur Windows.
Aristotle Pagaltzis
10
L'installation de Git à l'aide du programme d'installation standard de msysgit pour Windows ne semble pas s'installer git daemon. : \
Tim Visher
1
Il existe un programme d'installation CopSSH et msysgit fourni que vous voudrez peut-être consulter. Il utilise l'authentification par clé publique et facilite les choses. Clause de non-responsabilité: je suis le webmaster - j'ai commencé le projet après avoir lu le tutoriel de Tim Davis sur la configuration d'un serveur git sécurisé.
Lilith River
3
Pour mémoire: Git pour Windows a inclus une version fonctionnelle de git daemon depuis la version 1.7.4 (publiée en février 2011). Donc, cygwin n'est plus nécessaire. Voir aussi stackoverflow.com/q/5186070/291641
patthoyts

Réponses:

75

Voici quelques étapes que vous pouvez suivre pour faire fonctionner le démon git sous Windows:

(Prérequis: une installation Cygwin par défaut et un client git prenant en charge le démon git)

Étape 1 : Ouvrez un shell bash

Étape 2 : Dans le répertoire / cygdrive / c / cygwin64 / usr / local / bin /, créez un fichier nommé "gitd" avec le contenu suivant:

#!/bin/bash

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

Étape 3 : Exécutez la commande cygrunsrv suivante à partir d'une invite élevée (c'est-à-dire en tant qu'administrateur) pour installer le script en tant que service (Remarque: suppose que Cygwin est installé sur C: \ cygwin64):

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

Étape 4 : exécutez la commande suivante pour démarrer le service:

cygrunsrv --démarrez gitd

Vous avez terminé. Si vous voulez le tester, voici un script rapide et sale qui montre que vous pouvez pousser le protocole git sur votre machine locale:

#!/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
la source
2
Si je pouvais éditer cet article, j'ajouterais ce qui suit: Prérequis: cygwin avec les packages git et cygrunsrv installés.
Mario
2
Autre note: qualifiez complètement le chemin vers git à l'intérieur du script shell gitd. Sur l'une de mes machines, MSYSGit était démarré au lieu de cygwin-git lors de l'exécution en tant que processus Windows. MSYSGit ne prend pas en charge le mode démon, le service n'a donc pas pu démarrer.
Mario
26
Je n'ai jamais considéré les solutions Cygwin comme «fonctionnant sous Windows». C'est comme dire "exécuter Linux dans une VM fonctionne sous Windows". Mais ce n'est que mon opinion puriste;)
Rook
3
note rapide: / usr / bin n'a pas fonctionné pour moi mais placer dans / bin a fonctionné (et utiliser c: / cygwin / bin / gitd dans le cygrunsrv). Je ne sais pas quel âge a mon installation cygwin mais ressemble à / usr / bin est un lien vers ce qui se trouve dans / bin dont Windows ne saura rien ... Aussi un peu évident, mais n'oubliez pas de créer le dossier / git dans c: / cygwin /
armyofda12mnkeys
3
@Rook - Au contraire, la suite d'outils Cygwin n'est pas différente de toutes les autres applications tierces que vous pourriez installer. Cygwin n'est pas une machine virtuelle, mais une suite d'outils pré-emballés. C'est juste un ensemble d'exécutables et de DLL Windows comme tout le reste sur votre machine.
Derek Greer
16

GitStack pourrait être votre meilleur choix. Il est actuellement gratuit (jusqu'à 2 utilisateurs) et open source au moment de la rédaction.

poiuytrez
la source
2
On dirait que cela a été limité aux projets open source ou étudiants: "GitStack est gratuit pour les projets open source et étudiants!"
ccellar
12

Voici un serveur git dédié pour Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki

Daniel O
la source
Quel est l'état du serveur Bonobo? Est-il entièrement fonctionnel? Je ne peux pas le dire d'après les documents, mais cela semble très convaincant.
Jeff Fritz
1
@JeffFritz: vient d'arrêter de l'utiliser. Le truc ne met pas à jour l'état du référentiel ( git update-server-info) après le push HTTP, et cette logique n'est pas implémentée par leur bibliothèque Git (GitSharp). Je doute qu'il atteigne bientôt un état de fonctionnement réel.
André Caron
De plus, ne fonctionne pas avec Teamcity (ce qui est la raison principale pour laquelle je ne l'utilise pas) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg
3
Heureux utilisateur de Bonobo ici. Je crois que les préoccupations d'André et de Piers devraient être résolues maintenant. Ce problème TeamCity a été marqué comme clos et je n'ai rencontré aucun problème avec l'utilisation d'un référentiel centralisé centralisé.
Quinn Bailey
9

Si vous travaillez dans un environnement Windows, avez-vous envisagé Mercurial ? C'est un système de contrôle de version distribué comme Git, mais qui s'intègre beaucoup plus proprement et facilement avec Windows.

David Arno
la source
9
Il est vrai qu'il est beaucoup plus facile d'utiliser Mercurial sur les machines Windows, du moins en ce qui concerne la synchronisation des référentiels. Pas une réponse très utile si vous devez réellement utiliser Git!
Frank Shearar
Aussi Bazaar fonctionne nativement sur Windows; il bénéficie même d'un soutien commercial.
hasen
7

Si vous obtenez l'erreur cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.après avoir exécuté la commande:

cygrunsrv --start gitd

cela signifie que vous n'avez pas créé le dossier 'base-path'.

La création du dossier '/ git' et la réexécution de la commande résoudront ce problème.

Isaac
la source
Vous pouvez également obtenir cette erreur si vos /gitautorisations NTFS n'autorisent pas l'accès en lecture / écriture du compte de service (SYSTEM).
spoulson
5

J'utilise actuellement le démon ssh de cygwin sur Windows pour servir et autoriser l'accès à distance à mon dépôt. Cela fonctionne assez bien, j'ai un contrôle complet sur qui accède à mon dépôt par leurs certificats ssh, et les performances flambent, même sur les liaisons WAN et VPN distantes.

Une autre solution consiste à utiliser Gitosis . C'est un outil qui facilite grandement les dépôts d'hébergement.

Matthew McCullough
la source
Comment avez-vous fait fonctionner le démon git avec cygwin? J'ai la configuration du démon ssh et j'ai testé la connexion à ma machine via ssh, mais chaque fois que j'essaye d'exécuter le démon git, il se bloque.
Jeudi
Comment avez-vous fait fonctionner gitosis sur Windows car il y a un bogue: github.com/res0nat0r/gitosis/issues#issue/1
dalore
4

Vous n'avez pas besoin d'héberger un service, vous pouvez également créer un référentiel partagé sur un lecteur partagé. Créez simplement un référentiel nu. Vous pouvez cloner un dépôt existant dans un référentiel partagé en utilisant: "git clone --bare --shared [source] [dest]". Vous pouvez également lancer un nouveau dépôt en utilisant "git init --bare --shared = all".

Henk

Henk
la source
3
Oui, vous pouvez créer un référentiel partagé sur un lecteur, mais je ne pourrai PAS accéder à ce référentiel sauf si je suis sur le même réseau que le référentiel. Le but de la question est de permettre l'accès à distance à un référentiel pour un collègue qui travaille hors site
Jeff Fritz
3
Ce n'est pas vraiment une solution à la question et semble être une chose assez discutable à faire de toute façon.
Pat O
4

Avez-vous envisagé d'utiliser la couche cygwin? Voir ce lien .

Clokey
la source
4

Maintenant msysGit prend en charge le démon git! Cela fonctionne bien (pour moi du moins). Je vais essayer de le faire fonctionner en tant que service ...

Artem
la source
prend-il en charge à la fois pousser et tirer? Parce qu'il y a un problème code.google.com/p/msysgit/issues/detail?id=457 lors de l' envoi .
Vadim le
Alors avez-vous cela fonctionne comme un service? Connaissez-vous un guide de démarrage?
Craig McQueen
4

Gestionnaire SCM

  • Serveur http léger pour les dépôts Git, Mercurial, Subversion à partir d'une boîte (seul Java est nécessaire)
  • Interface Web pour la gestion des utilisateurs, des ACL, des dépôts
Blaireau paresseux
la source
2

Sous Windows, vous pouvez également servir des référentiels Git avec Apache sur HTTP ou HTTPS, à l'aide de l'extension DAV.

Le chemin du référentiel Git peut ensuite être protégé par des contrôles d'authentification Apache tels que la restriction à certaines adresses IP ou l'authentification de type htpasswd / htdigest.

La limitation de l'utilisation de l'authentification htpasswd / htdigest est que le nom d'utilisateur: mot de passe est passé dans l'URL Git demandée, il est donc préférable de restreindre l'accès à l'URL Git à certaines adresses IP.

Modifier: Notez que vous pouvez laisser le mot de passe en dehors de l'URL Git et Git vous demandera le mot de passe lors du push et de la récupération / extraction à la place.

L'utilisation de HTTPS signifie que toutes les données sont cryptées lors du transfert.

Il est assez facile à installer et fonctionne.

L'exemple suivant montre la combinaison du contrôle d'accès par adresse IP et utilisateur: mot de passe sur HTTP standard.

Exemple 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>

Exemple .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
la source
2

Au travail, j'utilise GitBlit GO installé sur un serveur Windows. Travaillez parfaitement et intégrez bien avec ActiveDirectory pour l'authentification et l'autorisation des utilisateurs. Il est également gratuit et open source (sous licence Apache)

Page d'accueil de GitBlit

Seul l'accès HTTP (S) est pris en charge, pas de SSH, mais sous Windows, vous ne devriez plus avoir besoin de rien.

Gian Marco
la source
Ils ont un support SSL (HTTPS) basé sur le document d'installation sur le site.
Dandré
Oui, HTTP et HTTPS sont pris en charge (j'utilise exclusivement HTTPS) mais pas de SSH. Réponse mise à jour.
Gian Marco
2

c'est une réponse de 2015 à une question de plus de 7 ans.

Pour un paiement unique de 10 $, sur https://bitbucket.org/product/server , on peut acheter une licence Windows 64 bits pour un maximum de 10 utilisateurs .

Apparemment, les versions 32 bits ne sont disponibles que via leur archive.

Bitbucket Server était auparavant connu sous le nom de Stash .

Veuillez noter que je n'ai pas essayé cette version mais 10 $ me semblent une bonne affaire; ici, j'ai lu qu'Atlassian donne les 10 $ à une association caritative. FWIW

gerryLowry
la source
0

Je pense que ce que dit Henk, c'est que vous pouvez créer un référentiel partagé sur un lecteur, puis le copier dans un emplacement commun auquel vous avez tous les deux accès. S'il y a un serveur d'entreprise ou quelque chose auquel vous avez tous les deux accès ssh, vous pouvez placer le référentiel quelque part où vous pouvez le SCP de nouveau sur votre propre ordinateur, puis en extraire. J'ai fait ça pour moi pendant un petit moment, puisque j'ai deux ordinateurs. C'est un problème, mais cela fonctionne.

Ibrahim
la source
2
"à court de dossiers de partage", dit la question initiale.
Courses de légèreté en orbite le
0

Pour Windows 7 x64 et Cygwin 1.7.9, j'avais besoin d'utiliser / usr / bin / gitd comme argument args de cygrunsrv

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

De plus, j'avais besoin d'exécuter bash en tant qu'administrateur pour installer le service.

perturbateur
la source