在Windows中托管Git存储库


108

当前是否可以在Windows中托管共享的Git存储库?我了解您可以使用以下命令在Linux中配置Git服务:

git daemon

是否有本机Windows选项(缺少共享文件夹)来托管Git服务?

编辑:我当前正在使用git的cygwin安装来存储和使用Windows中的git存储库,但是我想采取下一步的步骤,使用可向他人提供访问权限的服务托管存储库。


35
我目前的雇主没有任何Unix或Linux机器...同时引入新的Source Control提供程序和操作系统可能会有点...创伤。
杰夫·弗里茨

1
git-daemon有什么问题?AFAIK它在Windows上运行正常。
亚里斯多德·帕加尔兹

10
使用Windows的标准msysgit安装程序安装Git似乎没有安装git daemon。:\
Tim Visher

1
您可能需要查看捆绑的CopSSH和msysgit安装程序。它使用公共密钥身份验证,并且很容易。免责声明:我是网站管理员-阅读了Tim Davis关于设置安全git服务器的教程
莉莉丝·

3
记录:Git for Windows自1.7.4版(2011年2月发布)以来已包含git daemon的工作版本。因此,不再需要cygwin。另请参阅stackoverflow.com/q/5186070/291641
patthoyts,2012年

Answers:


75

您可以按照以下步骤使git守护程序在Windows下运行:

(先决条件:默认的Cygwin安装和支持git守护程序的git客户端)

步骤1:打开bash外壳

步骤2:在目录/ cygdrive / c / cygwin64 / usr / local / bin /中,创建一个名为“ gitd”的文件,其内容如下:

#!/bin/bash

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

步骤3:从提升的提示符下(例如,以admin身份)运行以下cygrunsrv命令,以将脚本作为服务安装(注意:假定Cygwin安装在C:\ cygwin64):

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

步骤4:运行以下命令以启动服务:

cygrunsrv-启动gitd

大功告成 如果要测试它,下面是一个快速而肮脏的脚本,该脚本显示您可以将git协议推送到本地计算机:

#!/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
如果我可以编辑这篇文章,我将添加以下内容:先决条件:安装了git和cygrunsrv软件包的cygwin。
马里奥(Mario)2010年

2
另一个注意事项:在gitd shell脚本中完全限定git的路径。在我的一台计算机上,以Windows进程执行时,正在启动MSYSGit而不是cygwin-git。MSYSGit不支持守护程序模式,因此服务无法启动。
马里奥

26
我从未将Cygwin解决方案视为“在Windows中工作”。这就像说“在VM中运行linux在Windows中运行”。但这只是我的纯粹观点;)
Rook

3
快速说明:/ usr / bin对我不起作用,但放在/ bin中有效(并在cygrunsrv中使用c:/ cygwin / bin / gitd)。不确定cygwin的安装年代如何,但看起来/ usr / bin是Windows不会知道的/ bin中链接的链接...也有点明显,但请记住在c:/ cygwin /中创建文件夹/ git
Armyofda12mnkeys

3
@Rook-相反,Cygwin工具套件与您可能安装的任何其他第三方应用程序没有什么不同。Cygwin不是虚拟机,而是预包装的工具套件。就像计算机上的所有其他文件一样,它只是一组Windows可执行文件和dll。
德里克·格里尔

16

GitStack可能是您的最佳选择。它目前是免费的(最多2位用户),并且在撰写本文时是开源的。


2
看起来这仅限于开源或学生项目:“ GitStack对于开源和学生项目是免费的!”
ccellar 2012年

12

这是Windows专用的git服务器:https : //github.com/jakubgarfield/Bonobo-Git-Server/wiki


Bonobo服务器的状态是什么?它功能齐全吗?我从文件中看不出来,但是看起来很有说服力。
杰夫·弗里茨

1
@JeffFritz:刚刚停止使用它。git update-server-info在HTTP推送后,该死的东西不会更新存储库状态(),并且其逻辑未由其Git库(GitSharp)实现。我怀疑它将很快达到真正的工作状态。
安德烈·卡隆

另外,与Teamcity不兼容(这是我不使用它的主要原因)github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg 2013年

3
这里的Bo黑猩猩用户很高兴。我相信现在应该解决安德烈和皮尔斯的担忧。该TeamCity问题被标记为已关闭,并且使用中央集中式存储库没有遇到任何问题。
Quinn Bailey 2013年

9

如果您在Windows环境中工作,您是否考虑过Mercurial?它是类似于Git的分布式版本控制系统,但与Windows的集成更加整洁,轻松。


