Git服务器像GitHub?

我是一个长期的Subversion用户,将尝试Git。我读过一些关于它的文章,了解分布式的本质——我能看到很多好处。

然而,我确实喜欢中央服务器的想法,它可以承担备份、记录系统等的角色,同时仍然使用Git进行本地分支和共享。我没有做一个开源项目,所以我不能使用Github(不付费),所以我的问题真的是:运行本地git服务器的最佳实践方式是什么?

我知道这可能违反了标准的Git使用模式,但它对我的项目很有用。然而,任何我可能忽略的担忧都是受欢迎的。

谢谢!

301383 次浏览

您可以设置一个ssh服务器并在那里运行一个中央存储库。然后,所有开发人员只需同意(作为策略问题)在完成提交时推送到服务器。这是我工作场所的使用模式。很像CVS和svn。

  1. 找到放置存储库的地方(例如/var/gitroot)。
  2. 创建一个新的repo (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)

这应该会为你做好准备。

如果你只是想要你的存储库在一个中心位置,这是非常容易的分布式版本控制,如Git 你可以把你的中央存储库放在中央机器上的某个共享文件夹中,每个人都可以从那里克隆它 如果你想在你的本地服务器上有一个“真正的”网站,我知道Git托管网站http://repo.or.cz 它的功能似乎比GitHub少,但与GitHub不同的是,你可以获得源代码并将其托管在自己的本地服务器上

免责声明:我只读过关于回购。cz,我自己从来没有试过!

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

你也可以看看gitosis,它给你一个http服务器,并能够远程管理它。这样,您就不必向每个提交者授予ssh访问权限和所有必需的内容。

Gitorious是一个开源的git web界面,你可以在自己的服务器上运行,就像github一样:

http://getgitorious.com/

更新:

http://gitlab.org/现在也是另一种选择。

更新2:

Gitorious现在已经加入了GitLab

