Hosting del repository Git in Windows


108

Esiste attualmente un modo per ospitare un repository Git condiviso in Windows? Capisco che puoi configurare il servizio Git in Linux con:

git daemon

Esiste un'opzione Windows nativa, a parte la condivisione di cartelle, per ospitare un servizio Git?

EDIT: Attualmente sto utilizzando l'installazione cygwin di git per archiviare e lavorare con i repository git in Windows, ma vorrei fare il passo successivo di ospitare un repository con un servizio che può fornire l'accesso ad altri.


35
Il mio attuale datore di lavoro non ha macchine Unix o Linux ... portare un nuovo provider di controllo del codice sorgente e un nuovo sistema operativo allo stesso tempo potrebbe essere un po '... traumatico.
Jeff Fritz

1
Cosa c'è di sbagliato in git-daemon? AFAIK funziona perfettamente su Windows.
Aristotele Pagaltzis

10
L'installazione di Git utilizzando il programma di installazione msysgit standard per Windows non sembra essere installata git daemon. : \
Tim Visher

1
C'è un programma di installazione CopSSH e msysgit in bundle che potresti voler guardare. Utilizza l'autenticazione con chiave pubblica e lo semplifica. Dichiarazione di non responsabilità: sono il webmaster - ho iniziato il progetto dopo aver letto il tutorial di Tim Davis sulla configurazione di un server git sicuro.
Lilith River

3
Per la cronaca: Git per Windows ha incluso una versione funzionante di git daemon dalla versione 1.7.4 (rilasciata a febbraio 2011). Quindi cygwin non è più necessario. Vedi anche stackoverflow.com/q/5186070/291641
patthoyts

Risposte:


75

Ecco alcuni passaggi che puoi seguire per far funzionare il demone git su Windows:

(Prerequisiti: un'installazione Cygwin predefinita e un client git che supporti il ​​demone git)

Passaggio 1 : apri una shell bash

Passaggio 2 : nella directory / cygdrive / c / cygwin64 / usr / local / bin /, creare un file denominato "gitd" con il seguente contenuto:

#!/bin/bash

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

Passaggio 3 : eseguire il seguente comando cygrunsrv da un prompt con privilegi elevati (ovvero come amministratore) per installare lo script come servizio (Nota: si presume che Cygwin sia installato in C: \ cygwin64):

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

Passaggio 4 : eseguire il comando seguente per avviare il servizio:

cygrunsrv --start gitd

Hai fatto. Se vuoi testarlo, ecco uno script veloce e sporco che mostra che puoi inviare il protocollo git alla tua macchina 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

2
Se potessi modificare questo post, aggiungerei quanto segue: Prerequisiti: cygwin con i pacchetti git e cygrunsrv installati.
Mario

2
Un'altra nota: qualifica completamente il percorso di git all'interno dello script della shell gitd. Su una delle mie macchine veniva avviato MSYSGit invece di cygwin-git durante l'esecuzione come processo Windows. MSYSGit non supporta la modalità daemon, quindi l'avvio del servizio non è riuscito.
Mario

26
Non ho mai considerato le soluzioni Cygwin come "funzionanti in Windows". È come dire "eseguire Linux in una VM funziona in Windows". Ma questa è solo la mia opinione puristica;)
Rook

3
nota rapida: / usr / bin non ha funzionato per me ma l'inserimento in / bin ha funzionato (e utilizzando c: / cygwin / bin / gitd nel cygrunsrv). Non sono sicuro di quanti anni abbia la mia installazione di cygwin ma sembra che / usr / bin sia un collegamento a cosa c'è in / bin di cui Windows non saprà ... Anche un po 'ovvio, ma ricorda di creare la cartella / git in c: / cygwin /
armyofda12mnkeys

3
@Rook - Al contrario, la suite di strumenti Cygwin non è diversa da qualsiasi altra applicazione di terze parti che potresti installare. Cygwin non è una macchina virtuale, ma una suite di strumenti preconfezionata. È solo un insieme di eseguibili e DLL di Windows come qualsiasi altra cosa sulla tua macchina.
Derek Greer

16

GitStack potrebbe essere la tua scelta migliore. Attualmente è gratuito (per un massimo di 2 utenti) e open source al momento della scrittura.


2
Sembra che fosse limitato ai progetti open source o degli studenti: "GitStack è gratuito per i progetti open source e degli studenti!"
Cancelliere

12

Ecco un server git dedicato per Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


Qual è lo stato del server Bonobo? È completamente funzionante? Non posso dirlo dai documenti, ma sembra molto convincente.
Jeff Fritz

1
@ JeffFritz: ho appena smesso di usarlo. La cosa dannatamente non aggiorna lo stato del repository ( git update-server-info) dopo il push HTTP e questa logica non è implementata dalla loro libreria Git (GitSharp). Dubito che raggiungerà presto un vero stato di funzionamento.
André Caron

Inoltre, non funziona con Teamcity (che è il motivo principale per cui non lo uso) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg,

3
Felice utente Bonobo qui. Credo che sia le preoccupazioni di Andre che quelle di Piers dovrebbero essere risolte ora. Quel problema di TeamCity è stato contrassegnato come chiuso e non ho riscontrato alcun problema con l'utilizzo di un repository centralizzato centralizzato.
Quinn Bailey

9

Se lavori in un ambiente Windows, hai considerato Mercurial ? È un sistema di controllo della versione distribuito come Git, ma si integra in modo molto più ordinato e semplice con Windows.


