2023-11-05 05:00:00

Git服务器像GitHub?

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

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

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

谢谢!


当前回答

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

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

Username: scmadmin
Password: scmadmin

其他回答

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

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

http://repo.or.cz,虽然相当好的倾向于一些用户的一些问题。

如果你是其中之一,我建议你试试http://unfuddle.com,因为你来自一个subversion背景。

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

骨架浏览器

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

尝试GitLab

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

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

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

https://enterprise.github.com/