Hostowanie repozytorium Git w systemie Windows


108

Czy obecnie istnieje sposób hostowania współdzielonego repozytorium Git w systemie Windows? Rozumiem, że możesz skonfigurować usługę Git w systemie Linux za pomocą:

git daemon

Czy istnieje natywna opcja systemu Windows, bez udostępniania folderów, do hostowania usługi Git?

EDYCJA: Obecnie używam instalacji cygwin git do przechowywania i pracy z repozytoriami git w systemie Windows, ale chciałbym zrobić kolejny krok polegający na hostowaniu repozytorium za pomocą usługi, która może zapewnić dostęp innym.


35
Mój obecny pracodawca nie ma maszyn z systemem Unix ani Linux ... wprowadzenie nowego dostawcy kontroli źródła i systemu operacyjnego w tym samym czasie może być trochę ... traumatyczne.
Jeff Fritz

1
Co jest nie tak z git-daemon? AFAIK to działa dobrze w systemie Windows.
Arystoteles Pagaltzis

10
Instalacja Gita przy użyciu standardowego instalatora msysgit dla systemu Windows nie wydaje się instalować git daemon. : \
Tim Visher

1
Jest dołączony instalator CopSSH i msysgit , któremu warto się przyjrzeć. Używa uwierzytelniania za pomocą klucza publicznego i ułatwia to. Zastrzeżenie: Jestem webmasterem - projekt rozpocząłem po przeczytaniu samouczka Tima Davisa na temat konfigurowania bezpiecznego serwera git.
Lilith River

3
Dla przypomnienia: Git dla Windows zawiera działającą wersję demona git od wersji 1.7.4 (wydanej w lutym 2011). Więc cygwin nie jest już potrzebny. Zobacz także stackoverflow.com/q/5186070/291641
patthoyts

Odpowiedzi:


75

Oto kilka kroków, które możesz wykonać, aby uruchomić demona git w systemie Windows:

(Wymagania wstępne: domyślna instalacja Cygwin i klient git obsługujący demona git)

Krok 1 : Otwórz powłokę bash

Krok 2 : W katalogu / cygdrive / c / cygwin64 / usr / local / bin / utwórz plik o nazwie „gitd” z następującą zawartością:

#!/bin/bash

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

Krok 3 : Uruchom następujące polecenie cygrunsrv z poziomu zachęty (np. Jako administrator), aby zainstalować skrypt jako usługę (uwaga: zakłada się, że Cygwin jest zainstalowany w C: \ cygwin64):

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

Krok 4 : Uruchom następujące polecenie, aby uruchomić usługę:

cygrunsrv --start gitd

Skończyłeś. Jeśli chcesz to przetestować, oto szybki i brudny skrypt, który pokazuje, że możesz przekazać protokół git na swoją maszynę lokalną:

#!/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
Gdybym mógł edytować ten post, dodałbym: Wymagania wstępne: cygwin z zainstalowanymi pakietami git i cygrunsrv.
Mario

2
Kolejna uwaga: w pełni kwalifikuj ścieżkę do git wewnątrz skryptu powłoki gitd. Na jednym z moich komputerów uruchamiano MSYSGit zamiast cygwin-git podczas wykonywania jako proces Windows. MSYSGit nie obsługuje trybu demona, więc uruchomienie usługi nie powiodło się.
Mario

26
Nigdy nie uważałem rozwiązań Cygwin za „pracę w systemie Windows”. To tak, jakby powiedzieć „uruchomienie Linuksa na maszynie wirtualnej działa w Windows”. Ale to tylko moja purystyczna opinia;)
Rook

3
szybka uwaga: / usr / bin nie działało dla mnie, ale umieszczenie w / bin działało (i użycie c: / cygwin / bin / gitd w cygrunsrv). Nie jestem pewien, ile lat ma moja instalacja cygwin, ale wygląda na to, że / usr / bin jest linkiem do tego, co jest w / bin, o którym Windows nie będzie wiedział ... Również trochę oczywiste, ale pamiętaj, aby utworzyć folder / git w c: / cygwin /
armyofda12mnkeys

