Windows'ta Git Deposu Barındırma


108

Şu anda Windows'ta paylaşılan bir Git deposunu barındırmanın bir yolu var mı? Git hizmetini Linux'ta şu şekilde yapılandırabileceğinizi anlıyorum:

git daemon

Bir Git hizmetini barındırmak için klasör paylaşma dışında bir yerel Windows seçeneği var mı?

DÜZENLEME: Şu anda git'in cygwin kurulumunu Windows'ta git depolarını depolamak ve bunlarla çalışmak için kullanıyorum, ancak başkalarına erişim sağlayabilen bir hizmetle bir havuz barındırmanın bir sonraki adımını atmak istiyorum.


35
Şu anki işverenimde herhangi bir Unix veya Linux makinesi yok ... aynı anda yeni bir Kaynak Kontrol sağlayıcısı ve işletim sistemi getirmek biraz ... travmatik olabilir.
Jeff Fritz

1
Git-daemon'un nesi var? AFAIK, Windows'ta gayet iyi çalışıyor.
Aristotle Pagaltzis

10
Git'i Windows için standart msysgit yükleyiciyi kullanarak yüklemek yüklenmiyor gibi görünüyor git daemon. : \
Tim Visher

1
Bakmak isteyebileceğiniz paketlenmiş bir CopSSH ve msysgit yükleyici var. Açık anahtar kimlik doğrulamasını kullanır ve bunu kolaylaştırır. Sorumluluk reddi: Ben web yöneticisiyim - Tim Davis'in güvenli bir git sunucusu kurma öğreticisini
Lilith River

