首页 > 解决方案 > SVN cmd 更新而不恢复文件

问题描述

我有一个 Windows 批处理,它将定期运行以从 SVN 添加/删除文件

我希望脚本执行以下操作:

  1. 从 SVN 中删除所有在 Windows(不是 SVN)中删除的文件
  2. 添加*.*尚未受版本控制的所有文件 ( )
  3. 提交所有更改
  4. 更新文件夹以确保文件夹是最新的。

我有以下批次:

:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\

:: Delete/Remove all missing files
svn status || ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }

:: Add new files
svn add *.*

:: Commit all changes
svn commit *.* -m ^"Committed on %date% %time%"

:: Update the folder
svn up --accept mine-full

new file.txt我在 Windows 资源管理器中自己删除文件后会发生什么

  1. 删除命令运行然后列出文件,如! new file.txt
  2. add 命令运行,如果有的话,它会添加所有新文件
  3. 犯罪
  4. 更新然后恢复文件new file.txt<-我不希望它恢复已删除的文件。

对于删除/删除部分,我还尝试了这两个命令:

svn status || grep "^\!" || sed 's/^\! *//g' || xargs svn rm
svn status || grep "^\!" | sed 's/^\! *//g' | gawk '{print "\""$0"\"" }' | xargs svn rm  ::includes whitespaces in filenames

输出:

C:\MyFolder>svn status   || ? { $_ -match '!\s+(.*)' }   | { svn rm $Matches[1] }
!       new file.txt

C:\MyFolder>svn add *.*
svn: Skipping argument: E200025: '.svn' ends in a reserved name
svn: warning: W150002: 'C:\MyFolder\old.txt' is already under 
version control
svn: E200009: Could not add all targets because some targets are already 
versioned
svn: E200009: Illegal target for the requested operation

C:\MyFolder>svn commit *.* -m "Committed on 2018-10-23 12:15:57.90"
svn: Skipping argument: E200025: '.svn' ends in a reserved name

C:\MyFolder>svn up --accept mine-full
Updating '.':
Restored 'new file.txt'
At revision 21.
Press any key to continue . . .

底线,文件夹必须同步到 SVN(备份),所以如果有文件添加/删除,它也必须在 SVN 中添加/删除

标签: windowsbatch-filesvn

解决方案


终于自己动手了。感谢https://stackoverflow.com/a/23944546/1876355中的@user3689460

我添加了svn delete "missing.list"其他它将missing.list文件添加到 SVN

这是我的最终批处理脚本,它可以工作:

:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\

:: Delete/Remove all missing files
svn status | findstr /R "^!" > missing.list
for /F "tokens=* delims=! " %%A in (missing.list) do (svn delete "%%A")
del missing.list 2>NUL
svn delete "missing.list"

:: Commit Deletion of missing files
svn commit -m "Deleted files from MyFolder on %date% %time%"

:: Add new files
svn add *.*

:: Commit all changes and additions
svn commit *.* -m ^"Committed MyFolder on %date% %time%"

:: Update the folder
svn up --accept mine-full

推荐阅读