如何在Windows上运行Git服务器?

16

我该如何在Windows上分享Git仓库?“正确”的方法似乎是运行“git-daemon”(Unix系统特有)、运行ssh(Unix系统特有)或者运行Git的http前端。如果我只有两个Windows设备,并且不想为了运行Git而安装Unix,那么在这两个设备之间共享仓库的最佳方式是什么?


这可能不是您问题的有效答案,但是除非Git控制下的内容很敏感并且您想要控制访问权限,否则为什么不使用像Github.com、Gitorious.org或Bitbucket.org这样的公共托管服务呢?我曾经将所有的git存储库都保存在我的计算机上,并通过Cygwin使用ssh进行服务,但后来我发现Github实际上更容易/方便使用。 - Adam Parkin
Adam,我认为git是一种分布式版本控制系统,这意味着你必须拥有GitHub存储库的本地副本。(我安装了git和GitHub桌面版,但不知道如何开始使用它们。当我在命令窗口中输入“git”时,会出现“文件未找到”的提示。对于一个新手来说,在Windows下学习这些东西真的很困惑!) - David Spector
5个回答

8
如果两台计算机在同一个局域网中,您可以通过常规的Windows网络协议(SMB)共享一个目录来放置存储库。
(免责声明:我不确定SMB的锁定语义,因此同时写入存储库可能会使其损坏。不过,在Unix上也有同样的情况。)

2
那证明是可行和简单的解决方案。奇怪的是,在我浏览的Git文档和书籍中,它完全被忽略了。啊,好吧。活着就要学习。 - user1071914
通过在机器上共享repo并在另一台机器上进行克隆,来解决锁定语义问题,例如:git clone file:///\some-server\share\repofoldername.git。 - Donal Lafferty
这种方法的问题在于它不具备良好的可扩展性。随着存储库的增大,速度会变慢,因为客户端需要不断地复制存储库文件以处理它们。 - skeeve

4
如果您想要最简单的方式,您需要查看 SCM-manager

通过 http 最简单的方式分享和管理您的 Git、Mercurial 和 Subversion 代码库。

为了拥有具有良好 Web 前端 和管理功能的 http 服务的代码库,您需要仅拥有 Java(不是 JRE)。

3
另一个代替运行虚拟机的选择是在Cygwin中运行所有Unix内容。使用Cygwin,您可以在Windows计算机上设置ssh服务器以及gitolite。它在本机硬件上运行,而不是在虚拟机中。
Cygwin安装非常简单直接。它只是一个下载所需软件包的单个可执行文件。保留安装程序,因为这是您在Cygwin中添加和删除软件要使用的工具。
在Cygwin上运行gitolite并不简单,但只需搜索“cygwin gitolilte”即可找到许多教程。

2
我在使用Cygwin方面并没有取得太大的成功。 - Adam Dymitruk

1

Git是一种分布式版本控制系统。因此,在大多数情况下,您不需要专门的程序来服务存储库中的内容,您只需要一种从两台机器访问存储库的方式。一种方法是像@thomas建议的那样,在共享网络位置中放置存储库的克隆。

我过去发现的另一种成功方法是作为一名贫穷的研究生使用Dropbox作为“主”存储库。基本上,您将存储库git clone到您的Dropbox目录中,然后可以在两台机器上设置Git以从Dropbox存储库推送/拉取。 Dropbox将在后台执行同步操作。这仅适用于轻度活跃的存储库。


0

我过去所做的就是在一台机器上通过虚拟盒子运行一个小型Linux客户端的VM。您只需要将ssh端口转发即可,无需在VM上配置复杂的网络。

这将允许您运行像gitolite这样的东西来管理用户。

出于这个原因和许多其他原因,我已经切换到在所有机器上运行Linux,并且只有在需要进行Windows开发时才在VM中运行Windows。许多在Linux上运行的优秀服务比从客户操作系统连接更容易。

如果您只有两台Windows机器,则可以将URL添加到远程,但请确保通过文件协议完成。例如:

 git remote add origin file:///\\some-server/share/repo.git

有些人声称,如果你只使用路径,Git 将尝试在两个仓库之间创建硬链接。据我所知,Msysgit 并不会这样做,你可以使用没有文件协议的路径:

 git remote add origin /z/somepath/repo.git

如果z被映射到另一台机器上的共享文件夹,那么在您的情况下我不需要运行服务器。

3
我认为建议原帖作者转向Linux作为他两台Windows电脑问题的解决方案可能超出了这个问题的范围。 - Chris Mansley
2
这就是我所做的。解决了许多问题。记得 Git 是用什么语言编写的。 - Adam Dymitruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接