为了补充Chris所说的,您可以使用gitosis (http://eagain.net/gitweb/?p=gitosis.git)来控制谁可以实际访问回购。

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

http://repo.or.cz,虽然相当好的倾向于与一些用户有一些问题。

如果你是其中之一,我建议你尝试http://unfuddle.com,因为你来自一个颠覆的背景。

检查"30秒巡演": http://unfuddle.com/about/tour/plans

你甚至可以在你的本地服务器上安装GitHub(但不是免费的):

https://enterprise.github.com/

你也可以安装Indefero,它是GoogleCode的GPL克隆,因为它同时支持Subversion和Git,你可以有一个平稳的过渡。我是Indefero的作者。

如果你不介意使用命令行,在需要对不同存储库设置不同访问权限的公司环境中,gitolite绝对是一种享受。这是@Chris提到的一种较新的胶质分裂症。

以下是作者网站上的摘要:

Gitolite允许您在服务器上使用单个用户托管多个git存储库,并为许多开发人员提供访问权限,而无需在服务器上为他们提供真实的用户id或shell访问权限。做到这一点的关键魔法是ssh的pubkey访问和authorized_keys文件,灵感来自一个叫做gitosis的旧程序。

Gitolite可以限制谁可以从存储库中读取(克隆/获取)或写入(推送)。它还可以限制谁可以向哪个分支或标记推送,这在企业环境中非常重要。安装Gitolite不需要root权限,除了git本身和perl之外不需要其他软件。

它有一个非常全面的功能集,但我非常喜欢的一点是,所有的日常配置编辑都是通过一个特殊的git存储库完成的。也就是说,添加用户只是

  • 将用户添加到配置文件
  • 添加用户的ssh密钥
  • 提交更改
  • 推到花岗石上
  • 瞧,配置是实时的!

当需要通过浏览器查看代码时,gitolite支持“同步”;使用gitweb进行配置。或者如果你喜欢cgit,这对于用C编写的git来说是一个非常好的web前端,那么你应该看看这个指南

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

http://code.google.com/p/luna-tool/是scala应用程序,它实现了github的大部分需要的部分

尝试GitLab

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

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

与此同时,水银托管站点Bitbucket都也开始提供Git存储库。

所以如果你不需要当地的服务器,只需要一些中心的地方,你可以免费托管私有Git存储库,我认为Bitbucket是最好的选择。

免费获得无限的私有和公共Git和Mercurial存储库 唯一的限制是在免费计划中,不超过5个用户可以访问您的私有存储库(如果要更多,您必须付费) 更多信息请参见https://bitbucket.org/plans !< / p >

可能是最常见的的git服务器设置,但在尝试了不同的布局、工具、镜像和权限方案之后,我想说一个相当可靠的企业存储库替代方案是Gerrit,这可能看起来令人惊讶,因为它更广为人知的是一个代码审查工具。我们开始使用它作为代码审查,它慢慢成为我们的主要存储库,弃用g3/gitolite

  • 它的部署非常简单(基本上在tomcat中删除.war)
  • 有一个web UI来管理存储库,组和权限(或SSH命令行)
  • 有一个内置的Java SSH和git实现,所以你没有其他设置
  • 对用户和组的Ldap支持(对于公司来说通常是必须的)
  • 一个非常灵活的权限系统(有项目组,权限继承,限制读/写/分支/未审查的写等)
  • 代码审查功能(如果你喜欢的话)
  • 回购镜像(将一些存储库推送到github或其他公共回购)

此外,它被用于大型项目(如android, chrome),所以它的规模,现在是相当坚实的。如果您想绕过代码审查部分,只需给您的用户PUSH权限。

如果你需要好的,简单的GIT服务器,那么你必须尝试GitBlit。 我也使用gitolite,但它只有服务器,与GitBlit你得到所有在一个,服务器,管理,回购。经理……URL: http://gitblit.com/ < / p >

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

用于本地或局域网 我将添加这个scm-manager.org(一个单独的可执行文件,安装非常简单,它是在Java上制作的,所以它可以在Linux或Windows上运行)。如果你安装它,这些是默认密码

Username: scmadmin
Password: scmadmin

骨架浏览器

git instaweb --httpd=webrick

Git SCM手册

将它与用于分布式开发的在这里所描述的方法相结合(对于描述良好的概念,要归功于datagrok)

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

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

启用分散式git工作流:git配置别名。service " daemon——verbose——export-all——base-path=。Git——reuseaddr——strict-paths .git/"

假设你使用的git工作流涉及到与核心“官员”一起工作。存储库,您可以从中拉入更改并将其放入。我相信很多公司都这样做,就像Github这样的git托管服务的许多用户一样。

比如服务器或者Github宕机了。

不用担心,毕竟,使用git的原因之一是为了在本地克隆中拥有整个项目历史的副本。

您可以继续编码和提交,同时等待操作团队使服务器恢复正常。自我提醒:给运营团队买甜甜圈。

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

或者,如果您和您的合作者在现场,并且由于某种原因无法让您的VPN连接到您的官方回购,而不是停机,该怎么办?

或者,如果您和您的合作者正在进行一系列实验性的更改,并且即使您拥有访问权限,也不想将未完成的混乱推到官方的中央存储库中,该怎么办?(甚至不是作为功能分支。)也许你正在清理一个灾难性的重组或合并,分支遍布各处。

嗯,git,正如你可能意识到的,是一个“distributed"版本控制系统

即使你可能使用中央“官员”;在您的工作流程中,您仍然能够以点对点的方式使用Git,在这种方式中,您和您的合作者只需相互构建和共享提交,中央服务器甚至不必知道。

那么,您如何获得分支并将其提交给它们,反之亦然?

  • 您可以使用git的功能通过电子邮件发送补丁。但这有点不优雅,需要他们在如何应用电子邮件补丁方面的一些知识。
  • 您可以在您自己的机器上创建一个帐户,以便您的合作者通过ssh登录。但是,也许您没有本地根访问权限,或者您不相信他们可以通过SSH访问您的计算机。
  • 你可以把你的回购复制到一个u盘上,然后来回传递。但这是相当乏味的,特别是如果你恰好在同一个本地网络上,并且需要一个u盘。

你可能还可以想到其他方法。但是有一个超级简单的方法:如果你们可以在网络上看到对方,你可以启动一个一次性的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. 说“嘿,Jane,我还没有准备好/不能将这些提交推到原点,但你可以通过运行__abc0将我的提交获取到你的克隆中”;
  4. 当你不想再为该回购服务时,按ctrl+c

如果Jane还没有储存库的克隆,你也可以告诉她git clone git://192.168.1.123/ local-repo-name。或者,使用git pull git://192.168.1.123/ branchname立即进行取并合并,如果你正在一起工作在一个特性分支上,这很有用。

但是请注意,如果您在存储库中保留秘密,则不应该在恶意网络上这样做,因为没有身份验证。它没有宣传它的存在,但任何拥有端口扫描程序的人都可以找到它,连接到它,并克隆您的repo。

但它并不是超级危险,因为默认情况下它是只读的。如果你想要启用写访问,请仔细阅读git daemon手册页。在您想要获得合作者的提交的情况下,将其保持为只读要安全得多,并要求合作者也运行此命令,以便您可以从它们中提取。

切题相关:关于一次性服务器的主题,如果你想通过HTTP暂时共享一堆静态文件:python -m SimpleHTTPServer

如果你想要拉请求,有RhodeCodeGitLab的开源项目和付费的

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

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