与多个开发人员在同一个任务工作正确的git的工作流程方案(Proper git workflow s

2019-07-19 20:24发布

我对我们的网络开发公司球队的领袖,我想实现我们的团队Git的工作流程。 阅读文档和文章,我发现下面的结构对我们有好处:

我们有一个到位桶的储存库。 分支被认为只包含稳定的代码。 每个开发必须建立自己的分公司,并实现在自己的分支部件/错误修正。 一旦他决定,他的代码是准备好了,他创建了一个很好分支历史(用重订,修订,摘樱桃等),并将其推至到位桶,在那里创建了一个拉请求主分支。 QA验证功能和批准(或不批准),然后我验证码,如果它是确定的,我自己的工作合并到主站(由快进或重订基期获得更好的提交历史)。

但是,这个方案是好的只有在情况下,当一个开发人员处理的一个分支。 在我们的例子中,我们几乎总是有两个开发商为一个分支,因为一个开发人员都在服务器端 (PHP),另一个- 客户端 (HTML / CSS / JS)。 这两个在某种程度上应该合作,在船长均属历史如何保持清洁?

服务器dev目录中创建的HTML文件的基本结构和客户端开发需要得到这种结构。 按道理将是服务器的开发,以创建一个分支,并为客户开发创造他自己的分支,基于服务器的Dev分支。 但是,这意味着,该服务器开发需要发布自己的分公司到位桶,这将使得他不可能变基或改变承诺 ,那些已经公布。

另一种选择是等待,直到服务器开发完成他的工作,出版分支漂亮提交历史,忘掉它,只有经过客户端开发开始于这个部门工作,但这样会造成时间延迟,这更是雪上加霜。

你是如何处理你的工作流,协作?

Answer 1:

我真的不能讲到的在您的文章中描述的方法的优点,但我能描述我们如何在我们在工作中使用的工作流程解决协作编码。

我们使用的工作流程是许多分支之一。 我们的结构是这样的:

法师是金; 只有合并主接触它(详见第一个位)。

有一个Dev分支,从最初大师拍摄,所有的开发者工作过。 而不必每开发一个分支,我们做出特色,或车票,从开发分支。

对于每一个谨慎的功能(错误,增强等),一个新的本地分支,从开发制造。 开发人员不必在同一分支上工作,因为每一个特性分支的作用域只什么单个开发人员正在研究。 这是Git的廉价分支就派上用场了。

一旦该功能已准备就绪,它合并了本地回开发和推到云(到位桶,Github上,等等)。 每个人都通过经常拉动开发保持同步。

我们是按周发布时间表,所以每星期,QA已经批准了Dev分支后,释放分支的名称中的日期作出。 这是在生产中使用的分支,取代上周发布分支。

一旦发布分支是由QA生产验证,发布分支合并到master(和开发,只是为了安全起见)。 这是我们接触大师唯一的一次,确保其尽可能干净。

这非常适用于我们拥有一支由12希望它有所帮助。 祝好运!



Answer 2:

我觉得还是没有人真正回答了如何在主题分支保持清洁的历史协作原来的问题。

正确的答案是对不起,你不能拥有一切在一起 。 您只能新郎您的私人当地的历史,你发布的东西给别人,你应该最重要的是工作后。

你可以在你的具体情况做其中服务器开发并不关心客户端开发的变化最好是从开发/特征的人在本地客户端叉枝和刚刚完成的功能之前,底垫在服务器上工作的首位一部分 - 或放松限制并切换到不同的工作流程,像你一样;)



Answer 3:

我们有一个主存储库和每个开发者都有的一个分支。

分支被创建主要/ some_project,同样分行名称然后对每个开发者的叉,叉/ some_project创建。

(我们使用smartgit,我们也有一个是遥控器都被命名为“主体”和“叉”,而不是“出身”和“上游”这只是迷惑新用户的策略)。

每个开发者也有some_project命名的本地分支。

开发商本地分支some_project跟踪远程分支主/ some_project。

开发商做分支some_project当地工作,并推至其叉/ some_project,从时间到他们创造引入请求的时间,这是每个开发人员的工作如何被合并到主/ some_project。

这样,开发者可以自由拉/变基本地,推动他们的叉 - 这是相当多的标准叉的工作流程。 这样,他们让其他开发者的提交,并可能不时有来解决冲突奇。

这是很好,所有的需要,现在是出现在主/主持续更新合并的方式(例如紧急修复或some_project之前交付的其他项目已完成)。

为了acomplish这一点,我们指定一个“分支引”的作用是通过合并本地合并来自主更新到some_project在SmartGit(不拉,变基)。 这也有时会产生冲突,这必须得到解决。 一旦做到这一点的是开发商(分支引)力将其叉/ some_project分支,然后创建一个拉入请求合并成主/ some_project。

一旦拉请求被合并,一切都在主/主,新提交的,现在出现在主/ some_project分支(并没有被重订)。

