Git服务器像GitHub?

我是一个很长时间的Subversion用户,即将尝试Git。 我已经阅读了一些关于它的内容,并了解分布式的性质 – 我可以看到很多好处。

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

我意识到这可能是违反标准的Git使用模式,但它将对我的项目有用。 然而,任何我可能忽视的问题总是受欢迎的。

谢谢!

你可以设置一个ssh服务器,并在那里运行一个中央仓库。 然后,所有的开发人员只要同意(作为一个政策的问题),当他们完成提交时推送到服务器。 这是我工作场所的使用模式。 非常类似于CVS和SVN。

  1. find某处放置存储库(例如/var/gitroot )。
  2. 创build一个新的回购( mkdir project.git && cd project.git && git init --bare --shared=group )。
  3. 然后在你的客户端上,克隆远程git clone ssh://yourserver.com/var/gitroot/project.git && cd projectgit 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

这应该为你设置。

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

http://getgitorious.com/

更新:

http://gitlab.org/也是另一种select。;

更新2:

Gitorious现在join了GitLab

试试GitLab

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

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

如果你不介意在命令行中弄脏和弄脏,在企业环境中工作时, gitolite是一个绝对的对待,你需要在不同的存储库上设置不同的访问权限。 这是@Chris提到的gitosis的更新版本。

以下是作者网站的摘要:

Gitolite允许你在一台服务器上使用一个用户来托pipe许多git仓库,并为许多开发人员提供访问权限,而不必为他们提供真正的用户名或对服务器的shell访问权限。 这样做的基本魔法是ssh的pubkey访问权限和authorized_keys文件,灵感来自一个名为gitosis的旧程序。

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

它有一个相当全面的function集,但我非常喜欢的一件事是,所有的日常configuration编辑都是通过一个特殊的git仓库完成的。 也就是说,添加一个用户就是了

  • 将用户添加到configuration文件
  • 添加用户的ssh密钥
  • 提交更改
  • 把它推到gitolite
  • 瞧,configuration是活的!

当需要通过浏览器查看代码时,gitolite支持与gitweb“同步”configuration。 或者如果你喜欢cgit ,这是一个很好的用C语言编写的git web前端,那么你应该看看这个方法 。

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

光秃秃的骨头浏览器

 git instaweb --httpd=webrick 

从Git SCM书

将其与类似于此处描述的用于分布式开发的方法相结合(针对描述良好的概念的信用度数据库 )

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

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

启用分散的git工作stream程:git config alias.serve“守护进程 – 出错 – 导出全部–base-path = .git –reuseaddr –strict-paths .git /”

假设你使用了一个git工作stream程,这个工作stream程涉及到一个核心“官方”存储库的工作,你可以通过它来执行你的更改。 我相信很多公司都这样做,像Github这样的git托pipe服务的许多用户也是如此。

说服务器,或Github,有一点下降。

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

您可以保持正确的编码和提交,而您等待操作团队将服务器恢复正常。 注意自己:为运营团队购买甜甜圈。

但是,如果在这个停机时间里,你想要和另一个可能不是git专家的人在同一个存储库上合作?

或者,而不是停机,如果你和你的合作者在现场,而且由于某种原因,你不能让你的VPN让你连接到你的官方回购?

或者,如果你和你的合作者正在进行一系列的实验性修改,即使你有权访问,你也不想把未完成的混乱推入官方的中央仓库? (甚至不是特色分支)。也许你正在清理灾难性的重组或合并,分支机构遍布各处。

那么,你可能知道,git是一个“分布式”的版本控制系统 。

即使你可能在你的工作stream中使用了一个中央的“官方”git仓库,你仍然可以以点对点的方式使用git,你和你的合作者只需简单地build立和共享相互的提交,而中央服务器甚至不需要知道。

那么,你如何得到你的分支并向他们承诺,反之亦然?

  • 你可以使用git的工具来发送电子邮件补丁。 但是这有点不雅,需要一些关于如何应用电子邮件补丁的知识。
  • 您可以在自己的机器上创build一个帐户,供协作者使用。 但是,也许你没有本地的root权限,或者你不信任他们通过SSH访问你的信箱。
  • 你可以把你的repo克隆到一个拇指驱动器上来回传递。 但是,这是相当乏味的,特别是如果你碰巧在同一个本地networking,并需要一个拇指驱动器。

