SVN command to delete all locally missing files

2019-01-16 00:36发布

In SVN is there a command I can use to delete all locally missing files in a directory?

Or failing that, some way of listing only those files that are missing (or, in the more general case, have status A, D, ?, etc.)

标签: svn file-io
12条回答
对你真心纯属浪费
2楼-- · 2019-01-16 00:47

An alternative that works on Linux (bash) for to-be-removed files not containg spaces in path:

svn delete `svn status | grep ! | awk '{print $2}'`
查看更多
欢心
3楼-- · 2019-01-16 00:49

If you are using TortoiseSVN, just do a Check for Modifications, sort by the Status column, select all the entries marked missing, right-click to open the context menu, and select Delete. Finally, commit to publish the changes to the repository.

If you are on Windows, but prefer the command-line and enjoy dabbling in PowerShell, this one-liner will do the trick:

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

That is, filter the output to only those lines showing missing files (denoted by an exclamation at the start of the line), capture the associated file name, and perform an svn rm on that file name.

(Blog post Remove all “missing” files from a SVN working copy does something similar for Unix/Linux.)

查看更多
闹够了就滚
4楼-- · 2019-01-16 00:51

This shell script, recursively examines (svn status) directories in your project, removing missing files (as the question demands) and adding new files to the repository. It is some sort of "store into the repository the current snapshot of the project".

if [ $# != 1 ]
then
    echo  "usage: doSVNsnapshot.sh DIR"
    exit 0
fi

ROOT=$1

for i in `find ${ROOT} -type d \! -path "*.svn*" `
do

    echo
    echo "--------------------------"
    ( cd $i ; 
    echo $i
    echo "--------------------------"


    svn status | awk '  
            /^[!]/ { system("svn rm " $2) }
            /^[?]/ { system("svn add " $2) }
        '
    )
    echo

done
查看更多
小情绪 Triste *
5楼-- · 2019-01-16 00:51

It is actually possible to completely remove the missing.list from user3689460 and Paul Martin

for /F "tokens=* delims=! " %%A in ('svn status ^| findstr /R "^!"') do (svn delete "%%A")
查看更多
爷的心禁止访问
6楼-- · 2019-01-16 00:55

When dealing with a lot of files, it can happen that the argument input to xargs is getting too long. I went for a more naive implementation which works in that case, too.

This is for Linux:

#! /bin/bash
# 1. get all statii in the working copy
# 2. filter out only missing files
# 3. cut off the status indicator (!) and only return filepaths
MISSING_PATHS=$(svn status $1 | grep -E '^!' | awk '{print $2}')
# iterate over filepaths
for MISSING_PATH in $MISSING_PATHS; do
    echo $MISSING_PATH
    svn rm --force "$MISSING_PATH"
done
查看更多
Deceive 欺骗
7楼-- · 2019-01-16 00:56
svn st | grep ! | cut -d! -f2| sed 's/^ *//' | sed 's/^/"/g' | sed 's/$/"/g' | xargs svn rm
  1. svn status
  2. Filter only on missing files
  3. Cut out exclamation point
  4. Filter out trailing whitespaces
  5. Add leading quote
  6. Add trailing quote
  7. svn remove each file
查看更多
登录 后发表回答