Git工作stream程:没有服务器

git应该是一个分散的系统,但是我在google上发现的所有教程和最佳实践工作stream程都build议使用服务器(通常是github,或者自己设置)

我使用小个人项目(2-3人)的git,在哪里可以find一个最佳实践工作stream,直接在团队成员机器之间同步更改。 或者,为什么我应该避免这个问题,而build立一个“中央”服务器呢?

谢谢,

取决于你的意思是“服务器”。 Git会在没有中央服务器的情况下快乐地工作,尽pipe许多团队发现有一个中央存储库很方便。

如果用“服务器”来表示“安装服务器软件”,git也可以在没有任何特殊软件的情况下通过ssh或文件系统工作(不pipe是否是中央库)。

请参阅此文档了解可能的工作stream程

具有公共存储库的工作stream程

许多人使用的工作stream程是所有的开发人员将他们的变化“推送”(发送)到一个公共的存储库,并从该存储库中获取所有的变化。 像这样的东西:

  • 开发人员A推动中央
  • 开发商B推到中央
  • 开发人员C拉(从A和B获得更改)
  • 开发人员A(从B获取更改)

在这种情况下,中央存储库可以位于开发人员计算机,github或其他任何地方

电子邮件工作stream程

你也可以不使用任何服务器,只使用电子邮件。 在这种情况下,stream程将如下所示:

  • 开发人员A将更改作为电子邮件发送给团队
  • 其他开发人员应用来自电子邮件的更改

这甚至可以以半自动的方式完成

没有中央服务器的工作stream程

你可以设置git使用多个“远程”存储库。 需要注意的是,您绝对不应该推送到已签出的存储库(即某人正在使用的开发人员副本)。 所以在这种情况下,stream程将如下所示:

  • 开发人员A进行更改
  • 开发人员B进行更改
  • 开发人员C从A中获取更改
  • 开发人员C从B中提取更改
  • 开发人员B从A中提取更改
  • 没有人必须推动

恕我直言,这种types的工作stream程将迅速导致混乱和故障。

你首先需要做的是思考你已经有了什么样的工作stream程,并configurationgit来处理这个工作stream程。 一旦你有东西在运行,你可以微调它。 不需要将独立的计算机设置为服务器。 如果您习惯于拥有一个中央存储库,您只需创build一个每个人都可以使用的裸存储库。 为什么不在本地networking?

中央回购:

 mkdir foo.git cd foo.git git init --bare 

您的回购:

 mkdir foo cd foo git init // add files git add . git commit -m "Initial commit" git remote add origin //path/to/central/repo/foo.git git push origin master 

其他回购:

 git clone //path/to/central/repo/foo.git 

现在任何人都可以直接从主分支上推拉。 这应该足以让你开始。

你不一定需要在某个物理服务器上放置一个副本,但是可能有助于在某个地方build立一个“有福”的存储库 – 让你的团队(可能是轮换)负责收集和pipe理人们的变化准备好被视为最后的决定。 他们可以将分支保留在通常的存储库中,或者在本地系统上维护一个单独的存储库来存储主要来源。

作为一个具体的例子,考虑一下Linux和Linus Torvalds–没有任何人可以推荐的中央仓库,但是Linus维护着一个仓库,其中包含他认为已经准备好的所有代码(还有其他几个人,准备')。 这样你就得到了代码所在的规范定义,并且定义了你的版本。

你应该设置一个中央服务器作为一个社会build设,而不是技术上的,这样每个人都知道在哪里可以find最新的正式版本,而不会有任何混淆的可能性。

正如前面提到的,Git在没有中央服务器的情况下工作得很好。 但拥有一个中央服务器的一个很好的理由是一旦一个function完成后就有一个“永远在线”的地方推送代码,其他开发人员可以从中获取,而无需访问本地计算机。

例如,目前我在一个3人开发团队工作。 我们都在使用笔记本电脑。 我们可以有一个工作stream程,我们只是从对方的机器拉。 但是,如果我在某个function上工作,并且在所有人离开办公室后都有机会,并且希望他们看看这个系统,那么除非我的笔记本电脑在networking上可用,否则他们什么都不能做。 如果这些人比我早(他们总是这样做),他们必须等到我的笔记本电脑重新上网。

如果我推到BitBucket或GitHub之类的东西,或者只是在办公室的一个永远在线的服务器上,其他任何开发者都可以简单地将我在下次上线时所做的更改提取出来。

这对我来说是拥有一个中央服务器的主要原因,它确实不是Git的错,而是使用笔记本电脑的后果。

看看初学者的Git:明确的实践指南

部分“你如何build立一个共享的团队存储库?

尽pipe你想避免把更改推送到其他人的签出分支( https://git.wiki.kernel.org/index.php/GitFaq#Why_won.27t_I_see_changes_in_the_remote_repo_after_.22git_push。; 22.3F )。 你可能有一个你推送代码的集成分支,并合并其他人的更改。

我认为使用中央仓库的主要原因是它可以作为你所有代码的规范基础,而当你有3个或更多的代码时,可以有点难于推断你应该合并到什么中发展的分支正在进行。