2011-04-04 112 views
1

我只是想知道一些事情,我正在与其他几个程序员一起工作,我们都使用SVN作为项目,我将svn树下载到本地计算机上,并且每当我更新一些东西时我承诺,到现在为止,一切都很好。SVN承诺/更新存储库

如果:

  1. 我的工作我的本地版本,在XXX.cpp(VERSION1),而XXX.cpp的别人上传的版本2更新的东西,然后我上传我的版本,将我的“旧”版本覆盖较新的版本?

感谢,

回答

6

SVN将尽最大努力合并开发人员所做的更改。如果你在文件的不同部分工作,它很可能会处理这个没有问题。如果两个开发人员都在更改文件的相同行,或者由于某种原因合并比SVN处理更复杂,它会将文件标记为冲突,并要求您在您手动合并冲突(使用diff工具)尝试更新您的本地更改。

基本上,当您尝试提交时,SVN会告诉您有更新的更改,您应该先更新。当你更新它将在你的本地机器上进行合并。在提交之前,需要修复冲突的文件。一旦他们修复并且所有更改合并,您都可以提交。

0

我认为SVN会检测到当前文件与您正在使用的基本版本不匹配,并要求您进行手动合并。

0

它不会覆盖它,但您的修改版本将成为最新版本。您需要将您的更改从工作副本合并到以前的修订版本。

如果您正在使用相同代码库的更改进行单独的逻辑单元工作,我建议您分支您的任务并在完成后从分支合并到中继。

0

大多数情况下,SVN会尝试合并这些更改。如果这是不可能的,它会给你一个消息,说明你的提交失败了,你需要在尝试重新提交之前更新你的签出。

新的更新可能会导致需要解决的冲突。 虽然它不会覆盖以前的更改。

1

建议在提交之前始终更新。

+0

你的意思是说,更新我的本地版本,然后提交我自己的更改? – snoofkin 2011-04-04 12:39:51

+1

是的。这是为了获得可能发生的变化。通过更新,这些更改将由SVN合并(如果它不自动工作,则由您自行合并) – user492238 2011-04-04 12:46:48

2

这是版本控制软件的要点之一,这是会发生什么:

  • 有人会检查文件A
  • 别人试图文件检查A
  • SVN会尝试自动合并文件
    • 如果一切都很好,就喝一杯咖啡
    • 嗯哦,冲突检测(需要人工干预)
      • 变更是手工核对并确认了提交

最后一部分是在事情变得棘手 - 没有人愿意一直做这个。

另外,SVN有一个可怕的习惯,它在合并时有时会全部损坏源文件,污染代码为<----- mine<------ theirs左,右和中心 - 在所有情况下都需要注意。

有一些或情况可以解释,以帮助教育你在这方面,但是这涵盖了一般的想法和许多其他知识将与经验和实践。

+0

如果我们在办公室没有咖啡,该怎么办? – snoofkin 2011-04-04 12:38:56

+2

寻找新的雇主,结束。 – 2011-04-04 12:39:35

0

其实第二个开发者不知道在他提交之前文件是否被别人修改过。只要他提交了,它就会发出版本冲突的警告(因为他修改过的文件版本已被其他人修改过)。
然后你可以解决冲突,但我认为每个开发者都应该在每次提交之前执行SVN-UPATE,然后你可以克服任何不需要的情况。