Git Server喜欢GitHub?

ska*_*kaz 409 git

我是一个很长时间的Subversion用户,它将尝试使用Git.我已经阅读了一些关于它并了解分布式特性 - 我可以看到很多好处.

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

我意识到这可能违反了标准的Git使用模式,但它对我的项目很有用.然而,我可能会忽略任何我可能忽略的担忧.

谢谢!

Chr*_*rle 202

您可以设置一个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. commit(git commit -m "Initial import"),
  6. 推(git push origin master)

这应该为你做好准备.

  • +1.事实上,这是用于协作使用git的_the_使用模式. (8认同)
  • 我很清楚:在另一个(可访问的)服务器上安装git并创建一个repo.让客户克隆该回购.当客户端完成修复时,请向上推送到服务器仓库.谢谢! (5认同)
  • 我写了一篇[博文](http://www.convalesco.org/articles/2009/07/24/how-to-set-up-a-personal-git-repository-in-10-minutes/ )关于如何在不久前设置本地git repo.最多10分钟.困难的是设置适当的本地服务器备份策略,管理服务器等. (3认同)

Cra*_*aig 199

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

http://getgitorious.com/

更新:

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

更新2:

Gitorious现在加入了GitLab

  • 另外http://gitlab.org/是我回答以来开发的另一种选择. (16认同)
  • 看起来不错,但设置看起来很重(特别是非铁路用户)[http://cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server] (5认同)
  • 似乎Gitorious不再是免费的开源私人托管解决方案. (3认同)

Pla*_*lov 74

试试GitLab

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

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

  • 我发现Ubuntu相对较新的单一脚本设置非常简单.即使没有它,主要是遵循网站上的说明.我从来没有使用过rails甚至Ubuntu服务器,我先试试它. (2认同)
  • 实际上,现在GitLab很容易安装.这只是打开包装的问题.请参阅about.gitlab.com/downloads (2认同)
  • Gitlab Enterprise当然不是免费的,但有[社区版](https://about.gitlab.com/downloads/),它是免费的,也很容易安装.虽然它需要大约800 MB的磁盘空间,因为它安装了几个数据库引擎和许多依赖项. (2认同)

sti*_*gkj 39

如果您不介意使用命令行来解决问题,那么在企业环境中工作时,gitolite是一种绝对的享受,您需要在不同的存储库上设置不同的访问权限.它是@Chris提到的一种较新版本的gitosis.

以下是作者网站的摘要:

Gitolite允许您在服务器上使用单个用户来托管许多git存储库并提供对许多开发人员的访问,而无需为其提供真正的用户ID或shell访问服务器.这样做的关键魔力是ssh的pubkey访问和authorized_keys文件,灵感来自于一个名为gitosis的旧程序.

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

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

  • 将用户添加到配置文件
  • 添加用户的ssh密钥
  • 承诺改变
  • 把它推到gitolite
  • 瞧,配置是实时的!

当需要通过浏览器查看代码时,gitolite支持使用gitweb"同步"配置.或者如果你喜欢cgit,这是用C编写的git非常好的web前端,那么你应该看看这个方法.


小智 24

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


Mar*_*sel 15

裸骨浏览器

git instaweb --httpd=webrick
Run Code Online (Sandbox Code Playgroud)

来自git scm的书

将它与此处描述的用于分布式开发的方法结合起来(对于描述良好的概念,信用到datagrok)

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

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

启用分散的git工作流:git config alias.serve"daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

假设您使用git工作流程,该工作流程涉及使用您提取的核心"官方"存储库并推送您的更改.我相信很多公司都会这样做,就像Github这样的git托管服务的许多用户一样.

假设服务器或Github有所下降.

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

在等待运营团队恢复生命的同时,您可以保持编码和提交的正确性.自我注意:为运营团队购买甜甜圈.

但是,如果在此停机期间,您希望与同一存储库中可能不是git专家的其他人协作?

或者,而不是停机时间,如果你和你的合作者都在外地,而由于某种原因,你不能让你的VPN,让您连接到官方的回购?

或者,如果您和您的合作者正在进行一系列实验性更改,即使您有访问权限,您也不希望将未完成的混乱推送到官方中央存储库中?(甚至不是功能分支.)也许你正在清理一个灾难性的rebase或合并,分支机构到处都是.

嗯,你可能知道,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/"
Run Code Online (Sandbox Code Playgroud)

使用别名实际上至关重要,因为git别名在工作树的基目录中执行.因此,无论您在存储库的目录树中的哪个位置,路径".git"始终指向正确的位置.

git serve像这样使用你的新东西:

  1. git serve."准备隆隆声",它会报道.Git很糟糕.
  2. 找出你的IP地址.说它是192.168.1.123.
  3. 说"嘿Jane,我还没准备好/能够将这些提交推送到原点,但你可以通过运行将我的提交提取到你的克隆中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一次进行提取和合并,如果您在功能分支上一起工作,则非常有用.

但请注意,如果您在存储库中保密,则不应在恶意网络上执行此操作,因为没有身份验证.它没有宣传它的存在,但是任何有端口扫描程序的人都可以找到它,连接它并克隆你的repo.

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

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


小智 11

如果你需要好的,简单的GIT服务器,你必须尝试GitBlit.我也使用gitolite,但它只有服务器,GitBlit你可以在一个,服务器,管理,回购.经理......网址:http://gitblit.com/


Seb*_*ian 9

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

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


Chr*_*cht 8

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

https://enterprise.github.com/


小智 8

你也可以安装Indefero,它是GoogleCode的GPL克隆,因为它支持Subversion和Git,你可以顺利过渡.我是Indefero的作者.


小智 8

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

  • 它很容易部署(你基本上把.war放在tomcat中)
  • 有一个web ui来管理存储库,组和权限(或ssh cli)
  • 有一个内置的java ssh和git实现,所以你没有别的设置
  • ldap支持用户和组(通常是公司必须的)
  • 一个非常灵活的权限系统(具有项目组,权限继承,限制读/写/分支/未查看的写入/等)
  • 代码审查功能(如果你进入那个东西)
  • repo镜像(将一些存储库推送到github或其他公共存储库)

此外,它被大型项目(例如android,chrome)使用,因此它可以扩展,现在相当稳固.如果您想允许绕过代码审查部分,请为您的用户提供PUSH权限.


Her*_*che 7

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

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

Username: scmadmin
Password: scmadmin
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你提供默认凭据. (3认同)

Chr*_*cht 6

与此同时,Mercurial托管网站Bitbucket也开始提供Git存储库.

因此,如果您不需要本地服务器,只需要一些可以免费托管私人Git存储库的中心位置,IMO Bitbucket就是最佳选择.

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