像GitHub一样的Git Server?[关闭]


412

我是Subversion的长期用户,将尝试使用Git。我已经阅读了一些内容并了解了分布式特性-我可以看到很多好处。

但是,我喜欢中央服务器的想法,该服务器可以充当备份,记录系统等角色,同时仍将Git用于本地分支和共享。我不是在做一个开源项目,所以我不能使用Github(不付费),所以我的问题确实是:运行本地git服务器的最佳实践方法什么?

我意识到这可能与标准的Git使用模式背道而驰,但这对我的项目很有用。但是,我可能忽略了任何担心。

谢谢!


50
使用集中式服务器为你描述它真正的分布式版本控制系统的标准使用模式,所以不用担心。:-)
Aasmund Eldhuset

8
啊-以为这是个例外。想要抵制“如果您拥有集中化功能,那么您根本就无法获得它!” 注释。谢谢。
skaz 2011年

27
一个合理的想法。:-)据我了解,分布式VCS的重点不是要您没有中央存储库(通常非常有用),而是您不必被迫使用中央存储库-您可以执行本地提交,并且很容易与特定的人交换版本如果需要的话,你甚至可以有多个“中央”回购(在Git中,其他任何回购协议,不管有什么样的作用,被称为远程,你可以添加任意数量)。DVCS通常具有非常灵活的分支模型(git闪耀在这里)。
2011年

15
总结/重述Aasmund的评论:DVCS的重点通常不是放弃集中式存储库,而是要为每个其他用户提供VCS的全部功能。
卡斯卡贝尔2011年

2
Google有了一个新的Cloud Source Repository,它允许使用私有存储库:cloud.google.com/tools/cloud-repositories另外,FWIW,不确定为什么将其标记为非主题!
Josh M.

Answers:


203

