我是一个长期使用Subversion的用户,现在打算尝试Git。我已经阅读了一些相关信息,了解到它的分布式性质,我也看到了许多好处。
然而,我确实喜欢中央服务器的想法,这样可以承担备份、记录系统等角色,同时仍然可以使用Git进行本地分支和共享。由于我不是在进行开源项目,所以我不能使用Github(除非付费),所以我的问题实际上是:运行本地git服务器的最佳实践是什么?
我知道这可能违反标准的Git使用模式,但它对我的项目将会很有用。欢迎提出我可能忽略的任何问题。
谢谢!
我是一个长期使用Subversion的用户,现在打算尝试Git。我已经阅读了一些相关信息,了解到它的分布式性质,我也看到了许多好处。
然而,我确实喜欢中央服务器的想法,这样可以承担备份、记录系统等角色,同时仍然可以使用Git进行本地分支和共享。由于我不是在进行开源项目,所以我不能使用Github(除非付费),所以我的问题实际上是:运行本地git服务器的最佳实践是什么?
我知道这可能违反标准的Git使用模式,但它对我的项目将会很有用。欢迎提出我可能忽略的任何问题。
谢谢!
您可以设置一个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
)。这样就为您设置好了。
试试GitLab
这是我用过的最好的 Git GUI 工具。它与 GitHub 非常相似。
它是开源软件(MIT许可证),是安装最多的 git 管理软件,已有超过25,000次安装。每月都会发布新版本,拥有超过375个贡献者的活跃社区。您可以在自己的服务器上拥有无限数量的私有、内部和公共存储库。它是一个运行在大多数 Unix 平台上的 Ruby on Rails 应用程序。
git instaweb --httpd=webrick
结合类似于此处描述的分布式开发方法(感谢datagrok清晰描述此概念)
我已经推特过了,但我认为它需要一些扩展:
启用去中心化的Git工作流: git config alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"
假设您使用涉及与核心“正式”存储库一起工作的Git工作流程,并将更改从中拉取和推送。我相信许多公司都这样做,像Github这样的Git托管服务的用户也是如此。
如果该服务器或Github短暂关闭,那就没关系了。毕竟,使用Git的原因之一是在本地克隆中拥有整个项目历史记录的副本。
您可以继续编码和提交,同时等待运营团队将服务器恢复正常。自我提醒: 为运维团队购买甜甜圈。
但是,在此期间,如果您想与另一个可能不是Git专家的人合作,该怎么办?
或者,除了停机时间之外,如果您和您的合作者在现场,并且由于某种原因无法让VPN让您连接到官方存储库怎么办?
或者,如果您和您的合作者正在进行一堆实验性更改,尽管您有访问权限,但您不想将未完成的混乱推入官方中央存储库中怎么办?(即使作为功能分支也不行)。也许您正在清理灾难性的重置或合并,分支随处可见。
好吧,正如您可能已经意识到的那样,Git是一种"分布式"版本控制系统。
即使您在工作流程中使用集中的“正式”Git存储库,您仍然可以使用点对点的方式使用Git,其中您和您的合作者只需相互构建和共享提交,并且中央服务器甚至无需知道。
那么,如何将您的分支和提交传输给他们,或者反之亦然?
您可能还可以想到其他方法。但有一
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
一次执行提取和合并,如果您正在共同开发一个功能分支,则非常有用。
但是请注意,如果您在存储库中保存秘密,则不应在敌对网络上执行此操作,因为没有身份验证。它不会广告其存在,但是任何具有端口扫描器的人都可以找到它,连接到它并克隆您的存储库。
但是默认情况下它是只读的,因此并不是非常危险。如果您想要获取合作者的提交,那么将其保持只读更安全,并要求您的合作者也运行此命令,以便您可以从中提取。
涉及到一次性服务器问题的旁系问题:如果您想通过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的作者。
这可能不是最常见的Git服务器设置,但通过尝试不同的布局、工具、镜像和权限方案,我可以说,一个非常可靠的企业存储库替代方案是Gerrit,这似乎令人惊讶,因为它更为人所知的是一个代码审查工具。我们开始使用它作为代码审查工具,慢慢地它成为了我们的主要存储库,取代了g3/gitolite。