2

Ok I know that this command works, but I have a silly question which I have not been to able answer.

Let's say I have a svn repository with a file named a.txt, and it has got a number in say X, User A checks it out and than locally changes it to Y in a.txt, Now he wants to commit it, So before doing it he does SVN update, So ideally what should happen is that SVN update should throw a conflict because both of these files are different. But in my case SVN update runs and says no current changes between the repository and working copy.,

Can anyone tell me is my reasoning is correct? In my opinion this scenario is exactly similar to standard svn conflict between two users

Edit: Looking at the answer of sharptooth, It is clear that my reasoning is incorrect, So can anyone please provide the flow overview of the svn update? i.e.If I have got R repo and W working copy, what does svn update look for while calculating diff?

4

3 回答 3

2

在 SVN 中,“签出”是一个仅限客户端的操作,而工作副本更改也是一个仅限客户端的操作,并且存储库永远不会知道它们。由于没有人更改文件的存储库副本,因此没有理由发生冲突。如果某个用户 B 在用户 A 上次更新(或签出)文件的那一刻和用户 A 执行相关更新的那一刻之间提交了对同一文件的更改,则会发生冲突。

于 2013-09-04T12:51:47.233 回答
2

您的本地工作副本包含当前版本的所有原始状态的文件。这些原始文件存储在 .svn 文件夹中。.svn 文件夹的大小本质上等于项目文件的大小。当您发出更新时,SVN 客户端会将此 .svn 文件夹更新为最新版本,然后尝试更新所有工作文件。如果某个文件被更改,那么它将尝试合并工作文件中的更改。如果它不能合并,它将抱怨冲突。如果新修订版和您的工作文件都更改了文件中的同一行,则会发生这种情况。然后,您必须解决冲突,牢记旧的、存储库中的新内容以及您自己的更改。

一旦您发出提交,SVN 客户端首先检查您的工作副本是否具有最新版本,以及是否已将您的工作文件与 .svn 文件夹中的文件之间的所有差异发送到服务器。如果一切顺利,它会将所有不同的工作文件复制到 .svn 文件夹中,因此 .svn 文件夹与服务器上的存储库同步。

于 2013-09-04T13:50:34.237 回答
0

'svn update' 没有显示冲突,因为首先它让用户默认覆盖他们的本地更改。这意味着如果其他用户在您本地更改文件的同一个地方提交了不同的事情,它将发生冲突,否则它不会发现冲突。可能您很清楚,即使在更新之后,您也可以通过运行“svn diff”来查看您的更改。

于 2013-09-04T13:23:21.880 回答