我是Subversion的长期用户,将尝试使用Git。我已经阅读了一些内容并了解了分布式特性-我可以看到很多好处。
但是,我喜欢中央服务器的想法,该服务器可以充当备份,记录系统等角色,同时仍将Git用于本地分支和共享。我不是在做一个开源项目,所以我不能使用Github(不付费),所以我的问题确实是:运行本地git服务器的最佳实践方法是什么?
我意识到这可能与标准的Git使用模式背道而驰,但这对我的项目很有用。但是,我可能忽略了任何担心。
谢谢!
我是Subversion的长期用户,将尝试使用Git。我已经阅读了一些内容并了解了分布式特性-我可以看到很多好处。
但是,我喜欢中央服务器的想法,该服务器可以充当备份,记录系统等角色,同时仍将Git用于本地分支和共享。我不是在做一个开源项目,所以我不能使用Github(不付费),所以我的问题确实是:运行本地git服务器的最佳实践方法是什么?
我意识到这可能与标准的Git使用模式背道而驰,但这对我的项目很有用。但是,我可能忽略了任何担心。
谢谢!
Answers:
您可以只设置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)这应该为您做好准备。
git init --bare project.git吗?
尝试GitLab
我曾经用过的最好的git GUI工具。它与GitHub非常相似。
它是开源的(MIT许可证),是安装最多的git管理软件,安装量超过25.000。它具有每月发布的版本,并拥有超过375个贡献者的活跃社区。您可以在自己的服务器上拥有无限的私有,内部和公共存储库。它是在大多数Unix平台上运行的Ruby on Rails应用程序。
如果您不介意命令行混乱,在需要在不同存储库上设置不同访问权限的公司环境中工作时,gitolite是绝对的选择。这是@Chris提到的较新版本的gitosis。
这是作者网站的摘要:
Gitolite允许您在服务器上使用一个用户来托管许多git存储库,并提供对许多开发人员的访问权限,而无需向他们提供真实的用户ID或对服务器的外壳访问。这样做的基本法宝是ssh的pubkey访问权限和authorized_keys文件,其灵感来自一个名为gitosis的较旧程序。
Gitolite可以限制谁可以读取(克隆/获取)或写入(推送)存储库。它还可以限制谁可以推送到哪个分支或标签,这在公司环境中非常重要。无需root权限即可安装Gitolite,并且除了git本身和perl外,没有其他软件。
它具有相当全面的功能集,但是我非常喜欢的一件事是,每天的配置编辑都是通过特殊的git存储库完成的。也就是说,添加用户只是
当需要通过浏览器查看代码时,gitolite支持使用gitweb“同步”配置。或者,如果您更喜欢cgit,它是用C编写的git的非常好的Web前端,那么您应该看看此how-to。
git instaweb --httpd=webrick
来自git scm书
将其与此处描述的用于分布式开发的方法相结合(详细描述的概念归功于datagrok)
我已经发布了这个推文,但我认为它可以使用一些扩展:
启用分散的git工作流程:git config alias.serve“守护程序--verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /”
假设您使用的git工作流程涉及使用一个核心的“官方”存储库,该存储库将更改从中拉入和推入。我敢肯定,许多公司都会这样做,就像许多Github等git托管服务的用户一样。
假设该服务器或Github出现故障了。
毕竟,不用担心,使用git的原因之一是您可以在本地克隆中获得整个项目历史的副本。
在等待操作团队使服务器恢复正常工作的同时,您可以继续进行编码和提交。自我提示:为运营团队购买甜甜圈。
但是,如果在此停机期间,您想与同一仓库中的另一个可能不是git专家的人合作,该怎么办?
或者,如果不是您和您的合作伙伴在现场,而是因为某种原因而无法让您的VPN连接到您的官方存储库,该怎么办而不是停机?
或者,如果您和您的合作者正在做出一些实验性的更改,即使您可以访问,但又不想将未完成的混乱推送到官方中央存储库,该怎么办?(甚至没有作为功能分支。)也许您正在清理灾难性的基础变更或合并,分支遍布各处。
嗯,您可能已经知道git是一个“分布式”版本控制系统。
即使您可能在工作流程中使用中央“官方” git仓库,您仍然可以以对等方式使用git,在这种情况下,您和您的协作者可以简单地彼此建立和共享提交,而中央服务器甚至不必知道。
那么,如何获得分支并提交给分支,反之亦然?
您可能也可以想到其他方法。但是,有一种超级简单的方法:如果您可以在网络上看到对方,则可以启动一次性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像这样使用新的:
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一次执行提取和合并,如果您在功能分支上一起工作,则很有用。
但是请注意,如果在存储库中保守秘密,则不应在敌对网络上执行此操作,因为没有身份验证。它不会宣告它的存在,但是任何拥有端口扫描器的人都可以找到它,连接到它并克隆您的存储库。
但这不是超级危险,因为默认情况下它是只读的。git daemon如果您认为要启用写访问权限,请仔细阅读手册页。如果要获取协作者的提交,将其保留为只读状态,并让协作者也运行此命令更加安全,这样您就可以从他们那里获取信息。
切线相关:关于一次性服务器,如果要通过HTTP临时共享一堆静态文件,请执行以下操作: python -m SimpleHTTPServer
如果您需要优质,便捷的GIT服务器,则必须尝试GitBlit。我也使用gitolite,但它仅是服务器,借助GitBlit,您可以将服务器,管理,存储库合而为一。经理... URL:http : //gitblit.com/
https://rhodecode.com是Git&Mercurial的开源Web应用程序,可以很容易地在任何操作系统下安装(包括安装程序)。
RhodeCode(新版本称为RhodeCode Enterprise)增加了缺少的Git功能(如代码审查),并且通常来说非常快速且可靠。
您还可以安装Indefero,它是GoogleCode的GPL克隆,因为它同时支持Subversion和Git,因此可以顺利过渡。我是Indefero的作者。
您甚至可以将GitHub安装在本地服务器上(但不是免费的):
它可能不是最常见的 git服务器设置,但是由于使用了不同的布局,工具,镜像和权限方案,我想说Gerrit是企业存储库的一个非常可靠的替代方案,这似乎令人惊讶,因为它被称为a代码审查工具。我们开始将其用作代码审查,并逐渐成为我们的主要存储库,弃用了g3 / gitolite
此外,它还用于大型项目(例如android,chrome),因此可以缩放,并且现在相当稳定。如果要允许绕过代码检查部分,只需给您的用户PUSH权限。
对于远程托管正如其他人所说,bitbucket.org提供免费的私有存储库,我一直在使用它而没有任何问题。
对于本地或LAN网络, 我将添加一个scm-manager.org(一个可执行文件,安装起来非常简单,它是在Java上制作的,因此可以在Linux或Windows上运行)。以防万一您安装它,这些是默认密码。
Username: scmadmin
Password: scmadmin
同时,Mercurial托管网站Bitbucket也已开始提供Git存储库。
因此,如果您不需要本地服务器,而只需在某个中央位置免费托管私有Git存储库,则IMO Bitbucket是最佳选择。
免费获得免费的私人和公共Git和Mercurial存储库。
唯一的限制是,在免费计划中,最多只能有五个用户可以访问您的私有存储库(更多则需要付费)。
有关更多信息,请参见https://bitbucket.org/plans!
如果您只想将存储库放在一个中央位置,那么使用Git这样的分布式版本控制就很容易了:
您可以将中央存储库放在中央计算机上的某个共享文件夹中,每个人都可以从那里克隆它。
如果您想在本地服务器上建立一个“真实的”网站,我知道Git托管网站http://repo.or.cz。
它的功能似乎少于GitHub,但与GitHub不同,您可以获取源代码并将其托管在自己的本地服务器上。
免责声明:我只读过repo.or.cz,我自己从未尝试过!
要补充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
http://code.google.com/p/luna-tool/是Scala应用程序,它实现了我所需的大部分github部分