Git 应该是一个去中心化的系统,但我在 Google 上找到的所有教程和最佳实践工作流程都建议使用服务器(通常是 GitHub,或者自己设置)
我正在将 git 用于小型个人项目(2-3 人),我在哪里可以找到直接在团队成员机器之间同步更改的最佳实践工作流程。
或者,为什么我应该避免这种情况,而是建立一个“中央”服务器,有哪些令人信服的论据?
Git 应该是一个去中心化的系统,但我在 Google 上找到的所有教程和最佳实践工作流程都建议使用服务器(通常是 GitHub,或者自己设置)
我正在将 git 用于小型个人项目(2-3 人),我在哪里可以找到直接在团队成员机器之间同步更改的最佳实践工作流程。
或者,为什么我应该避免这种情况,而是建立一个“中央”服务器,有哪些令人信服的论据?
取决于您所说的“服务器”是什么意思。Git 将在没有中央服务器的情况下愉快地工作,尽管许多团队发现拥有中央存储库很方便。
如果“服务器”是指“安装服务器软件”,那么 git 也可以在没有任何特殊软件的情况下通过 ssh 或在文件系统上工作(无论是否是中央存储库)。
许多人使用的工作流程是所有开发人员将他们的更改“推送”(发送)到一个公共存储库,并从该存储库获取所有更改。像这样的东西:
在这种情况下,中央存储库可以位于开发人员计算机之一、github 或任何其他地方
你也可以在没有任何服务器的情况下使用 git,只使用电子邮件。在这种情况下,流程将是这样的:
这甚至可以以半自动化的方式完成
您可以设置 git 以使用多个“远程”存储库。需要注意的是,您永远不应推送到已签出的存储库(即某人正在使用的开发人员副本)。所以在这种情况下,流程是这样的:
恕我直言,这种类型的工作流程将很快导致混乱和崩溃。
您首先需要做的是考虑您已经拥有什么样的工作流程并配置 git 以使用它。一旦你启动并运行了一些东西,你就可以对其进行微调。无需将单独的计算机设置为服务器。如果您习惯于拥有一个中央存储库,那么您需要做的就是创建一个每个人都推送到的裸存储库。为什么不在本地网络上?
中央回购:
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
现在任何人都可以直接从主分支推送和拉取。这应该足以让你开始。
您不一定需要将副本放在某处的物理服务器上,但在某处拥有一个“有福的”存储库可能会有所帮助——让您的团队中的一个(可能轮换)负责收集和管理人们的更改准备好被视为最终的。他们可以在通常的存储库中保留一个分支,也可以在其本地系统上维护一个单独的存储库来存储主源。
作为一个具体的例子,考虑 Linux 和 Linus Torvalds——没有每个人都推送到的中央存储库,但 Linus 维护了一个存储库,其中包含他认为“准备好”的所有代码(其他几个人也是如此,对于 ' 的不同定义准备好')。这样,您就有了代码所在的规范定义,以及定义发布内容的位置。
正如已经提到的,Git 在没有集中式服务器的情况下工作得非常好。但是拥有中央服务器的一个很好的理由是,一旦功能完成,其他开发人员可以在无需访问您的本地计算机的情况下从中提取代码,从而有一个“永远在线”的地方来推送代码。
例如,目前我在一个 3 人开发团队工作。我们都在笔记本电脑上工作。我们可以有一个工作流程,我们只是从彼此的机器中提取数据。但是,如果我在每个人都离开办公室后开发一项功能并提交我的机会,并且我希望他们看看这个系统,除非我的笔记本电脑已打开并在网络上可用,否则他们将无能为力。如果这些人比我早出现(他们总是这样做),他们必须等到我的笔记本电脑重新上线。
如果我推送到诸如 BitBucket 或 GitHub 之类的东西,或者只是办公室中始终在线的服务器,那么任何其他开发人员都可以在下次上线时简单地拉取我所做的更改。
对我来说,这是拥有中央服务器的主要原因,实际上这不是 Git 的错误,而是使用笔记本电脑的结果。
您应该将中央服务器设置为社会结构,而不是技术结构,以便每个人都知道在哪里可以找到最新的官方版本,而不会造成混淆。
“如何设置共享团队存储库?”部分
Git 在这种设置下工作得很好,尽管您希望避免将更改推送到其他人的签出分支(https://git.wiki.kernel.org/index.php/GitFaq#Why_won.27t_I_see_changes_in_the_remote_repo_after_.22git_push。 22.3F )。您可能有一个集成分支,您可以将代码推送到该集成分支,并从中合并其他人的更改。
我认为中央仓库被大量使用的主要原因是它可以作为你所有代码的规范基础,而当你有 3 个或更多时,你可能会更难推断你应该合并到什么发展的分支正在进行中。