回购协议(SVN、GIT)是如何运作的?
我几乎每天都在读,主要是关于源代码控制的文章。我有几个问题。我将以SVN为例 1) 有一个团队(小的,大的物质)。早上每个人都检查代码开始工作。中午时,人员A提交,而人员B仍在处理。当B犯了什么错误?人员B如何知道有更新的文件 2) 我假设第一个问题的答案是“运行一个更新命令,它会告诉你”,好吧,这样人员B就会发现他们整个上午都在处理的文件发生了变化。当他们看到udpated文件时,似乎某人为了更好的性能重写了该文件。B是做什么的?好像一整天都在浪费时间。或者,如果他们提交了他们的版本,那么这是在浪费a个人的时间 3) 什么是树枝 谢谢,如果有人知道一个外行术语pdf或其他解释它的东西,那就太棒了回购协议(SVN、GIT)是如何运作的?,svn,version-control,branch,Svn,Version Control,Branch,我几乎每天都在读,主要是关于源代码控制的文章。我有几个问题。我将以SVN为例 1) 有一个团队(小的,大的物质)。早上每个人都检查代码开始工作。中午时,人员A提交,而人员B仍在处理。当B犯了什么错误?人员B如何知道有更新的文件 2) 我假设第一个问题的答案是“运行一个更新命令,它会告诉你”,好吧,这样人员B就会发现他们整个上午都在处理的文件发生了变化。当他们看到udpated文件时,似乎某人为了更好的性能重写了该文件。B是做什么的?好像一整天都在浪费时间。或者,如果他们提交了他们的版本,那么这是
1和2取决于您使用的源代码管理,但是必须执行某种类型的合并。分支是从主干分叉的代码版本(主版本) 我会说,经常承诺。在每次提交之前,更新 我建议阅读本文档,它很好地解释了集中式和分散式(更好)版本控制系统的不同可能的工作流程:1和&2)
SVN:当B尝试提交时,会出现一个错误,表明他没有最新版本的代码。他需要进行一次
svn更新
,并将人员A所做的更改与他自己的更改合并。看见
GIT:因为您有自己的本地存储库,所以可以自由提交。只有当您将(
git push
)更改推送到远程存储库时,您才能合并。看
(三)
对于Git来说,您基本上是将整个项目从“主”分支复制到您自己的个人分支中,在那里您可以修改并提交对您自己的个人分支的更改,如果您认为这很好,您可以将您的个人分支与主分支合并。我下面所说的对svn有效,对于git或mercurial来说,情况略有不同(我会说更简单) 1) 在提交之前,人员B应在自己的本地副本中更新和合并更改(如果有更改,她也可以检查)。如果他只是尝试提交,她将收到一条消息,说明他的本地svn副本已过期 2) 人员B遇到了一些麻烦,因为合并将不容易(它不会由SVN自动管理,它将冲突)。。。如果真的太难的话,B将不得不重新考虑她的变化 这个问题实际上没有解决办法。某些版本控制系统允许某种类型的锁定,但它会引发其他问题(文件可能会被锁定很长时间,在这段时间内,除了锁柜之外,没有人可以处理它,即使是容易合并的更改)。只需经常提交一些小的更改,并与其他编码人员交谈(通过真实会议、IRC、电子邮件或任何其他方式),以避免发生这种情况 3) 分支在分布式版本控制系统中非常有用。它以残缺的形式存在于svn中。只需在另一个目录中复制当前repo的当前dir,这两个目录各自有自己的生命周期(例如,一个目录仅用于修复错误,另一个目录用于新功能和改进),并且在某个时候尝试合并两个repo之间的更改,就像尝试在新功能分支中移植修复错误一样,或者在旧分支中移植新分支的某些新功能 2)此时,B必须将A所做的更改与他自己的更改合并。如果他们处理过文件中代码的不同部分,那么源代码管理工具通常可以自动完成这项工作。如果它们的变化重叠,这可能会成为一项非常讨厌的任务,但这种情况很少发生
3) 分支就像是存储库的一部分的副本,您可以在其上独立于开发主线进行工作(提交更改)-这对于各种用途都很有用,例如,当您有旧版本时,您希望为其提供错误修复,而不必强迫用户更新到当前版本(大多数大型软件项目都会这样做)。您需要阅读更多有关SCM类工具的信息。您怀疑这种操作在开发环境中非常常见。下面是我对SVN和Git书籍的建议:
好的阅读:-)作为补充说明,如果您计划完全重写文件,通常有礼貌地让使用相同功能的团队成员知道如何避免tuckus合并中的痛苦
feature-> /R-S-T
master-> A-B-C-D-E-F
bugfix-> \J-K-L-M
feature-> A-B-R-S-T
master-> A-B-C-D-E-F
bugfix-> A-B-C-J-K-L-M
feature-> /R-S-T
master-> A-B-C-D-E-F
bugfix-> \J-K-L-M
master-> A-B-C-D-E-F-R-S-T
bugfix-> \J-K-L-M