svn删除已删除的文件

Dón*_*nal 39 svn

我有一个SVN项目的工作副本.应用程序从此工作副本中删除文件.当我使用SVN命令行提交工作副本时,我想从存储库中删除这些已删除的文件.

如果我使用svn commit它提交工作副本不会从项目中删除文件(因为它们没有在本地删除svn delete.有没有办法我可以告诉SVN删除(从存储库)任何缺少的文件工作副本?

naa*_*aab 67

用一个

svn status
Run Code Online (Sandbox Code Playgroud)

它将列出工作副本的更改.(已删除的文件以!开头.)

然后你可以 :

svn delete file_to_del1 file_to_del2 etc
Run Code Online (Sandbox Code Playgroud)

最后提交

您还可以编写一个小片段来自动执行此操作:

svn status | grep '^!' | awk '{print $2}' | xargs svn delete
Run Code Online (Sandbox Code Playgroud)

并最终添加一个别名:

alias svn_precommit="svn status | grep '^!' | awk '{print $2}' | xargs svn delete"
Run Code Online (Sandbox Code Playgroud)

作为旁注:我可以在文件名中使用变量支持空格/ @来复制代码片段.

但是为什么要在SCM存储库中的Linux上创建这样的文件?建议不要在Linux上的目录/文件名中放置空格.

管理此类文件的每个代码段都过于复杂,只是因为您需要""而不是"_".

  • 这是一个固定的文件(也可以解决文件名中@的问题):`svn st | grep'^!' | awk'{$ 1 =“”; 打印“ --force \”“ substr($ 0,2)” @ \“”}'| xargs svn delete` (2认同)

Mic*_*ens 6

您的问题是措辞(有什么方法可以告诉SVN从存储库中删除工作副本中缺少的任何文件吗?)实际上是相关问题svn命令的重复删除所有本地丢失的文件.为了回答这个问题,我提供了一个单行的PowerShell脚本,让您自动识别并从存储库中删除必需的文件.为方便起见,我在这里重现它:

svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }
Run Code Online (Sandbox Code Playgroud)

当然,这假定您使用的是Windows.如果您使用的是Linux/Unix,是一个类似的解决方案.

但是,当你添加你的问题的第二部分时,你无意中透露:-)在后面的评论中 - 有没有办法在提交时自动发生这种情况? - 然后你的问题是独一无二的.

我可以看到回答第二部分的唯一途径是使用预提交钩子,即在启动提交时但在提交本身实际发生之前执行的钩子脚本.通常,您将使用预提交挂钩来验证某些条件集,并允许提交继续或终止.唉,我认为修改提交过程中提交的文件集是不允许的,更不用说是可取的了.但我没有记录这一点,所以你可能想进一步挖掘这一点.

2012.06.19澄清每个Don的评论

Don是正确的,你需要一个客户端钩子,而不是服务器端钩子,因为要处理的已删除文件在客户端上.命令行svn没有此选项,但TortoiseSVN确实提供了客户端钩子.实际上,在我阅读了引用的手册页后,我被提醒说TortoiseSVN不仅提供了预提交钩子,而且它还提供了一个start-commit钩子,这对于这种情况是理想的.不同之处在于,您打开提交对话框之后以及按下"确定"以尝试执行提交之后运行预提交挂钩.另一方面,start-commit钩子在提交对话框打开之前运行.因此,使用钩子脚本,当您看到要提交的文件列表时,它将包括它将要删除的文件!