您可以只设置ssh服务器并在其中运行中央存储库。然后,所有开发人员只需同意(作为政策问题)就可以在完成提交后将其推送到服务器。这是我工作场所的使用模式。非常像CVS和SVN。

  1. 查找放置存储库的位置(/var/gitroot例如)。
  2. 创建一个新的仓库(mkdir project.git && cd project.git && git init --bare --shared=group)。
  3. 然后在您的客户端上,克隆远程仓库(git clone ssh://yourserver.com/var/gitroot/project.git && cd project
  4. 添加一些文件(个git add README
  5. 提交(git commit -m "Initial import"),
  6. 推(git push origin master

这应该为您做好准备。


5
我很清楚:在另一台(可访问的)服务器上安装git并创建一个仓库。让客户克隆该仓库。客户端完成修复后,向上推送到服务器存储库。谢谢!
skaz 2011年

8
+1。实际上,这是git协同使用使用模式。
Aasmund Eldhuset 2012年

1
推送原点主机:::::计数对象:3,完成时发生此错误。写入对象:100%(3/3),244个字节| 0字节/秒,完成。总数3(增量0),重用0(增量0)远程:错误:没有足够的权限将对象添加到存储库数据库中。 //localhost/var/gitroot/project.git![远程拒绝] master-> master(解压缩器错误)错误:无法将某些引用推送到'ssh://localhost/var/gitroot/project.git'–
Abdo

3
不久前,我写了一篇有关如何设置本地git repo 的博客文章。最多10分钟。硬的事情是正确的设置本地服务器的备份策略,主管该服务器等
atmosx

你不能跑步git init --bare project.git吗?
Dan Dascalescu

199

Gitorious是git的开源Web界面,您可以在自己的服务器上运行,就像github:

http://getgitorious.com/

更新:

http://gitlab.org/现在也是另一个替代方法。

更新2:

Gitorious现在已经加入了GitLab


5
看起来不错,但设置似乎很重(特别是对于非Rails用户而言)[ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado 2012年

1
安装过程正在大大简化并且减少了“ Rails-y”。在getgitorious.com 的Install Gitorious页面上,还有一个用于CentOS服务器(和预建设备)的自动安装程序。
thomanil 2013年

3
看来Gitorious不再是免费的开源私有托管解决方案。
Mingming

1
如果您访问getgitorious.com并单击Gitorious Community Edition下的Installer,这是否不为您提供免费的开源私人托管解决方案?
Craig

16
此外gitlab.org是因为我的答案已经开发另一种选择。
Craig

74

尝试GitLab

我曾经用过的最好的git GUI工具。它与GitHub非常相似。

它是开源的(MIT许可证),是安装最多的git管理软件,安装量超过25.000。它具有每月发布的版本,并拥有超过375个贡献者的活跃社区。您可以在自己的服务器上拥有无限的私有,内部和公共存储库。它是在大多数Unix平台上运行的Ruby on Rails应用程序。


1
我同意,这太棒了。(+1)但就此评论而言,安装非常麻烦。如果他们可以包装rpm,deb等
那就太好了

2
我发现相对较新的Ubuntu单一脚本设置非常轻松。即使没有它,通常也要遵循现场指示进行操作。我从未使用过Rails,甚至从未使用过Ubuntu服务器,而我先尝试运行它。
乔恩·谢尔

我通过LDAP将其与Active Directory集成时遇到了一些麻烦。
riezebosch 2014年

2
实际上,如今,GitLab非常易于安装。这只是拆包的问题。参见about.gitlab.com/downloads
Job

2
Gitlab Enterprise当然不是免费的,但是有社区版,它是免费的,并且易于安装。虽然,它需要大约800 MB的磁盘空间,因为它安装了几个数据库引擎和许多依赖项。
OndroMih '16

39

如果您不介意命令行混乱,在需要在不同存储库上设置不同访问权限的公司环境中工作时,gitolite是绝对的选择。这是@Chris提到的较新版本的gitosis。

这是作者网站的摘要:

Gitolite允许您在服务器上使用一个用户来托管许多git存储库,并提供对许多开发人员的访问权限,而无需向他们提供真实的用户ID或对服务器的外壳访问。这样做的基本法宝是ssh的pubkey访问权限和authorized_keys文件,其灵感来自一个名为gitosis的较旧程序。

Gitolite可以限制谁可以读取(克隆/获取)或写入(推送)存储库。它还可以限制谁可以推送到哪个分支或标签,这在公司环境中非常重要。无需root权限即可安装Gitolite,并且除了git本身和perl外,没有其他软件。

它具有相当全面的功能集,但是我非常喜欢的一件事是,每天的配置编辑都是通过特殊的git存储库完成的。也就是说,添加用户只是

  • 将用户添加到配置文件
  • 添加用户的ssh密钥
  • 提交更改
  • 将其推入硬石膏
  • 瞧,配置已经启动!

当需要通过浏览器查看代码时,gitolite支持使用gitweb“同步”配置。或者,如果您更喜欢cgit,它是用C编写的git的非常好的Web前端,那么您应该看看此how-to


24

您可能会考虑使用Gitblit,这是一个用于小型工作组的开源,集成的纯Java Git服务器,查看器和存储库管理器。


Gitblit似乎非常适合我的应用程序,但令我担心的是上一次发布是在2016
Roberto

1
@Roberto,一个有效的观点。我想这取决于您的需求或对您而言重要的东西。如果它对您仍然有效,那么它仍然可能是一个有效的选择。如果您担心及时的错误修复或需要更多功能,则可能不需要。
Florian

15

裸骨头浏览器

git instaweb --httpd=webrick

来自git scm书

将其与此处描述的用于分布式开发的方法相结合(详细描述的概念归功于datagrok

从任何本地存储库启动一次性git服务器。

已经发布了这个推文,但我认为它可以使用一些扩展:

启用分散的git工作流程:git config alias.serve“守护程序--verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /”

假设您使用的git工作流程涉及使用一个核心的“官方”存储库,该存储库将更改从中拉入和推入。我敢肯定,许多公司都会这样做,就像许多Github等git托管服务的用户一样。

假设该服务器或Github出现故障了。

毕竟,不用担心,使用git的原因之一是您可以在本地克隆中获得整个项目历史的副本。

在等待操作团队使服务器恢复正常工作的同时,您可以继续进行编码和提交。自我提示:为运营团队购买甜甜圈。

但是,如果在此停机期间,您想与同一仓库中的另一个可能不是git专家的人合作,该怎么办?

或者,如果不是您和您的合作伙伴在现场,而是因为某种原因而无法让您的VPN连接到您的官方存储库,该怎么办而不是停机?

或者,如果您和您的合作者正在做出一些实验性的更改,即使您可以访问,但又不想将未完成的混乱推送到官方中央存储库,该怎么办?(甚至没有作为功能分支。)也许您正在清理灾难性的基础变更或合并,分支遍布各处。

嗯,您可能已经知道git是一个“分布式”版本控制系统

即使您可能在工作流程中使用中央“官方” git仓库,您仍然可以以对等方式使用git,在这种情况下,您和您的协作者可以简单地彼此建立和共享提交,而中央服务器甚至不必知道。

那么,如何获得分支并提交给分支,反之亦然?

  • 您可以使用git的功能通过电子邮件发送补丁。但这有点不雅致,并且需要了解如何应用电子邮件补丁程序的知识。
  • 您可以在自己的计算机上创建一个帐户,供协作者使用。但是,也许您没有本地root用户访问权限,或者您不通过SSH访问框来信任他们。
  • 您可以将您的存储库克隆到拇指驱动器上,然后将其来回传递。但这很繁琐,尤其是当您碰巧在同一本地网络上且需要使用拇指驱动器时。

您可能也可以想到其他方法。但是,有一种超级简单的方法:如果您可以在网络上看到对方,则可以启动一次性git服务器,将其用作远程服务器,以克隆,获取和提取更改,并在您注销时将其杀死完成它。

启用此功能的工具是git daemon,它具有许多选项和功能,但是为了实现这种简单的一次性功能,“只需提供我所处的仓库”,使用它的方法是创建别名。我喜欢称呼它git serve。跑:

git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"

使用别名实际上至关重要,因为git别名是在工作树的基本目录中执行的。因此,无论您在存储库的目录树中的什么位置,路径“ .git”都将始终指向正确的位置。

git serve像这样使用新的:

  1. 运行git serve。它将报告“准备好隆隆声”。Git是个坏蛋。
  2. 找出您的IP地址。说是192.168.1.123。
  3. 说“嘿,简,我尚未准备好/无法将这些提交推送到源,但是您可以通过运行将我的提交提取到您的克隆中git fetch git://192.168.1.123/
  4. 如果您不想再提供该存储库,请按ctrl + c。

您还可以告诉Jane,git clone git://192.168.1.123/ local-repo-name如果她还没有存储库的克隆。或者,使用git pull git://192.168.1.123/ branchname一次执行提取和合并,如果您在功能分支上一起工作,则很有用。

但是请注意,如果在存储库中保守秘密,则不应在敌对网络上执行此操作,因为没有身份验证。它不会宣告它的存在,但是任何拥有端口扫描器的人都可以找到它,连接到它并克隆您的存储库。

但这不是超级危险,因为默认情况下它是只读的。git daemon如果您认为要启用写访问权限,请仔细阅读手册页。如果要获取协作者的提交,将其保留为只读状态,并让协作者也运行此命令更加安全,这样您就可以从他们那里获取信息。

切线相关:关于一次性服务器,如果要通过HTTP临时共享一堆静态文件,请执行以下操作: python -m SimpleHTTPServer


11

如果您需要优质,便捷的GIT服务器,则必须尝试GitBlit。我也使用gitolite,但它仅是服务器,借助GitBlit,您可以将服务器,管理,存储库合而为一。经理... URL:http : //gitblit.com/


9

https://rhodecode.com是Git&Mercurial的开源Web应用程序,可以很容易地在任何操作系统下安装(包括安装程序)。

RhodeCode(新版本称为RhodeCode Enterprise)增加了缺少的Git功能(如代码审查),并且通常来说非常快速且可靠。


1
我实际上在这里运行自己的实例:code.gmgauthier.com。3.x版本非常干净且稳定。实际上,我将其用于代码之外的事情(尽管那里有很多)。我用它来保存个人日记本的主副本,两本书的手稿,播客脚本和博客草稿。这是理想的选择,部分是因为它可以为您同时呈现Markdown和RestructuredText,从而使草稿在任何地方都易于阅读。
Greg Gauthier 2015年

8

您还可以安装Indefero,它是GoogleCode的GPL克隆,因为它同时支持Subversion和Git,因此可以顺利过渡。我是Indefero的作者。


我正在使用它并且喜欢它。但是设计有些过时了。仍然维护吗?
Jaroslav


8

它可能不是常见的 git服务器设置,但是由于使用了不同的布局,工具,镜像和权限方案,我想说Gerrit是企业存储库的一个非常可靠的替代方案,这似乎令人惊讶,因为它被称为a代码审查工具。我们开始将其用作代码审查,并逐渐成为我们的主要存储库,弃用了g3 / gitolite

  • 部署很简单(您基本上将.war放到了tomcat中)
  • 有一个Web ui来管理存储库,组和权限(或ssh cli)
  • 具有内置的Java ssh和git实现,因此您无需进行其他设置
  • ldap对用户和组的支持(通常是公司必需的)
  • 一个非常灵活的权限系统(具有项目组,权限继承,限制读/写/分支/未审查的写操作/等)
  • 代码审查功能(如果您喜欢的话)
  • 回购镜像(将某些存储库推送到github或其他公共回购)

此外,它还用于大型项目(例如android,chrome),因此可以缩放,并且现在相当稳定。如果要允许绕过代码检查部分,只需给您的用户PUSH权限。


7

对于远程托管正如其他人所说,bitbucket.org提供免费的私有存储库,我一直在使用它而没有任何问题。

对于本地或LAN网络, 我将添加一个scm-manager.org(一个可执行文件,安装起来非常简单,它是在Java上制作的,因此可以在Linux或Windows上运行)。以防万一您安装它,这些是默认密码。

Username: scmadmin
Password: scmadmin

3
感谢您提供默认凭据。
瑞安·威廉姆斯

6

同时,Mercurial托管网站Bitbucket也已开始提供Git存储库。

因此,如果您不需要本地服务器,而只需在某个中央位置免费托管私有Git存储库,则IMO Bitbucket是最佳选择。

免费获得免费的私人和公共Git和Mercurial存储库。
唯一的限制是,在免费计划中,最多只能有五个用户可以访问您的私有存储库(更多则需要付费)。
有关更多信息,请参见https://bitbucket.org/plans



2

如果您只想将存储库放在一个中央位置,那么使用Git这样的分布式版本控制就很容易了:
您可以将中央存储库放在中央计算机上的某个共享文件夹中,每个人都可以从那里克隆它。

如果您想在本地服务器上建立一个“真实的”网站,我知道Git托管网站http://repo.or.cz
它的功能似乎少于GitHub,但与GitHub不同,您可以获取源代码并将其托管在自己的本地服务器上。

免责声明:我只读过repo.or.cz,我自己从未尝试过!


2

对于简单的设置,您可以提供对中央服务器的ssh访问,并设置每个用户的工作目录以从此“来源”进行推/拉。对于小型团队来说,这将是最简单,最常见的设置。

您可能还会研究gitosis,它为您提供了http服务器以及可以对其进行远程管理的功能。这样,您不必授予ssh访问权限,而不必授予每个提交者所有权限。


2

要补充Chris所说的内容,您可以使用gitosis(http://eagain.net/gitweb/?p=git​​osis.git)来控制谁可以真正访问该回购协议。

根据您的使用情况,您还可以使用钩子(在.git / hooks文件夹中),这样当您从本地计算机上推送时,代码将自动被拉入服务器的文件系统中。这是执行此操作的流行脚本:http : //utsl.gen.nz/git/post-update。尽管并非在所有情况下都需要这样做。


更新后脚本的链接已死...
Morten Jensen


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.