3
@Rook - Wręcz przeciwnie, zestaw narzędzi Cygwin nie różni się od innych aplikacji innych firm, które możesz zainstalować. Cygwin nie jest maszyną wirtualną, ale wstępnie spakowanym zestawem narzędzi. To tylko zestaw plików wykonywalnych i bibliotek DLL systemu Windows, jak wszystko inne na Twoim komputerze.
Derek Greer

16

GitStack może być najlepszym wyborem. Obecnie jest darmowy (dla maksymalnie 2 użytkowników) i open source w momencie pisania.


2
Wygląda na to, że było to ograniczone do projektów open source lub studenckich: „GitStack jest bezpłatny dla projektów open source i studenckich!”
ccellar

12

Oto dedykowany serwer git dla systemu Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


Jaki jest stan serwera Bonobo? Czy jest w pełni funkcjonalny? Nie mogę powiedzieć na podstawie dokumentów, ale wygląda to bardzo przekonująco.
Jeff Fritz,

1
@JeffFritz: po prostu przestałem go używać. Ta rzecz nie aktualizuje stanu repozytorium ( git update-server-info) po wypychaniu HTTP, a ta logika nie jest implementowana przez ich bibliotekę Git (GitSharp). Wątpię, czy w najbliższym czasie osiągnie prawdziwy stan roboczy.
André Caron

Również nie działa z Teamcity (co jest głównym powodem, dla którego go nie używam) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg

3
Szczęśliwy użytkownik Bonobo tutaj. Uważam, że obawy Andre i Piersa powinny zostać rozwiązane teraz. Ten problem TeamCity został oznaczony jako zamknięty i nie miałem żadnych problemów z korzystaniem z centralnego, scentralizowanego repozytorium.
Quinn Bailey

9

Jeśli pracujesz w środowisku Windows, czy rozważałeś Mercurial ? Jest to rozproszony system kontroli wersji, taki jak Git, ale integruje się o wiele lepiej i łatwiej z systemem Windows.


9
To prawda, że ​​korzystanie z Mercurial na komputerach z systemem Windows jest znacznie łatwiejsze, przynajmniej jeśli chodzi o możliwość synchronizowania repozytoriów. Nie jest to jednak zbyt przydatna odpowiedź, jeśli faktycznie musisz używać Git!
Frank Shearar

Bazaar działa również natywnie w oknach; ma nawet wsparcie komercyjne.
hasen


7

Jeśli pojawi się błąd cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.po uruchomieniu polecenia:

cygrunsrv --start gitd

oznacza to, że nie utworzyłeś folderu „ścieżka-podstawowa”.

Utworzenie folderu „/ git” i ponowne uruchomienie polecenia naprawi ten problem.


Możesz również otrzymać ten błąd, jeśli Twoje /gituprawnienia NTFS nie zezwalają kontu usługi (SYSTEM) na dostęp do odczytu / zapisu.
spoulson

5

Obecnie używam demona ssh firmy Cygwin w systemie Windows do obsługi i zezwalania na zdalny dostęp do mojego repozytorium. Działa całkiem dobrze, mam pełną kontrolę nad tym, kto uzyskuje dostęp do mojego repozytorium za pomocą ich certyfikatów ssh, a wydajność spada, nawet w przypadku zdalnych łączy WAN i VPN.

Innym rozwiązaniem jest użycie Gitosis . Jest to narzędzie, które znacznie ułatwia hosting repozytoriów.


Jak sprawiłeś, że demon git współpracuje z cygwin? Mam skonfigurowanego demona ssh i testowałem logowanie do mojej maszyny przez ssh, ale za każdym razem, gdy próbuję uruchomić demona git, po prostu się zawiesza.
czwartek

Jak doszło do gitozy działającej w systemie Windows, ponieważ jest błąd: github.com/res0nat0r/gitosis/issues#issue/1
dalore

4

Nie musisz hostować usługi, możesz także utworzyć udostępnione repozytorium na dysku współdzielonym. Po prostu utwórz gołe repozytorium. Możesz sklonować istniejące repozytorium do udostępnionego za pomocą: "git clone --bare --shared [źródło] [dest]". Możesz także zainicjować nowe repozytorium za pomocą "git init --bare --shared = all".

Henk


