Subversion-SVN checkout和SVN update命令之间有什么区别?

Subversion-SVN checkout和SVN update命令之间有什么区别?,svn,tortoisesvn,Svn,Tortoisesvn,我知道“SVN checkout”命令将从Subversion存储库中获取文件的初始信息,并将它们本地带到您的工作目录/副本中,“SVN update”命令将从存储库中获取文件的更改(如果其他人进行了更改) 在我看来,“更新”只是“签出”的一种特殊情况,也就是说,当签出发生时,它会获取所有文件,因为本地还不存在任何文件,因此所有文件都已“更改”,而在幕后,这些命令也在做大致相同的事情。我假设命令是单独存在的,只是为了简化 或者,这些命令之间是否存在其他差异,例如,“SVN update”get

我知道“SVN checkout”命令将从Subversion存储库中获取文件的初始信息,并将它们本地带到您的工作目录/副本中,“SVN update”命令将从存储库中获取文件的更改(如果其他人进行了更改)

在我看来,“更新”只是“签出”的一种特殊情况,也就是说,当签出发生时,它会获取所有文件,因为本地还不存在任何文件,因此所有文件都已“更改”,而在幕后,这些命令也在做大致相同的事情。我假设命令是单独存在的,只是为了简化


或者,这些命令之间是否存在其他差异,例如,“SVN update”get files是获取新文件(存储库中存在的文件,而您的工作副本中没有这些文件)还是仅更新现有文件?

update会将您签出的版本更新为存储库中的最新版本(或指定的其他版本)。如果您对工作副本进行了更改,则在更新后这些更改仍将存在。如果文件已添加或删除到存储库中,这将反映在您的工作副本中。如果本地副本和存储库中都有更改,SVN将尝试为您合并所有更改,如果不起作用,它将标记您手动解决的冲突。

Subversion使用隐藏的元数据目录来启用它提供的功能。这些.svn目录是将目录变成Subversion工作副本的原因——没有这些,它只是一个目录,Subversion无法用它做很多事情


更新是在Subversion工作副本上执行的操作;没有。svn目录,没有更新。签出是创建工作副本的操作。

在我看来,最大的区别在于
CHECKOUT
创建工作副本,而
update
会将更改向下带到现有工作副本。

svn checkout
会将存储库中给定目录中的所有版本化文件复制到给定版本(默认头部),并将其复制到本地机上。它还生成所有隐藏的.svn目录以及其中的元数据,使这些文件成为工作副本

svn export
从存储库中给定版本(默认标题)的给定目录复制所有版本化文件,并将其复制到本地计算机,但生成标准目录层次结构。(它不会生成可更新或签回的工作副本)


svn update
将更改应用于现有工作副本。如果在执行此操作时发现冲突,则会向用户发出警报,并且必须在提交任何更改之前解决此问题。使用
svn commit
时,要求提交的工作副本是最新的(即与HEAD相同的修订版)。

svn update
仅将文件从用户版本更改为最新可用版本。如果没有区别,就没有行动


但是checkout会创建一个新文件夹,并为该分支带来所有文件。如果我们经常更换我们工作的分支机构,结帐是一种很好的工作方式。更新是指当我们有一个主干并且需要由该主干上的其他人完成更新时

在使用SVN期间,签出和更新之间的显著区别在于:您只能使用签出命令一次来建立本地目录和存储库之间的关系(在版本控制下),并将所有文件从根存储库复制到本地工作目录。之后,使用签出更新本地目录中的副本将产生如下错误:

svn:E175002:无法连接到URL“https://*****”处的存储库

svn:E175002:选项请求在响应中返回了无效的XML:***。”


本地目录中更新当前版本的唯一方法是使用svn update命令。

同样相关的是“svn export”命令。这将从存储库中删除文件,但不会创建工作副本。您将无法从导出提交更改。它仅用于只读或“浏览”“类型用途?它把它们放在哪里,一些临时目录?不,它将是一个可写的副本,只是不包含任何隐藏的.svn目录来跟踪更改。确保您可以更新到最新版本。如果您将HEAD指定为修订,或者根本没有指定修订,svn update将执行此操作。我不确定您是否100%正确地确定在提交之前更新工作副本的前提条件。从技术上讲,我认为您/可以/提交而无需先更新。然而,我想这是/不/推荐的,应该非常小心地练习。此外,我不知道什么时候不首先更新就提交。@Dror是的,你是对的!最好的做法是在提交之前进行更新,尽管有时subversion在没有更新的情况下不会提交,但它会在提交之前提供更新弹出错误。IMHO这不会回答问题,因为此区别已经包含在问题中。很明显,这两个命令具有不同的语义,但是它们在技术上有什么不同呢?他们不是有效地做同样的事情吗,只是一个在开始,另一个在以后的时间点?你看到了什么svn版本的这种行为?我刚刚做了一个“重新签出”,看起来它只是将其解释为一个更新。我正在运行svn,版本1.8.9(r1591380)