你也可以想想其他的方法。 但是有一个超级简单的方法:如果你可以在networking上看到对方,你可以启动一个一次性的git服务器,他们可以使用它作为他们的远程克隆,获取,并拉你的变化,并杀了它,当你用它做。

启用这个工具的工具是git daemon ,它有很多选项和function,但是为了实现这个简单的一次性“只需提交我所在的回购”的方式,使用它的方法是创build一个别名。 我喜欢把它叫做git serve 。 跑:

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

使用别名实际上是至关重要的,因为git别名在工作树的基本目录中执行。 因此,“.git”path将始终指向正确的位置,而不pipe您在存储库目录树中的哪个位置。

使用你的新的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立即执行读取和合并,如果您在function分支上一起工作,则很有用。

但请注意,如果您在存储库中保留秘密,则不应在恶意networking上执行此操作,因为没有身份validation。 它不宣传它的存在,但任何有端口扫描器的人都可以find它,连接到它,并克隆你的回购。

但它不是非常危险的,因为它默认是只读的。 如果您认为要启用写入权限,请仔细阅读git daemon手册页。 在你想获得协作者提交的情况下,把它保持为只读是比较安全的,并且要求你的协作者也运行这个命令,这样你就可以从中获取它们。

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

如果你需要好的,容易的GIT服务器,你必须尝试GitBlit。 我也使用gitolite,但它只有服务器,与GitBlit你在一个服务器,pipe理,回购。 经理…url: http : //gitblit.com/

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

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

https://enterprise.github.com/

它可能不是常用的 git服务器设置,但是使用不同的布局,工具,镜像和权限scheme,我认为企业存储库的一个非常稳固的替代scheme是Gerrit ,这看起来可能会令人惊讶,因为它被称为代码审查工具。 我们开始使用它作为代码审查,它慢慢成为我们的主要存储库,贬低g3 / gitolite

  • 部署很简单(你基本上把.war放在一个tomcat中)
  • 有一个networking用户来pipe理储存库,组和权限(或SSH CLI)
  • 有一个内置的java ssh和git实现,所以你没有别的东西可以设置
  • ldap支持用户和组(通常是公司必须的)
  • 一个非常灵活的权限系统(包括项目组,权限inheritance,限制读/写/分支/未被阅读的写入等)
  • 代码审查function(如果你进入这个事情)
  • 回购镜像(将一些存储库推向github或其他公共回购)

另外,它被大型项目(例如android,chrome)所使用,所以它的尺度也相当稳定。 如果您想允许绕过代码审查部分,请给您的用户PUSH权限。

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

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

 Username: scmadmin Password: scmadmin 

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

RhodeCode(新版本被称为RhodeCode Enterprise)添加了像代码审查一样缺less的Gitfunction,它通常说起来非常快速和可靠。

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

所以如果你不需要本地服务器,只需要一些中心的地方,你可以免费托pipe私人Git仓库,IMO的Bitbucket是最好的select。

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

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

如果你只是想把你的版本库放在一个中心位置,那么使用像Git这样的分布式版本控制就很容易:
你可以把你的中央资料库放在中央机器的共享文件夹中,每个人都可以从那里克隆它。

如果你想在你的本地服务器上有一个“真实”的网站,我知道Git托pipe网站http://repo.or.cz
它似乎有比GitHubless的function,但不像GitHub,你可以得到的源代码,并将其托pipe在自己的本地服务器上。

免责声明:我只读过关于repo.or.cz,我从来没有尝试过自己!

为了增加克里斯所说的,你可以使用gitosis(http://eagain.net/gitweb/?p=git​​osis.git)来控制谁可以实际访问回购。;

根据您的使用情况,还可以使用钩子(位于.git / hooks文件夹中),以便在从本地计算机上推送时,代码将自动被拉入服务器的文件系统。 这是一个stream行的脚本: http : //utsl.gen.nz/git/post-update 。 尽pipe如此,这并不是必要的。

对于简单的设置,您可以提供对中央服务器的ssh访问权限,并将每个用户的工作目录设置为从该“来源”推入/拉出。 这将是小团队最简单,最普遍的设置。

你也可以考虑一下给你一个http服务器的gitosis和远程pipe理它的能力。 这样你就不需要授予ssh访问权限,而且每个提交者都有权限。

http://repo.or.cz ,而相当好,往往有一些用户的问题。

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

查看“ 30秒游 ”: http : //unfuddle.com/about/tour/plans