2023-11-05 05:00:00

Git服务器像GitHub?

我是一个长期的Subversion用户,将尝试Git。我读过一些关于它的文章,了解分布式的本质——我能看到很多好处。

然而,我确实喜欢中央服务器的想法,它可以承担备份、记录系统等的角色,同时仍然使用Git进行本地分支和共享。我不是在做一个开源项目,所以我不能使用Github(不付费),所以我的问题是:运行本地git服务器的最佳实践方式是什么?

我知道这可能违反了标准的Git使用模式,但它对我的项目很有用。然而,任何我可能忽略的担忧都是受欢迎的。

谢谢!


您可以设置一个ssh服务器并在那里运行一个中央存储库。然后,所有开发人员只需同意(作为策略问题)在完成提交时推送到服务器。这是我工作场所的使用模式。很像CVS和svn。

找到存放存储库的地方(例如/var/gitroot)。 创建一个新的repo (mkdir项目。Git && CD项目。Git && Git init——bare——shared=group)。 然后在您的客户端,克隆远程repo (git克隆ssh://yourserver.com/var/gitroot/project.git && cd项目) 添加一些文件(git添加README) git commit -m“初始导入” Push (git Push origin master)

这应该会为你做好准备。


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

如果您想在本地服务器上建立一个“真正的”网站,我知道Git托管网站http://repo.or.cz。 它的功能似乎比GitHub少,但与GitHub不同的是,你可以获得源代码并将其托管在自己的本地服务器上。

免责声明:我只读过关于回购。cz,我自己从来没有试过!


对于简单的设置,您可以提供对中央服务器的SSH访问,并设置每个用户的工作目录从这个“原点”进行推/拉。这对于小型团队来说是最简单和常见的设置。

你也可以看看gitosis,它给你一个http服务器,并能够远程管理它。这样,您就不必向每个提交者授予ssh访问权限和所有必需的内容。


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

http://getgitorious.com/

更新:

http://gitlab.org/现在也是另一个选择。

更新2:

Gitorious现在加入了GitLab


为了补充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,因为你来自一个subversion背景。

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


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

https://enterprise.github.com/


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


如果您不介意使用命令行,那么在需要对不同存储库设置不同访问权限的公司环境中工作时,gitolite绝对是一种享受。这是@Chris提到的一种较新的胶质分裂症。

以下是作者网站上的摘要:

Gitolite lets you use a single user on a server to host many git repositories and provide access to many developers, without having to give them real userids on or shell access to the server. The essential magic in doing this is ssh's pubkey access and the authorized_keys file, and the inspiration was an older program called gitosis. Gitolite can restrict who can read from (clone/fetch) or write to (push) a repository. It can also restrict who can push to what branch or tag, which is very important in a corporate environment. Gitolite can be installed without requiring root permissions, and with no additional software than git itself and perl.

它有一个非常全面的功能集,但我非常喜欢的一点是,所有的日常配置编辑都是通过一个特殊的git存储库完成的。也就是说,添加用户只是

将用户添加到配置文件 添加用户的ssh密钥 提交更改 推到花岗石上 瞧,配置是实时的!

当需要通过浏览器查看代码时,gitolite支持与gitweb“同步”配置。或者如果你喜欢cgit,它是用C编写的git的一个非常好的web前端,那么你应该看看这个如何操作。


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


http://code.google.com/p/luna-tool/是scala应用程序,它实现了我需要的大部分github部分


尝试GitLab

这是我用过的最好的git GUI工具。它与GitHub非常相似。

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


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

所以如果你不需要本地服务器,只需要一些中心的地方,你可以免费托管私有Git存储库,我认为Bitbucket是最好的选择。

免费地,您可以获得无限的私有和公共Git和Mercurial存储库。 唯一的限制是在免费计划中,不能超过5个用户访问您的私有存储库(如果要更多,您必须付费)。 查看https://bitbucket.org/plans获取更多信息!


它可能不是最常见的git服务器设置,但在尝试了不同的布局、工具、镜像和权限方案后,我想说,对于企业存储库来说,Gerrit是一个相当可靠的替代方案,这可能看起来令人惊讶,因为它更广为人知的是一个代码审查工具。我们开始使用它作为代码审查,它慢慢成为我们的主要存储库,弃用g3/gitolite

It is straightforward to deploy (you basically drop the .war in a tomcat) has a web ui to manage repositories, groups and permissions (or a ssh cli) has a built-in java ssh and git implementation, so you have nothing else to set up ldap support for users and groups (usually a must for companies) a very flexible permission system (with project groups, permission inheritance, restricting read/write/branching/unreviewed writes/etc) code review capabilities (if you're into that thing) repo mirroring (to push some repositories to github or other public repo)

此外,它被用于大型项目(如android, chrome),所以它的规模,现在是相当坚实的。如果您想绕过代码审查部分,只需给您的用户PUSH权限。


如果你需要好的,简单的GIT服务器,那么你必须尝试GitBlit。 我也使用gitolite,但它只有服务器,与GitBlit你得到所有在一个,服务器,管理,回购。经理……URL: http://gitblit.com/


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

适用于本地或局域网网络 我将添加这个scm.manager.org(一个可执行文件,安装起来非常简单,它是在Java上制作的,所以可以在Linux或Windows上运行)。为了防止您安装它,这些是默认密码。

Username: scmadmin
Password: scmadmin

骨架浏览器

git instaweb --httpd=webrick

从git SCM书

将它与这里描述的类似分布式开发的方法相结合(为描述良好的概念,请参阅datagrok)

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

我已经在推特上发了这个,但我认为它可以进行一些扩展:

启用分散式git工作流:git配置别名。服务“daemon——verbose——export-all——base-path=”。Git——reuseaddr——strict-paths .git/"

假设您使用一个git工作流,该工作流涉及使用一个核心的“官方”存储库,您可以从中提取并将更改推入存储库。我相信很多公司都这样做,就像Github这样的git托管服务的许多用户一样。

比如服务器或者Github宕机了。

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

您可以继续编码和提交,同时等待操作团队使服务器恢复正常。自我提醒:给运营团队买甜甜圈。

但是,如果在停机期间,您想与另一个可能不是git专家的人在同一个存储库上合作,该怎么办呢?

或者,如果您和您的合作者在现场,并且由于某种原因无法让您的VPN连接到您的官方回购,而不是停机,该怎么办?

或者,如果您和您的合作者正在进行一系列实验性的更改,并且即使您拥有访问权限,也不想将未完成的混乱推到官方的中央存储库中,该怎么办?(甚至不是作为功能分支。)也许你正在清理一个灾难性的重组或合并,分支遍布各处。

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

即使您可能在您的工作流中使用中央“官方”git存储库,您仍然能够以点对点的方式使用git,在这种方式中,您和您的合作者只需相互构建和共享提交,中央服务器甚至不必知道。

那么,您如何获得分支并将其提交给它们,反之亦然?

You could use git's facilities for e-mailing patches. But that's a bit inelegant and requires some knowledge on their end of how to apply e-mailed patches. You could create an account on your own machine for your collaborator to ssh into. But maybe you don't have local root access, or maybe you don't trust them with SSH access to your box. You could clone your repo onto a thumbdrive and pass it back and forth. But that's rather tedious, especially if you happen to be on the same local network, and requires a thumb drive.

你可能还可以想到其他方法。但是有一个超级简单的方法:如果你们可以在网络上看到对方,你可以启动一个一次性的git服务器,他们可以用它作为他们的远程复制、获取和提取你的更改,当你完成它时杀死它。

实现这一点的工具是git守护进程,它有很多选项和功能,但为了启用这种简单的一次性“只提供我所在的回购”,使用它的方法是创建一个别名。我喜欢叫它git serve。运行:

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

使用别名实际上是至关重要的,因为git别名是在工作树的基本目录中执行的。所以路径。Git '将始终指向正确的位置,无论您在存储库的目录树中的哪个位置。

像这样使用你的新git服务:

运行git serve。“准备轰鸣,”它将报告。Git很厉害。 找出你的IP地址。假设它是192.168.1.123。 说“嘿,Jane,我还没准备好/不能将这些提交推到原点,但你可以通过运行git fetch git://192.168.1.123/来获取我的提交到你的克隆中” 当你不想再执行该回购时,按ctrl+c。

如果Jane还没有存储库的克隆,您还可以告诉她克隆git://192.168.1.123/ local-repo-name。或者,使用git pull git://192.168.1.123/ branchname进行一次获取和合并,如果你正在一起工作在一个特性分支上,这很有用。

但是请注意,如果您在存储库中保留秘密,则不应该在恶意网络上这样做,因为没有身份验证。它没有宣传它的存在,但任何拥有端口扫描程序的人都可以找到它,连接到它,并克隆您的repo。

但它并不是超级危险,因为默认情况下它是只读的。如果您想要启用写访问,请仔细阅读git守护进程手册页。在您想要获得合作者的提交的情况下,将其保持为只读要安全得多,并要求合作者也运行此命令,以便您可以从它们中提取。

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


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


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

RhodeCode(新版本称为RhodeCode Enterprise)增加了Git缺少的功能,如代码审查,通常来说非常快速和可靠。