3
Kayıt için: Windows için Git, 1.7.4 sürümünden (Şubat 2011'de yayınlandı) bu yana çalışan bir git daemon sürümü içeriyor. Yani artık cygwin gerekli değil. Ayrıca bkz. Stackoverflow.com/q/5186070/291641
patthoyts

Yanıtlar:


75

Git daemon'un Windows altında çalışmasını sağlamak için izleyebileceğiniz bazı adımlar:

(Önkoşullar: Varsayılan bir Cygwin kurulumu ve git daemon'u destekleyen bir git istemcisi)

1. Adım : Bir bash kabuğu açın

Adım 2 : / cygdrive / c / cygwin64 / usr / local / bin / dizininde, aşağıdaki içeriğe sahip "gitd" adlı bir dosya oluşturun:

#!/bin/bash

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

Adım 3 : Komut dosyasını bir hizmet olarak yüklemek için yükseltilmiş bir istemden (yani yönetici olarak) aşağıdaki cygrunsrv komutunu çalıştırın (Not: Cygwin'in C: \ cygwin64 konumunda kurulu olduğunu varsayar):

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

Adım 4 : Hizmeti başlatmak için aşağıdaki komutu çalıştırın:

cygrunsrv - gitd başlat

Bitirdiniz. Test etmek istiyorsanız, git protokolünü yerel makinenize aktarabileceğinizi gösteren hızlı ve kirli bir komut dosyası:

#!/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
Bu gönderiyi düzenleyebilseydim, şunları eklerdim: Önkoşullar: git ve cygrunsrv paketleri yüklü cygwin.
Mario

2
Başka bir not: gitd kabuk betiğinin içindeki git yolunu tam olarak nitelendirin. Makinelerimden birinde, bir windows işlemi olarak yürütülürken cygwin-git yerine MSYSGit başlatılıyordu. MSYSGit, arka plan programı modunu desteklemediğinden hizmet başlatılamadı.
Mario

26
Cygwin çözümlerini asla "Windows'ta çalışmak" olarak görmedim. "Bir VM'de Linux çalıştırmak Windows'ta çalışıyor" demek gibi. Ama bu sadece saf görüşüm;)
Rook

3
hızlı not: / usr / bin benim için çalışmadı, ancak / bin içine yerleştirmek işe yaradı (ve cygrunsrv'de c: / cygwin / bin / gitd kullanarak). Cygwin kurulumumun ne kadar eski olduğundan emin değilim, ancak / usr / bin gibi görünüyor, / bin içindeki neyin bilmediği bir bağlantı ... Ayrıca biraz açık ama c: / cygwin /
armyofda12mnkeys

3
@Rook - Aksine, Cygwin araç takımı, yükleyebileceğiniz diğer üçüncü taraf uygulamalardan farklı değildir. Cygwin sanal bir makine değil, önceden paketlenmiş bir araç takımıdır. Bu, makinenizdeki diğer her şey gibi yalnızca bir dizi Windows çalıştırılabilir ve dll'dir.
Derek Greer

16

GitStack en iyi seçiminiz olabilir. Şu anda ücretsiz (2 kullanıcıya kadar) ve yazarken açık kaynak .


2
Görünüşe göre bu açık kaynak veya öğrenci projeleriyle sınırlı: "GitStack, açık kaynak ve öğrenci projeleri için ücretsizdir!"
ccellar

12

İşte Windows için özel bir git sunucusu: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


Bonobo sunucusunun durumu nedir? Tamamen işlevsel mi? Belgelerden anlayamıyorum ama çok etkileyici görünüyor.
Jeff Fritz

1
@JeffFritz: onu kullanmayı bıraktım. Lanet şey, git update-server-infoHTTP itmesinden sonra depo durumunu ( ) güncellemez ve bu mantık Git kitaplıkları (GitSharp) tarafından uygulanmaz. Yakın zamanda gerçek bir çalışma durumuna ulaşacağından şüpheliyim.
André Caron

Ayrıca, Teamcity ile çalışmıyor (kullanmamamın ana nedeni bu) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg

3
Mutlu Bonobo kullanıcısı burada. Hem Andre hem de Piers endişelerinin şimdi çözülmesi gerektiğine inanıyorum. Bu TeamCity sorunu kapalı olarak işaretlendi ve merkezi bir depo kullanımıyla ilgili herhangi bir sorun yaşamadım.
Quinn Bailey

9

Windows ortamında çalışıyorsanız, Mercurial'ı düşündünüz mü? Git gibi dağıtılmış bir sürüm kontrol sistemidir, ancak Windows ile çok daha düzgün ve kolay bir şekilde bütünleşir.


9
En azından depoları senkronize edebilmek söz konusu olduğunda, Mercurial'i Windows makinelerde kullanmanın çok daha kolay olduğu doğru. Aslında Git'i kullanmanız gerekiyorsa, bu çok kullanışlı bir cevap değil!
Frank Shearar

Çarşı da doğal olarak pencerelerde çalışır; hatta ticari desteğe sahiptir.
hasen


7

cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.Komutu çalıştırdıktan sonra hatayı alırsanız :

cygrunsrv --start gitd

bu, 'temel yol' klasörünü oluşturmadığınız anlamına gelir.

'/ Git' klasörünü oluşturmak ve komutu yeniden çalıştırmak bu sorunu çözecektir.


/gitNTFS izinleriniz hizmet hesabı (SİSTEM) okuma / yazma erişimine izin vermiyorsa da bu hatayı alabilirsiniz .
spoulson

5

Şu anda, repo'ma uzaktan erişim sağlamak ve hizmet vermek için Windows'ta cygwin'in ssh daemon'unu kullanıyorum . Oldukça iyi çalışıyor, ssh sertifikalarıyla depoma kimin erişeceği ve uzak WAN ve VPN bağlantıları üzerinden bile performans alevleri üzerinde tam kontrole sahibim.

Diğer bir çözüm de Gitosis kullanmaktır . Hosting depolarını çok daha kolay hale getiren bir araçtır.


Git daemon'un cygwin ile çalışmasını nasıl sağladınız? Ssh artalan süreci kurulumuna sahibim ve makinemde ssh aracılığıyla oturum açmayı test ediyorum, ancak git daemon'u çalıştırmayı denediğimde kilitleniyor.
Per

Bir hata olduğu için gitosis'in
dalore

4

Bir hizmet barındırmanıza gerek yoktur, ayrıca bir ortak drive'da paylaşılan bir kod deposu da oluşturabilirsiniz. Sadece çıplak bir depo oluşturun. Mevcut bir depoyu, "git clone --bare --shared [kaynak] [dest]" kullanarak paylaşılan bir depoya kopyalayabilirsiniz. Ayrıca "git init --bare --shared = all" kullanarak yeni bir depo da başlatabilirsiniz.

Henk


3
Evet, bir sürücüde paylaşılan bir depo oluşturabilirsiniz, ancak havuzla aynı ağda olmadıkça bu havuza erişemeyeceğim. Sorunun amacı, iş yeri dışında çalışan bir iş arkadaşınızın bir arşive uzaktan erişime izin vermektir
Jeff Fritz

3
Bu gerçekten soruya bir çözüm değil ve yine de yapılacak oldukça tartışmalı bir şey gibi görünüyor.
Pat O



4

SCM Yöneticisi

  • Bir kutudan Git, Mercurial, Subversion depoları için hafif http sunucusu (yalnızca Java gereklidir)
  • Kullanıcıların, ACL'lerin, depoların yönetimi için web arayüzü

2

Windows'ta, DAV uzantısını kullanarak HTTP veya HTTPS üzerinden Apache ile Git depolarını da sunabilirsiniz.

Git veri havuzu yolu daha sonra, belirli IP adresleriyle kısıtlama veya htpasswd / htdigest türü kimlik doğrulama gibi Apache kimlik doğrulama kontrolleriyle korunabilir.

Htpasswd / htdigest kimlik doğrulamasını kullanmanın sınırlaması, kullanıcı adı: parolasının istenen Git URL'sinde geçirilmesidir, bu nedenle Git URL'sine erişimi belirli IP adresleriyle sınırlamak daha iyidir.

Düzenleme: Unutmayın, parolayı Git URL'sinin dışında bırakabilirsiniz ve bunun yerine Git, gönderme ve getirme / çekme işlemlerinde sizden parolayı isteyecektir.

HTTPS kullanılması, tüm verilerin aktarım sırasında şifrelenmesi anlamına gelir.

Kurulumu yeterince kolay ve çalışıyor.

Aşağıdaki örnek, IP adresine göre erişim kontrolü ve standart HTTP üzerinden kullanıcı: parola kombinasyonunu gösterir.

Örnek 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>

Örnek .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

İş yerinde bir Windows Sunucusunda kurulu GitBlit GO kullanıyorum. Kullanıcı kimlik doğrulaması ve yetkilendirmesi için kusursuz çalışın ve ActiveDirectory ile iyi entegre olun. Ayrıca ücretsiz ve açık kaynaklıdır (Apache lisanslıdır)

GitBlit ana sayfası

Yalnızca HTTP (S) erişimi desteklenir, SSH yoktur, ancak Windows altında başka bir şeye ihtiyacınız olmamalıdır.


Sitedeki kurulum belgesine göre SSL (HTTPS) desteğine sahiptirler.
Dandré

Evet, HTTP ve HTTPS destekleniyor (sadece HTTPS kullanıyorum) ancak SSH yok. Yanıt güncellendi.
Gian Marco

2

bu, 7 yaşın üzerindeki bir soruya 2015 cevabıdır.

Https://bitbucket.org/product/server adresinden 10 $ 'lık tek seferlik ödeme karşılığında, 10 kullanıcıya kadar 64 bit Windows lisansı satın alınabilir .

Görünüşe göre 32 bit sürümler yalnızca arşivlerinde mevcut.

Bitbucket Server daha önce Stash olarak biliniyordu .

Lütfen bu sürümü denemediğimi ancak 10 $ iyi bir anlaşma gibi göründüğünü unutmayın; Burada Atlassian'ın 10 doları hayır kurumuna verdiğini okudum. FWIW


0

Sanırım Henk'in söylediği şu: Bir sürücüde paylaşılan bir depo oluşturabilir ve ardından bunu ikinizin de erişebildiği ortak bir konuma kopyalayabilirsiniz. Her ikinizin de ssh erişimine sahip olduğunuz bir şirket sunucusu veya başka bir şey varsa, depoyu SCP ile kendi bilgisayarınıza geri yükleyebileceğiniz bir yere koyabilir ve sonra buradan çekebilirsiniz. İki bilgisayarım olduğu için bunu bir süre kendim için yaptım. Bu bir güçlük ama işe yarıyor.


2
"klasörleri paylaşma sıkıntısı" diyor asıl soru.
Orbit'te Hafiflik Yarışları

0

Windows 7 x64 ve Cygwin 1.7.9 için cygrunsrv'nin argüman argümanı olarak / usr / bin / gitd kullanmam gerekiyordu

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

Ayrıca, servisi kurmak için yönetici olarak bash çalıştırmam gerekiyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.