本文概述
有时, 由于错误的提交, 从SVN存储库更新生产中的项目之前的安全感, 你将需要或希望在发布更新之前查看要提交, 更新的文件或目录, 以便验证是否你需要备份服务器中包含敏感信息的某些文件。
在本文中, 我们将与你分享两种方法, 以列出在不实际更新工作副本的情况下执行svn update时将更新的文件。
A.显示更新状态
要在执行svn update命令后列出要在工作副本中添加, 更新或删除的文件, 可以将svn status命令与–show-updates标志一起使用:
svn status --show-updates
或使用简短的语法:
REM First short syntax
svn status -u
REM Or even shorter
svn st -u
如果可用, 此命令将提供cli中的文件列表, 其中包含一些符号和修订, 例如以下输出:
第一列的符号表示使用以下符号添加, 删除或以其他方式更改了项目:
- ”-表示没有修改。
- 计划添加” A”项目。
- ‘D’-项目已计划删除。
- ‘M’-项目已被修改。
- ‘R’-项目已在你的工作副本中替换。这意味着已计划删除该文件, 然后已计划将其替换为同名新文件。
- ‘C’-项目的内容(相对于属性)与从存储库收到的更新冲突。
- ‘X’-由于存在外部定义, 因此存在该项目。
- ‘I’-项目被忽略(例如, 使用svn:ignore属性)。
- ‘?’ -该项目不受版本控制。
- ‘!’ -缺少项目(例如, 你在不使用svn的情况下将其移动或删除了)。这也表明目录不完整(签出或更新被中断)。
- ‘〜’-项目版本化为一种对象(文件, 目录, 链接), 但已被另一种对象取代。
第二列说明文件或目录属性的状态:
- ”-无修改。
- ‘M’-此项的属性已被修改。
- ‘C’-该项目的属性与从存储库收到的属性更新冲突。
仅当工作副本目录被锁定时, 才会填充第三列:
- ”-项目未锁定。
- ‘L’-项目已锁定。
仅当计划将历史记录与历史记录相加时, 才会填充第四列:
- ”-没有预定的提交历史记录。
- ‘+’-预定提交的历史记录。
仅当相对于其父项切换项目时, 才会填充第五列:
- ”-项目是其父目录的子级。
- ‘S’-项目已切换。
第六列填充了锁定信息:
- ”-使用–show-updates(-u)时, 这表示文件未锁定。如果未使用–show-updates(-u), 则仅表示该文件未锁定在此工作副本中。
- ‘K’-文件已锁定在此工作副本中。
- ‘O’-文件被另一个用户或另一个工作副本锁定。仅在使用–show-updates(-u)时显示。
- ‘T’-文件已在此工作副本中锁定, 但是该锁定已”被盗”并且无效。该文件当前已锁定在存储库中。仅在使用–show-updates(-u)时显示。
- ‘B’-文件已在此工作副本中锁定, 但是该锁定已被”破坏”并且无效。该文件不再被锁定。仅在使用–show-updates(-u)时显示。
仅当该项目是树冲突的受害者时, 才会填充第七列:
- ”-项目不是树木冲突的受害者。
- ‘C’-项目是树木冲突的受害者。
第八列始终为空白。过时的信息显示在第九列中(仅当你传递–show-updates(-u)选项时):
- ”-工作副本中的项目是最新的。
- ‘*’-服务器上存在该项目的较新版本。
B.空转合并
或者, 如果你的工作中没有缺少的子树, 则可以使用以下命令列出要添加, 删除或更新的文件:
svn merge --dry-run -r BASE:HEAD .
此方法不会列出有关文件的详细描述, 而是列出文件的列表以及有关项目将发生的简短描述。
编码愉快!