web-dev-qa-db-fra.com

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

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, hormis le partage de dossiers, pour héberger un service Git?

EDIT: J'utilise actuellement l'installation cygwin de git pour stocker et utiliser des référentiels git sous Windows, mais j'aimerais passer à l'étape suivante consistant à héberger un référentiel avec un service pouvant fournir un accès à d'autres.

107
Jeff Fritz

Voici quelques étapes à suivre pour que le démon git s'exécute 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: Exécutez la commande cygrunsrv suivante à partir d'une invite élevée (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 --start gitd

Vous avez terminé. Si vous voulez le tester, voici un script rapide et sale qui montre que vous pouvez transférer le protocole git vers 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
74
Derek Greer

GitStack pourrait être votre meilleur choix. Il est actuellement gratuit (pour 2 utilisateurs maximum) et open source au moment de l'écriture.

16
poiuytrez

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

12
Daniel O

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 il s'intègre beaucoup plus facilement et plus facilement avec Windows.

9
David Arno

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.

7
isaac

Installer CygWin est une overkill, lisez ce tutoriel sur la façon de le faire plus rapidement et en natif:

http://code.google.com/p/tortoisegit/wiki/HOWTO_CentralServerWindowsXP

7
Alex Burtsev

J'utilise actuellement le démon ssh de cygwin sous Windows pour servir et autoriser l'accès à distance à mon référentiel. Cela fonctionne assez bien, je contrôle totalement qui accède à mon dépôt avec leurs certificats ssh et les performances en flammes, même sur des liaisons distantes WAN et VPN.

ne autre solution consiste à utiliser Gitosis . C'est un outil qui facilite beaucoup l'hébergement des pensions.

5
Matthew McCullough

Gestionnaire SCM

  • Serveur http léger pour les pensions Git, Mercurial et Subversion depuis une boîte (seulement Java est nécessaire)
  • Interface Web pour la gestion des utilisateurs, ACL, repos
4
Lazy Badger

MsysGit prend maintenant en charge le démon git! Cela fonctionne bien (du moins pour moi). Je vais essayer de le faire fonctionner comme un service ...

4
Artem

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

Henk

4
Henk

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

4
Clokey

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

Pour un paiement unique de 10 $, à partir de https://bitbucket.org/product/server , vous pouvez acheter une licence Windows 64 bits pour un maximum de 10 utilisateurs .

Apparemment, les versions 32 bits ne sont disponibles que via leurs archives.

Bitbucket Server s'appelait auparavant Stash .

S'il vous plaît noter que je n'ai pas essayé cette version mais $ 10 semble être une bonne affaire; ici J'ai lu qu'Atlassian donnait 10 $ à une organisation caritative. FWIW

2
gerryLowry

Sous Windows, vous pouvez également servir les référentiels Git avec Apache via HTTP ou HTTPS, en utilisant l’extension DAV.

Le chemin du référentiel Git peut ensuite être protégé avec des vérifications d'authentification Apache, telles que la restriction à certaines adresses IP ou l'authentification de type htpasswd/htdigest.

L'utilisation de l'authentification htpasswd/htdigest est limitée par le fait que le nom d'utilisateur: mot de passe est transmis dans l'URL Git demandée. Il est donc préférable de limiter l'accès à l'URL Git à certaines adresses IP.

Edit: Remarque, vous pouvez laisser le mot de passe en dehors de l'URL Git et Git vous demandera le mot de passe pour Push et chercher/extraire à la place.

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

C'est assez facile à installer et ça marche.

L'exemple suivant illustre la combinaison du contrôle d'accès par adresse IP et utilisateur: mot de passe via 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
2
David Thomas

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

page d'accueil GitBlit

Seul l’accès HTTP (S) est pris en charge, pas de SSH, mais sous Windows, vous n’auriez besoin de rien de plus.

2

Je pense que ce que Henk dit, 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 de l'entreprise ou quelque chose auquel vous avez tous les deux accès ssh, vous pouvez placer le référentiel dans un endroit où vous pouvez le SCP le retourner sur votre propre ordinateur, puis en tirer un extrait. Je l'ai fait moi-même depuis un moment, car j'ai deux ordinateurs. C'est un problème, mais ça fonctionne.

0
Ibrahim

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

En outre, je devais exécuter bash en tant qu'administrateur pour installer le service.

0
disrvptor