我想编写一个可以递归自动提交丢失文件的批处理文件。 如何编写批处理命令? 请帮助。
答案 0 :(得分:10)
使用svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )
有关更多命令行颠覆的信息,请参阅http://geryit.com/blog/2011/03/command-line-subversion-practices/
答案 1 :(得分:6)
以下批处理脚本应该SVN删除并提交标记为丢失的所有文件(即在本地删除但不使用SVN删除):
@echo off
svn status | findstr /R "^!" > missing.list
for /F "tokens=2 delims= " %%A in (missing.list) do (
svn delete %%A && svn -q commit %%A --message "deleting missing files")
缺少的文件由svn status
显示,字符为!
,例如:
! test.txt
然后,此脚本使用findstr过滤除丢失文件以外的任何修改。然后将此缺失文件列表写入文件missing.list
。
接下来,我们使用tokens=2 delims=
遍历此文件,从文件中的行中删除!
,让我们(希望)只是文件名。获得文件名后,我们会将其传递给svn delete
,然后传递给svn commit
。随意更改邮件内容。
请注意,我不测试了此脚本。特别是,我不知道如果你想要提交的文件之一在其路径中有空格会发生什么,或者如果遇到冲突的一部分会发生什么。将svn delete
和svn commit
替换为echo svn delete
和echo svn commit
可能会更好,这样您就可以看到此脚本在您的存储库中放松之前要执行的操作
答案 2 :(得分:0)
只需在工作副本的根目录中执行以下命令:
svn add . --force
svn commit -m"Adding missing files"
答案 3 :(得分:0)
ARST,
for /f "usebackq tokens=2*" %i in (svn st ^| findstr /R "^!") do svn del "%i"
几乎是正确的,但你忘了用括号括起来括起括号:
for /f "usebackq tokens=2*" %i in (`svn st ^| findstr /R "^!"`) do svn del "%i"
感谢简明的命令,无论如何。
答案 4 :(得分:0)
我的工作没什么变化..
@echo off
cd c:\project
for /f "usebackq tokens=2*" %%i in (\`svn st ^| findstr /R "^!"\`) do svn del "%%i %%j"
然后
svn commit . -m test
它对我有用。感谢。