9
È vero che è molto più facile usare Mercurial su macchine Windows, almeno per quanto riguarda la possibilità di sincronizzare i repository. Non è una risposta particolarmente utile se devi effettivamente usare Git!
Frank Shearar

Anche Bazaar funziona in modo nativo su Windows; ha anche un supporto commerciale.
hasen


7

Se ricevi l'errore cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.dopo aver eseguito il comando:

cygrunsrv --start gitd

ciò significa che non hai creato la cartella "percorso di base".

La creazione della cartella "/ git" e il riesecuzione del comando risolveranno il problema.


Puoi anche ricevere questo errore se le tue /gitautorizzazioni NTFS non consentono l'accesso in lettura / scrittura all'account di servizio (SYSTEM).
spoulson

5

Attualmente sto utilizzando il demone ssh di cygwin su Windows per servire e consentire l'accesso remoto al mio repository. Funziona abbastanza bene, ho il controllo completo su chi accede al mio repository tramite i loro certificati ssh e le prestazioni sono eccezionali, anche su collegamenti WAN e VPN remoti.

Un'altra soluzione è usare Gitosis . È uno strumento che semplifica notevolmente l'hosting dei repository.


Come hai fatto a far funzionare il demone git con cygwin? Ho la configurazione del demone ssh e sto provando ad accedere alla mia macchina tramite ssh, ma ogni volta che provo a eseguire il demone git si blocca.
Thiru

Come hai fatto a far funzionare gitosis su Windows perché c'è un bug: github.com/res0nat0r/gitosis/issues#issue/1
dalore

4

Non è necessario ospitare un servizio, è inoltre possibile creare un repository condiviso su un Drive condiviso. Basta creare un semplice repository. Puoi clonare un repository esistente in uno condiviso usando: "git clone --bare --shared [source] [dest]". Puoi anche avviare un nuovo repository usando "git init --bare --shared = all".

Henk


3
Sì, puoi creare un repository condiviso su un'unità, ma NON sarò in grado di accedere a tale repository a meno che non sia sulla stessa rete del repository. L'obiettivo della domanda è consentire l'accesso remoto a un repository per un collega che lavora fuori sede
Jeff Fritz

3
Questa non è davvero una soluzione alla domanda e sembra comunque una cosa piuttosto discutibile da fare.
Pat O



4

SCM Manager

  • Server http leggero per repository Git, Mercurial, Subversion da una scatola (è necessario solo Java)
  • Interfaccia web per la gestione di utenti, ACL, repository

2

Su Windows, puoi anche servire i repository Git con Apache su HTTP o HTTPS, utilizzando l'estensione DAV.

Il percorso del repository Git può quindi essere protetto con controlli di autenticazione Apache come la limitazione a determinati indirizzi IP o l'autenticazione di tipo htpasswd / htdigest.

La limitazione dell'utilizzo dell'autenticazione htpasswd / htdigest è che il nome utente: password viene passato nell'URL Git richiesto, quindi è meglio limitare l'accesso all'URL Git a determinati indirizzi IP.

Modifica: Nota, puoi lasciare la password fuori dall'URL di Git e Git ti chiederà la password su push e fetch / pull invece.

L'uso di HTTPS significa che tutti i dati vengono crittografati durante il trasferimento.

È abbastanza facile da configurare e funziona.

L'esempio seguente mostra la combinazione di controllo dell'accesso tramite indirizzo IP e utente: password su HTTP standard.

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

Esempio .git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = http://username:password@git.example.com/codebase.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

2

Al lavoro sto utilizzando GitBlit GO installato su un server Windows. Funziona perfettamente e si integra bene con ActiveDirectory per l'autenticazione e l'autorizzazione dell'utente. È anche gratuito e opensource (con licenza Apache)

Homepage di GitBlit

È supportato solo l'accesso HTTP (S), nessun SSH, ma sotto Windows non dovresti aver bisogno di altro.


Hanno il supporto SSL (HTTPS) in base al documento di installazione sul sito.
Dandré

Sì, HTTP e HTTPS sono supportati (utilizzo esclusivamente HTTPS) ma non SSH. Risposta aggiornata.
Gian Marco

2

questa è una risposta del 2015 a una domanda che ha più di 7 anni.

Per $ 10 un pagamento una tantum, da https://bitbucket.org/product/server , è possibile acquistare una licenza Windows a 64 bit per un massimo di 10 utenti .

Apparentemente le versioni a 32 bit sono disponibili solo tramite il loro archivio.

Bitbucket Server era precedentemente noto come Stash .

Si prega di notare che non ho provato questa versione ma $ 10 mi sembra un buon affare; qui ho letto che Atlassian dona i $ 10 in beneficenza. FWIW


0

Penso che quello che dice Henk sia che puoi creare un repository condiviso su un'unità e poi copiarlo in una posizione comune a cui entrambi avete accesso. Se c'è qualche server aziendale o qualcosa a cui entrambi avete accesso ssh, puoi mettere il repository da qualche parte dove puoi SCP di nuovo sul tuo computer, e poi tirare da quello. L'ho fatto per me stesso per un po ', dato che ho due computer. È una seccatura, ma funziona.


2
"a corto di cartelle di condivisione", dice la domanda originale.
Gare di leggerezza in orbita

0

Per Windows 7 x64 e Cygwin 1.7.9 avevo bisogno di usare / usr / bin / gitd come argomento args di cygrunsrv

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

Inoltre, avevo bisogno di eseguire bash come amministratore per installare il servizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.