Git服务器像GitHub?
我是一个很长时间的Subversion用户,即将尝试Git。 我已经阅读了一些关于它的内容,并了解分布式的性质 – 我可以看到很多好处。
但是,我确实喜欢一个可以担当备份,logging系统等angular色的中央服务器,同时仍然使用Git来进行本地分支和共享。 我没有做一个开源项目,所以我不能使用Github(没有付费),所以我的问题是: 什么是运行本地git服务器的最佳实践方式?
我意识到这可能是违反标准的Git使用模式,但它将对我的项目有用。 然而,任何我可能忽视的问题总是受欢迎的。
谢谢!
你可以设置一个ssh服务器,并在那里运行一个中央仓库。 然后,所有的开发人员只要同意(作为一个政策的问题),当他们完成提交时推送到服务器。 这是我工作场所的使用模式。 非常类似于CVS和SVN。
- find某处放置存储库(例如
/var/gitroot
)。 - 创build一个新的回购(
mkdir project.git && cd project.git && git init --bare --shared=group
)。 - 然后在你的客户端上,克隆远程
git clone ssh://yourserver.com/var/gitroot/project.git && cd project
(git clone ssh://yourserver.com/var/gitroot/project.git && cd project
) - 添加一些文件(
git add README
文件) - 提交(
git commit -m "Initial import"
), - 推(
git push origin master
)
这应该为你设置。
Gitorious是一个开源的web界面,可以让你可以在自己的服务器上运行,就像github:
更新:
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
如下所示:
- 运行
git serve
。 “准备隆隆声”,它会报告。 Git是坏蛋。 - 找出你的IP地址。 说它是192.168.1.123。
- 说“嘿简,我还没有准备好/能够推动这些提交起源,但你可以通过运行
git fetch git://192.168.1.123/
获取我的提交到你的克隆” - 按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(但不能免费):
它可能不是最常用的 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=gitosis.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