Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows SVN cmd在不恢复文件的情况下更新_Windows_Batch File_Svn - Fatal编程技术网

Windows SVN cmd在不恢复文件的情况下更新

Windows SVN cmd在不恢复文件的情况下更新,windows,batch-file,svn,Windows,Batch File,Svn,我有一个Windows批处理,它将定期运行以从SVN添加/删除文件 我希望脚本执行以下操作: 删除从SVN在Windows(非SVN)中删除的所有文件 添加尚未受版本控制的所有文件(*.) 提交所有更改 更新文件夹以确保文件夹是最新的 我有以下一批: :: Go to my folder (already checked out as SVN folder) cd C:\MyFolder\ :: Delete/Remove all missing files svn status || ? {

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

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

  • 删除从SVN在Windows(非SVN)中删除的所有文件
  • 添加尚未受版本控制的所有文件(
    *.
  • 提交所有更改
  • 更新文件夹以确保文件夹是最新的
  • 我有以下一批:

    :: 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
    

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

  • 然后运行delete命令列出文件,如
    !新文件.txt
  • “添加”命令将运行,该命令将添加所有新文件(如果有)
  • 承诺
  • 更新然后还原文件
    new file.txt
    也许您可以使用“剪切”来执行删除部分,如下所示(从上一个输出的第9列开始接受所有内容):


    最后我自己把它修好了。感谢中的@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
    

    切向上,任何看起来像
    grep'x'| sed's/y/z/'
    的东西都可以重构为
    sed'/x/s/y/z/'
    ,任何看起来像
    grep'x'| awk'{y}'
    的东西都可以重构为
    awk'/x/{y}'
    (尽管注意到他们的regex方言在某些细节上有所不同,因此可能需要调整复杂的
    x
    )。尽管您显然使用的是一些玩具操作系统,但您可能需要阅读Unix-y
    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 status | grep "^\!" | cut -c 9- | xargs svn rm
    
    :: 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