首页 > 解决方案 > 共享代码文件夹的Git设置问题,保持工作流速度(Win10)

问题描述

对 Git 来说相当新——一直在使用 TFS 和简单的提交/推送/分支,因此感谢任何帮助——整天阅读和运行测试并开始认为我的要求可能无法实现。

办公室里有我们两个人;Dev 1 主要做编译的 C# 服务器代码,而 Dev 2 主要做网页相关的工作。然而,由于我们只有两个人,我们确实需要定期交叉,特别是使用客户端 Javascript 功能。

我们一直在为客户端代码进行源代码控制的“伙伴我正在研究 foo.js”方法,并且它工作了一段时间,但我们正在做更大的项目,它正在成为一种负担。

我们的设置如下,全部在内部网络上:

所以,这就是我想尝试并保持的快速开发周期,Dev 2 浏览到正在开发的站点,编辑共享驱动器上的脚本/css/html 文件,点击 F5,更新立即可见。这对于快速处理客户端代码来说是一个巨大的好处。

当 Dev 1 需要对某些需要更改样式的脚本功能进行更改时,通常会出现问题,两个开发人员都打开并保存了相同的文件,并且其中一个更改集丢失了。

所以我想阻止这种情况!但是据我了解,Git 要求开发人员拥有本地存储库,因此可以在不影响其他任何人的情况下进行更改,然后在提交时合并冲突?

我已经在本地服务器上设置了一个测试存储库并尝试了一些场景,但正如我所预料的那样,两个开发人员保存同一个打开文件的场景没有被跟踪,因为没有提交任何一组更改,所以和以前一样,只有最后一组更改在任何地方可见。

有什么方法可以跟踪同一物理文件的这些类型的更改?或者,如果没有,一个可以正确跟踪它们但至少保持尽可能接近上述工作流程的快速工作流程的设置?

标签: windowsgitversion-control

解决方案


使用分支。

Git 有一个非常好的分支系统。只需为您所做的工作创建一个分支 - 您甚至可以为您想要实现的每个功能创建一个分支。当你“完成”实现时,将分支合并回 master。因此,无论是——还是更多——开发人员都可以基于工作的主版本工作,并在其工作时将代码添加到公共代码库中。

因此,工作流程可能如下所示:

  • Dev1 和 Dev2 克隆 repo:git clone ....
  • Dev1 在功能 A 上工作:(git checkout -b A这会创建一个本地分支 A)
  • Dev2 适用于功能 B:git checkout -b B
  • Dev2 完成了他的工作:(git push在第一次调用时,您会收到一条有关上游的错误消息,错误消息包含您需要创建正确上游的行,只需将其复制)
    git checkout master; git pull回到 master 分支并将
    git merge B此合并 B 到 master
  • Dev1 需要更长的时间来完成这项工作,并且想要更新到最新的代码库: git checkout master; git pull; git checkout A; git merge masterDev1 的分支 A 现在在新的代码库上。

如果您必须同时处理不同的功能,git 中也有一个很好的系统。基于 master 分支,在其自己的文件夹中创建一个新分支 - 以便同时检出两个分支,无需git checkout <branch>在它们之间切换:
git worktree add -b <branch> <path>,就像git worktree add -b A ../A 现在您可以通过文件系统 () 切换到它cd ../A并工作两者(或您以相同方式创建的其他人)

如果您使用 github 或 gitlab,您可以保护master 分支并创建规则以将其合并到其中(称为pull requests)。使用appveyortravis-ci和其他服务,您可以让单元测试运行并免费提供拉取请求,单元测试不会失败。基于这样的工作流程,每个开发人员都可以在运行的代码库上工作。

关于冲突:只要两个版本没有修改同一行,它们就不会发生在那里的工作流。但是您在(本地)合并时收到一条消息,并且在文件中很好地解释了您可以做什么:(我们在每一行中创建一个带有 abc 的文件,在 master 中我们将 b 编辑为 e,在我们的分支 A 中我们编辑b 到 d,我们同时提交并将 master 合并到 A)

a
<<<<<<< HEAD
d
=======
e
>>>>>>> master
c

推荐阅读