因此,下一次每个开发人员是some_project和拉(回忆,他们的跟踪分支是校长/ some_project),他们会得到所有这些将包括东西从主/主合并了更新。

这听起来可能长篇大论,但它实际上是相当简单和稳健的(每个开发人员也只是从主/主本地合并,但它的整洁,如果一个人做的是,团队的其他成员生活在一个简单的世界很像单个开发人员的工作流程) 。



Answer 4:

您可能会看到Git的流动 ,这可能帮助你

http://nvie.com/posts/a-successful-git-branching-model/



Answer 5:

这将使得他不可能变基或改变承诺,那些已经公布。

这取决于你的听众。 “服务器开发”能够推动“基础结构”,以到位桶,让“客户开发”,将有机会获得它。 是的,这也可能意味着其他人将有机会获得这些“临时”的提交。

然而,这只会是一个问题,如果另一个用户从这些提交的一个分支,他们重建基础之前 。 在一个较小的项目/小用户群这些临时提交可能永远不会被注意到甚至在底垫中发生,因此否定了风险。

决定权在你,如果有人从这些临时提交分支的风险实在太大。 如果是这样,那么你就需要创建也许这些私人变化的第二个专用到位桶回购。 另一种选择是做合并提交 ,而不是垫底,不过这也并不理想。



Answer 6:

让我告诉你我们在这里做的,而多个开发人员在同一项目上工作(有时甚至在同一个控制器/模型/视图工作)。

首先我们的团队,领先的git-项目有两个分支

  1. 硕士(它是受保护的人,没有人可以把这里除了团队领导)
  2. 开发(所有开发人员可以在这里推)

他们告诉我们我们的当地环境工作,并创建提交每当我们完成分配的任务(一个或多个)之一。

现在,在晚上时间(或者说闭合时间 - 离开),我们这样做:

  1. Git的拉

即在同一项目上工作的每个开发人员拉出当前开发分支到本地(在早上做相同的 - 开始为一天)。

然后,团队领导告诉开发者提交所有代码和推动一个个跟着一个上拉。

对于前。

  • DEV1创建提交并推送至服务器
  • DEV2再次拉低,并创建提交和推
  • DEV3再次拉低,并创建提交和推
  • 等等..

现在的问题是冲突的:

  • 有时,同时从开发分支的git拉代码通知我们自动合并所有的冲突---这意味着git的自动应用于其他开发人员提出了新的变化
  • 但有时相同的git告诉自动合并失败,并显示一些文件名
  • 然后团队领导角色进入画面 - 他所做的是:“他回顾了所有列出的文件(在自动合并失败的过程)和手动合并冲突,并创建提交和推送服务器。

现在,如何合并手动:GIT只需更新与所有类似的内容冲突的文件:

<<< HEAD
New lines from server that you don't have is here shown
=====
Your current changes....
>>> [commit id]

团队铅更新文件分析这个后:

 New lines from server that you don't have is here shown
 Your current changes

并创建提交和推送。

同样是在今天上午,我们做拉(只是为了确保我们没有错过前一天的任何东西),这是我们在这里工作。



Answer 7:

要记住的规则是:

  • 有1个master和1 develop分支
  • 有功能分支产卵关闭的develop分支
  • 每次有版本准备QA测试,融入develop
  • 已发布分支产卵关闭的develop分支
  • 让错误修正为发布分支
  • 当你的版本准备QA测试,融入develop
  • 当你准备好版的制作 ,融入master ,并为它创建一个标签

下图是靶心遵循的战略在世界各地(来源:摘自队在这里 ):



Answer 8:

对于确切的问题,在同一个任务多个开发人员,简单的答案是任务是在集成分支该任务完成。 这“任务”分支一样处理“大师”或在平时的Git工作流程“开发”分支(因为大多数的答案在这里提供)。 这种集成分支中的“混帐功能科工作流程”处理别处阐述。

这个任务分支使用普通的Git命令,对任务共享代码的开发者的工作在哪里。

为了开发新的闪屏,主要开发人员(或人)不

git co master
git co -b feature-splash
git push origin feature-splash

每个开发此功能工作的作用:

git co master
git pull
git co feature-splash
git co -b my-feature-splash  // they can name their branch whatever

现在每个开发将开发自己的分支,创建对像GitHub上的中央的Git回购服务器上的功能溅合并拉请求。 就像它的神圣不可侵犯的“主”分支了。

当该功能完成后,该功能飞溅被合并到主。 当然,这个功能溅必须不断更新与主的新代码。 可以在功能溅使用基础重建的主人?

这不是我的本意。 我读到这在不同的地方。 请注意,在许多工作流程的文章这个任务的具体分支是不是一个真正的概念。 例如,在一篇文章中,我们有“功能分支通常只,而不是在原产地存在于开发商回购。” 也许这需要一个以上的开发任务总是被分解为子任务? 我想如果你知道未来,知道需要什么。



文章来源: Proper git workflow scheme with multiple developers working on same task