3
Tak, możesz utworzyć współdzielone repozytorium na dysku, ale NIE będę mógł uzyskać dostępu do tego repozytorium, chyba że będę w tej samej sieci co repozytorium. Celem pytania jest umożliwienie zdalnego dostępu do repozytorium współpracownikowi, który pracuje poza biurem
Jeff Fritz

3
To nie jest tak naprawdę rozwiązanie tego pytania i wydaje się, że i tak jest to dość wątpliwa rzecz.
Pat O



4

Menedżer SCM

  • Lekki serwer http dla repozytoriów Git, Mercurial, Subversion z pudełka (wymagana jest tylko Java)
  • Interfejs sieciowy do zarządzania użytkownikami, listami ACL, repozytoriami

2

W systemie Windows możesz również obsługiwać repozytoria Git z Apache przez HTTP lub HTTPS, używając rozszerzenia DAV.

Ścieżkę repozytorium Git można następnie zabezpieczyć za pomocą testów uwierzytelniania Apache, takich jak ograniczenie do określonych adresów IP lub uwierzytelnianie typu htpasswd / htdigest.

Ograniczeniem korzystania z uwierzytelniania htpasswd / htdigest jest to, że nazwa użytkownika: hasło jest przekazywana w żądanym adresie URL Git, więc ograniczenie dostępu do adresu URL Git do określonych adresów IP jest lepsze.

Edytować: Uwaga, możesz pozostawić hasło poza adresem URL Git, a Git poprosi Cię o hasło podczas wypychania i pobierania / ściągania.

Korzystanie z protokołu HTTPS oznacza, że ​​wszystkie dane są szyfrowane podczas przesyłania.

Jest dość łatwy w konfiguracji i działa.

Poniższy przykład przedstawia kombinację kontroli dostępu według adresu IP i użytkownika: hasło za pośrednictwem standardowego protokołu HTTP.

Przykład 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>

Przykład .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

W pracy używam GitBlit GO zainstalowanego na serwerze Windows. Pracuj bezbłędnie i dobrze integruj się z ActiveDirectory w celu uwierzytelniania i autoryzacji użytkowników. Jest również darmowy i open source (licencja Apache)

Strona główna GitBlit

Obsługiwany jest tylko dostęp przez HTTP (S), bez SSH, ale w systemie Windows nie potrzebujesz niczego więcej.


Mają obsługę SSL (HTTPS) w oparciu o dokument konfiguracyjny w witrynie.
Dandré

Tak, obsługiwane są protokoły HTTP i HTTPS (używam wyłącznie HTTPS), ale nie ma protokołu SSH. Odpowiedź zaktualizowana.
Gian Marco

2

to jest odpowiedź z 2015 roku na pytanie, które ma ponad 7 lat.

Za jednorazową opłatą w wysokości 10 USD, na stronie https://bitbucket.org/product/server , można kupić 64-bitową licencję Windows dla maksymalnie 10 użytkowników .

Najwyraźniej wersje 32-bitowe są dostępne tylko za pośrednictwem ich archiwum.

Bitbucket Server był wcześniej znany jako Stash .

Należy pamiętać, że nie próbowałem tej wersji, ale 10 $ wydaje się dobrą okazją; tutaj przeczytałem, że Atlassian przekazuje 10 dolarów na cele charytatywne. FWIW


0

Myślę, że Henk mówi, że możesz utworzyć współdzielone repozytorium na dysku, a następnie skopiować je do jakiejś wspólnej lokalizacji, do której oboje macie dostęp. Jeśli istnieje serwer firmowy lub coś, do czego oboje macie dostęp ssh, możesz umieścić repozytorium w miejscu, w którym możesz SCP je z powrotem na swoim komputerze, a następnie wyciągnąć z niego. Zrobiłem to trochę dla siebie, ponieważ mam dwa komputery. To kłopotliwe, ale działa.


2
„bez udostępniania folderów”, brzmi pierwotne pytanie.
Wyścigi lekkości na orbicie

0

W przypadku Windows 7 x64 i Cygwin 1.7.9 musiałem użyć / usr / bin / gitd jako argumentu args w cygrunsrv

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

Musiałem również uruchomić bash jako administrator, aby zainstalować usługę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.