Git工作流程:没有服务器

Ben*_*age 51 git git-workflow

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

我正在使用git进行小型个人项目(2-3人),在哪里可以找到最佳实践工作流程,以便在团队成员机器之间直接同步更改.另外,为什么我应该避免这种情况并建立一个"中央"服务器,有什么令人信服的论据呢?

谢谢,

ave*_*ell 41

取决于你所说的"服务器".Git将在没有中央服务器的情况下愉快地工作,尽管许多团队发现拥有中央存储库很方便.

如果通过"服务器",你的意思是"安装服务器软件",git也可以工作(中央存储库与否)没有任何特殊软件,通过ssh或文件系统.

有关可能的工作流程,请参阅此文档

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

许多开发人员使用的工作流程是所有开发人员将其更改"推送"(发送)到公共存储库,并从该存储库获取所有更改.像这样的东西:

  • 开发者A推向中心
  • 开发人员B推向中央
  • 开发人员C拉(从A和B获得更改)
  • 开发者A拉(从B获得更改)
  • ...

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

电子邮件的工作流程

您也可以使用git而不使用任何服务器,只需使用电子邮件.在这种情况下,流程将如下所示:

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

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

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

您可以设置git以使用多个"远程"存储库.需要注意的是,您永远不应该推送到已签出的存储库(即,某人正在使用的开发人员副本).所以在这种情况下,流程将是这样的:

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

恕我直言,这种类型的工作流程将很快导致混乱和崩溃.

  • 在第三个工作流程中,您如何实际从其他人那里获取更改?你如何克隆另一个人的本地回购?是否有网站完整描述了第三个工作流程的这些和其他细节? (4认同)
  • 是的,没关系,我自己弄清楚了。我只需要创建一个新用户,设置公共SSH密钥,然后为他们提供一个SCP样式的URL,即可访问我在文件系统中存储库的位置。因此,pull命令类似于“#git pull theirusername @ myhostname:〜myusername / path / to / myrepo”,如果没有专用服务器,则可以保证封闭源代码的私密性。这对于拉动很有用,但对于克隆却毫无用处。通过电子邮件等进行压缩是克隆存储库的一种简单得多的方法。 (3认同)
  • @Hashim - 使用“git push”将软件部署到服务器是一个非常特殊的情况,问题和答案都没有涉及到这一点,并且该场景与原始问题无关。另外,您的理解似乎是每个人都在开发诸如 Web 应用程序之类的东西,并且使用“git Push”部署软件是标准的事情。两者都不是真的:仍然有很多人根本不使用基于服务器的软件,然后 Web 应用程序的部署方式与“git Push”不同。 (2认同)

ral*_*nja 23

您首先需要做的是思考您已经使用的工作流程并配置git来使用它.一旦你有了一些东西,你可以微调它.无需将单独的计算机设置为服务器.如果您习惯于拥有一个中央存储库,那么您需要做的就是创建一个每个人都推送的裸存储库.为什么不在本地网络上?

中央回购:

mkdir foo.git
cd foo.git
git init --bare
Run Code Online (Sandbox Code Playgroud)

你的回购:

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
Run Code Online (Sandbox Code Playgroud)

其他回购:

git clone //path/to/central/repo/foo.git
Run Code Online (Sandbox Code Playgroud)

现在任何人都可以直接从主分支推送和拉取.这应该足以让你入门.

  • 这太棒了!非常感谢您提供清晰,详细的程序。很难找到 (2认同)

And*_*ett 10

你不一定需要在某个地方的物理服务器上放一份副本,但它可能有助于在某个地方建立一个"祝福"的存储库 - 让你的一个团队(可能在轮换中)负责收集和管理人们的变化.准备好被视为最终的.他们可以在其通常的存储库中保留一个分支,也可以在其本地系统上维护一个单独的存储库来存储主源.

作为一个具体的例子,考虑Linux和Linus Torvalds - 没有中央存储库,每个人都推动,但Linus维护一个存储库,其中包含他认为"准备好"的所有代码(以及其他几个人,对于不同的定义'准备').通过这种方式,您可以获得代码所在的规范定义,以及定义发布内容的位置.


Chr*_*röm 9

您应该将中央服务器设置为社交构造,而不是技术构造,以便每个人都知道在哪里可以找到最新的正式版本,而不会产生任何混淆.


Cor*_*all 8

如前所述,Git在没有集中式服务器的情况下工作得很好.但是,拥有一个中央服务器的一个很好的理由是,一旦完成一项功能,其他开发人员无需访问本地计算机即可获得一个"永远在线"的位置来推送代码.

例如,目前我在一个3人开发团队工作.我们都在笔记本电脑上工作.我们可以有一个工作流程,我们只是从彼此的机器中拉出来.但是,如果我在一个功能上工作并在每个人离开办公室之后承诺我的机会,并且我希望他们看看这个系统,除非我的笔记本电脑在网络上可用,否则他们无法做任何事情.如果这些人早于我(他们总是这样做),他们必须等到我的笔记本电脑重新上线.

如果我推送到像BitBucket或GitHub这样的东西,或只是办公室里的服务器,那么任何其他开发人员都可以简单地将他们下次在线时所做的更改拉出来.

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