9
的确,在Windows机器上使用Mercurial容易得多,至少就同步存储库而言。如果您实际上必须使用Git,则不是一个非常有用的答案!
Frank Shearar 2010年

Bazaar还可以在Windows上本地工作;它甚至有商业支持。
哈森


7

如果cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.在运行命令后收到错误:

cygrunsrv --start gitd

这意味着您没有创建“基本路径”文件夹。

创建文件夹“ / git”并重新运行命令将解决此问题。


如果您的/gitNTFS权限不允许服务帐户(SYSTEM)进行读/写访问,则也会出现此错误。
spoulson 2012年

5

我目前在Windows上使用cygwin的ssh守护进程提供服务并允许远程访问我的存储库。它运行得很好,我可以完全控制谁通过他们的ssh证书访问我的存储库,并且即使在远程WAN和VPN链接上,性能也非常出色。

另一个解决方案是使用Gitosis。它是使托管存储库更容易的工具。


您如何让git守护进程与cygwin一起工作的?我已经安装了ssh守护程序,并且已经测试了通过ssh登录到我的计算机中,但是每当我尝试运行git守护程序时,它就会挂起。
提鲁2009年

您是如何在Windows上使gitosis出现错误的:github.com/res0nat0r/gitosis/issues#issue/1
dalore 2010年

4

您不需要托管服务,也可以在共享驱动器上创建共享存储库。只需创建一个裸仓库。您可以使用以下命令将现有存储库克隆到共享库中:“ git clone --bare --shared [source] [dest]”。您也可以使用“ git init --bare --shared = all”来初始化新的存储库。

亨克


3
是的,您可以在驱动器上创建一个共享存储库,但是除非与该存储库在同一网络上,否则我将无法访问该存储库。这个问题的目的是允许异地工作的同事远程访问存储库
Jeff Fritz,2009年

3
这实际上不是解决问题的方法,无论如何似乎都是一件值得商question的事情。
Pat O 2010年



4

单片机经理

  • 轻巧的http服务器,用于从框中获取Git,Mercurial,Subversion仓库(仅需要Java)
  • Web界面,用于管理用户,ACL,存储库

2

在Windows上,您还可以使用DAV扩展,通过HTTP或HTTPS在Apache上为Git存储库提供服务。

然后,可以使用Apache身份验证检查来保护Git存储库路径,例如,限制为某些IP地址或htpasswd / htdigest类型身份验证。

使用htpasswd / htdigest身份验证的局限性在于,在请求的Git URL中传递了username:password,因此将对Git URL的访问限制为某些IP地址会更好。

编辑:注意,您可以将密码保留在Git URL之外,而Git会提示您在推入和提取/拉取时输入密码。

使用HTTPS意味着所有数据都将在传输中进行加密。

它很容易设置和运行。

以下示例显示了通过IP地址和标准HTTP上的user:password进行访问控制的组合。

示例Apache虚拟主机

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

示例.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

在工作中,我正在使用Windows Server上安装的GitBlit GO。完美工作,并与ActiveDirectory很好地集成以进行用户身份验证和授权。它也是免费和开源的(Apache许可)

GitBlit主页

仅支持HTTP(S)访问,不支持SSH,但在Windows下,您不需要任何其他信息。


它们确实基于站点上的安装文档具有SSL(HTTPS)支持。
Dandré

是的,支持HTTP和HTTPS(我仅使用HTTPS),但不支持SSH。回应已更新。
吉安·马可

2

这是2015年对一个已有7年历史的问题的解答。

https://bitbucket.org/product/server一次性支付10美元,即可购买多达10位用户的64位Windows许可证。

显然,只能通过其存档使用32位版本。

Bitbucket Server以前称为Stash

请注意,我还没有尝试过这个版本,但是10美元似乎很划算;在这里,我读到Atlassian向慈善机构捐款10美元。第一次世界大战


0

我认为Henk在说的是,您可以在驱动器上创建一个共享存储库,然后将其复制到双方都可以访问的某个公共位置。如果有某些公司服务器或您都可以通过ssh访问的服务器,则可以将存储库放置在某个位置,在该位置可以将其SCP返回到您自己的计算机,然后从那里拉出。因为有两台计算机,所以我自己做了一段时间。这很麻烦,但是确实有效。


2
最初的问题是“共享文件夹不足”。
Lightness Races in Orbit

0

对于Windows 7 x64和Cygwin 1.7.9,我需要使用/ usr / bin / gitd作为cygrunsrv的args参数。

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

另外,我需要以管理员身份运行bash才能安装该服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.