我是一个很长时间的Subversion用户,它将尝试使用Git.我已经阅读了一些关于它并了解分布式特性 - 我可以看到很多好处.
但是,我确实喜欢中央服务器的想法,它可以承担备份,记录系统等的角色,同时仍然使用Git进行本地分支和共享.我不是在做一个开源项目,所以我不能使用Github(不付费),所以我的问题是:运行本地git服务器的最佳实践方法是什么?
我意识到这可能违反了标准的Git使用模式,但它对我的项目很有用.然而,我可能会忽略任何我可能忽略的担忧.
谢谢!
Chr*_*rle 202
您可以设置一个ssh服务器并在那里运行一个中央存储库.然后,所有开发人员只需同意(作为一项政策)在完成提交时推送到服务器.这是我工作场所的使用模式.很像CVS和SVN一样.
/var/gitroot
例如).mkdir project.git && cd project.git && git init --bare --shared=group
).git clone ssh://yourserver.com/var/gitroot/project.git && cd project
)git add README
)git commit -m "Initial import"
),git push origin master
)这应该为你做好准备.
Cra*_*aig 199
Gitorious是一个git的开源web界面,你可以在自己的服务器上运行,就像github一样:
更新:
http://gitlab.org/现在也是另一种选择.
更新2:
Pla*_*lov 74
试试GitLab
我用过的最好的git GUI工具.它与GitHub非常相似.
它是开源的(麻省理工学院许可证),是安装量最高的git管理软件,安装量超过25.000.它有月度发布和一个活跃的社区,有超过375个贡献者.您可以在自己的服务器上拥有无限的私有,内部和公共存储库.它是一个Ruby on Rails应用程序,可在大多数Unix平台上运行.
sti*_*gkj 39
如果您不介意使用命令行来解决问题,那么在企业环境中工作时,gitolite是一种绝对的享受,您需要在不同的存储库上设置不同的访问权限.它是@Chris提到的一种较新版本的gitosis.
以下是作者网站的摘要:
Gitolite允许您在服务器上使用单个用户来托管许多git存储库并提供对许多开发人员的访问,而无需为其提供真正的用户ID或shell访问服务器.这样做的关键魔力是ssh的pubkey访问和authorized_keys文件,灵感来自于一个名为gitosis的旧程序.
Gitolite可以限制谁可以读取(克隆/获取)或写入(推送)存储库.它还可以限制谁可以推送到哪个分支或标签,这在企业环境中非常重要.可以在不需要root权限的情况下安装Gitolite,并且除了git本身和perl之外没有其他软件.
它有一个非常全面的功能集,但我非常喜欢的一点是,所有日常配置编辑都是通过一个特殊的git存储库完成的.也就是说,添加用户就是
当需要通过浏览器查看代码时,gitolite支持使用gitweb"同步"配置.或者如果你喜欢cgit,这是用C编写的git非常好的web前端,那么你应该看看这个方法.
Mar*_*sel 15
git instaweb --httpd=webrick
Run Code Online (Sandbox Code Playgroud)
将它与此处描述的用于分布式开发的方法结合起来(对于描述良好的概念,信用到datagrok)
我已经发了推文,但我认为可以使用一些扩展:
启用分散的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服务器,他们可以用它们作为他们的遥控器来克隆,获取和拉动你的变化,当你是完成它.
实现这一目标的工具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
像这样使用你的新东西:
git serve
."准备隆隆声",它会报道.Git很糟糕.git fetch git://192.168.1.123/
"您还可以告诉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/
https://rhodecode.com是Git&Mercurial的开源Web应用程序,可以在任何操作系统下轻松安装(包括安装程序).
RhodeCode(新版本称为RhodeCode Enterprise)增加了缺少Git功能,如代码审查,一般来说它非常快速和可靠.
小智 8
它可能不是最常见的 git服务器设置,但是使用不同的布局,工具,镜像和权限方案,我会说企业存储库的一个非常可靠的替代方案是Gerrit,这可能看起来令人惊讶,因为它更为人所知代码审查工具.我们开始使用它作为代码审查,它慢慢成为我们的主要存储库,弃用g3/gitolite
此外,它被大型项目(例如android,chrome)使用,因此它可以扩展,现在相当稳固.如果您想允许绕过代码审查部分,请为您的用户提供PUSH权限.
对于远程托管正如其他人所说bitbucket.org提供免费的私有存储库,我一直在使用它没有问题.
对于本地或局域网网络, 我将添加一个scm-manager.org(一个可执行文件,安装非常简单,它是在Java上制作的,所以它可以在Linux或Windows上运行).如果您安装它,这些是默认密码.
Username: scmadmin
Password: scmadmin
Run Code Online (Sandbox Code Playgroud)
与此同时,Mercurial托管网站Bitbucket也开始提供Git存储库.
因此,如果您不需要本地服务器,只需要一些可以免费托管私人Git存储库的中心位置,IMO Bitbucket就是最佳选择.
免费,您可以获得无限的私人和公共Git和Mercurial存储库.
唯一的限制是,在免费计划中,不超过五个用户可以访问您的私人存储库(更多,您必须付费).
有关详细信息,请参阅https://bitbucket.org/plans!