Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
回购协议(SVN、GIT)是如何运作的?_Svn_Version Control_Branch - Fatal编程技术网

回购协议(SVN、GIT)是如何运作的?

回购协议(SVN、GIT)是如何运作的?,svn,version-control,branch,Svn,Version Control,Branch,我几乎每天都在读,主要是关于源代码控制的文章。我有几个问题。我将以SVN为例 1) 有一个团队(小的,大的物质)。早上每个人都检查代码开始工作。中午时,人员A提交,而人员B仍在处理。当B犯了什么错误?人员B如何知道有更新的文件 2) 我假设第一个问题的答案是“运行一个更新命令,它会告诉你”,好吧,这样人员B就会发现他们整个上午都在处理的文件发生了变化。当他们看到udpated文件时,似乎某人为了更好的性能重写了该文件。B是做什么的?好像一整天都在浪费时间。或者,如果他们提交了他们的版本,那么这是

我几乎每天都在读,主要是关于源代码控制的文章。我有几个问题。我将以SVN为例

1) 有一个团队(小的,大的物质)。早上每个人都检查代码开始工作。中午时,人员A提交,而人员B仍在处理。当B犯了什么错误?人员B如何知道有更新的文件

2) 我假设第一个问题的答案是“运行一个更新命令,它会告诉你”,好吧,这样人员B就会发现他们整个上午都在处理的文件发生了变化。当他们看到udpated文件时,似乎某人为了更好的性能重写了该文件。B是做什么的?好像一整天都在浪费时间。或者,如果他们提交了他们的版本,那么这是在浪费a个人的时间

3) 什么是树枝

谢谢,如果有人知道一个外行术语pdf或其他解释它的东西,那就太棒了

  • 人员B可以从SVN进行修改检查。事实上,我非常确定有一些工具可以每隔几分钟检查一次修改并提醒您
  • 它们将更改合并在一起
  • 基本上,当您正在进行突破性的更改时,您希望了解您的工作副本的状态,并在其他所有人的工作副本(主干)之外进行更改。所以你做了一个分支。这样,如果其他人愿意,他们可以在分支上工作,但主要的好处是他们可以在主干中工作,而不用担心它,然后在完成了那次破坏性的更改后,您可以将分支合并到主干中

  • 1和2取决于您使用的源代码管理,但是必须执行某种类型的合并。分支是从主干分叉的代码版本(主版本)

    我会说,经常承诺。在每次提交之前,更新

    我建议阅读本文档,它很好地解释了集中式和分散式(更好)版本控制系统的不同可能的工作流程:

    1和&2)
    SVN:当B尝试提交时,会出现一个错误,表明他没有最新版本的代码。他需要进行一次
    svn更新
    ,并将人员A所做的更改与他自己的更改合并。看见

    GIT:因为您有自己的本地存储库,所以可以自由提交。只有当您将(
    git push
    )更改推送到远程存储库时,您才能合并。看

    (三)

  • 人员B在运行更新或尝试提交到服务器时知道发生了更改
  • 这个过程称为合并。大多数系统都非常智能,并尝试为您合并。但是,有时会发生冲突,在这种情况下,会通知该人员并要求其解决冲突。如果人员A和B都修改同一文件中的同一行代码,则会发生这种情况

  • 对于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合并中的痛苦

  • 在SVN中,当B尝试更新其副本或文件时,B将知道A的更改
    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