我几乎每天阅读SO,大多数都有关于源代码控制的帖子.我有几个问题.我将以SVN为例.
1)有一个团队(小的,大的dosnt问题).在早上,每个人都会检查代码以开始工作.中午A人提交,而B人仍在工作.B人提交时会发生什么?B人将如何知道有更新的文件?
2)我假设第一个问题的答案是"运行一个告诉你的更新命令",好的,所以B人发现他们整个早上一直在工作的文件发生了变化.当他们看到udpated文件时,似乎人A已经重新编写该文件以获得更好的性能.B人做什么?好像整天都浪费时间.或者,如果他们提交他们的版本,那么浪费A人的时间?
3)什么是分支?
谢谢,如果有人知道一个外行人的术语pdf或解释它的东西会很棒.
1 && 2)
SVN:当B尝试提交时,会出现错误,表明他没有最新版本的代码.他需要做一个svn update
并合并A人所做的改变和他自己的改变.请参见如何解决SVN冲突.
GIT:因为你有自己的本地存储库,所以你可以自由提交.当您将git push
更改推送到必须合并的远程存储库时.请参阅解决GIT中的合并冲突
3)分支维基页面
1)假设有一个中央存储库(SVN和CVS的情况,但不一定是Git,Bazaar,Mercurial等),并且人A提交(然后推送提交,它只传输差异并提交消息到中央存储库),B人员应该手动更新它的副本.
2)在这种情况下,是的,有人会浪费时间.SCM系统(源代码管理)无法通过组织问题来解决团队问题.这当然是极端的情况.大多数情况下,每次提交只会有微小的差异(这里的次要定义是任何特定文件不应该被完全或部分重写),如果这些修改没有触及B正在处理的部分, SCM软件将能够将这些提交组合成一个工作文件.
另一种情况是两个人改变同一文件的相同区域(比如一个函数).当发生这种冲突时,SCM软件将帮助您选择您将使用哪些更改,甚至让您同时使用这两种更改.
3)分支是提交历史记录行:
feature-> /R-S-T master-> A-B-C-D-E-F bugfix-> \J-K-L-M
这里feature
,master
和bugfix
是树枝,信件是具体的提交.对于分支master
,最新的提交(每个文件的最新版本)是F
.另一方面,分支feature
的最新提交是T
,它只包括提交A
和B
分支master
.在提交所做的任何更改C
,D
,E
并且F
不包括在该特定分支.它可以改写为:
feature-> A-B-R-S-T master-> A-B-C-D-E-F bugfix-> A-B-C-J-K-L-M
现在,分支对于将工作流划分为不同的隔离区非常重要,并将工作重点放在特定部分上.想象分支master
是稳定代码所在的位置,想象一下我们正在分支上实现一个新功能feature
,该功能尚未准备好发布.现在假设插件系统已经改变,重要的错误修正被提交到master
分支,并且,因为我正在实现的功能依赖于插件系统,我需要将这些提交(C
通过F
)转移到分支feature
.为此,您rebase
向SCM软件发出一个(我在这里使用Git作为指导)命令,以便:
feature-> /R-S-T master-> A-B-C-D-E-F bugfix-> \J-K-L-M
所以现在你已经完成了分支机构的所有工作feature
.为了转移提交R
,S
并T
给master
你发出merge
命令:
master-> A-B-C-D-E-F-R-S-T bugfix-> \J-K-L-M
这是分支基础知识.你可以对分支机构做很多其他很酷的事情.希望不会太长并且有所帮助:P