SVN에는 디렉토리에서 로컬로 누락 된 모든 파일을 삭제하는 데 사용할 수있는 명령이 있습니까?
또는 누락 된 파일 만 나열하는 방법 (또는 일반적인 경우 상태가 A, D,? 등) 인 방법
SVN에는 디렉토리에서 로컬로 누락 된 모든 파일을 삭제하는 데 사용할 수있는 명령이 있습니까?
또는 누락 된 파일 만 나열하는 방법 (또는 일반적인 경우 상태가 A, D,? 등) 인 방법
답변:
TortoiseSVN을 사용하는 경우 수정 확인을 수행 하고 상태 열을 기준으로 정렬 한 후 표시된 모든 항목을 선택하고 missing
마우스 오른쪽 버튼을 클릭하여 상황에 맞는 메뉴를 열고 삭제를 선택하십시오 . 마지막으로 변경 사항을 저장소에 공개하십시오.
Windows를 사용하고 있지만 명령 줄을 선호하고 PowerShell에서 손쉬운 사용을 원한다면이 한 줄짜리가 트릭을 수행합니다.
svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }
즉, 누락 된 파일 (줄 시작 부분에 느낌표로 표시됨)을 표시하는 행으로 만 출력을 필터링하고 연관된 파일 이름을 캡처 한 후 해당 파일 이름에서 수행 svn rm
하십시오.
(블로그 게시물 SVN 작업 복사본에서 모든“누락 된”파일을 제거하면 Unix / Linux와 비슷한 작업 이 수행됩니다.)
svn up
합니까? 파일이 svn 서버에서 복원 되었기 때문에
Mac ( Darwin ) 또는 Linux를 사용하는 경우 다음 명령의 출력을 svn rm
누락 된 모든 파일에 파이프 할 수 있습니다. 전체 작업 복사본을 실행할 것인지 아니면 하위 집합 만 실행할 것인지에 따라 현재 작업 디렉터리를 적절한 디렉터리 나 하위 디렉터리로 설정할 수 있습니다.
svn rm
# 3의 출력을 인수로 사용하여 실행따라서 전체 명령은 다음과 같습니다.
svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm
참고 문헌 :
awk '{print " --force "$2"@"}'
하여 파일 이름이 포함되어있는 경우 @
(당신은 예를 들어 아이폰 OS 디바이스를 인 경우)
awk '{$1=""; print " --force \""substr($0,2)"@\"" }'
하고 트릭을 수행해야합니다 (추악한 것처럼 보이기 시작 함)
--force
xargs 부분에 넣지 않습니까?
svn st | grep ! | cut -d! -f2| sed 's/^ *//' | sed 's/^/"/g' | sed 's/$/"/g' | xargs svn rm
svn status
svn remove
각 파일-r
하여 @ ThorstenSchöning의 문제를 해결할 수 있습니다 xargs
(또는 인수가 주어지지 않으면 실행하지 마십시오). 또한 많은 수의 인수로 호출이 실패하기 때문에 인수의 수를 제한하고 제거를 일괄 처리해야합니다 (예 :) -n 500
. 그리고 마지막으로는 수행 인용이없는 이상은 같은 쉘 스페셜을 포함하는 파일에 대한 최적이다 $
-를보다 효율적으로 사용할 \n
구분 기호로는과에 인용 둡니다 xargs
:svn status | grep "!" | cut -d! -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn rm
방금 SVN 작업 복사본에서 모든“누락 된”파일을 제거하십시오 .
svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )
Windows 버전의 Paul Martin에게 감사합니다.
공백이있는 Windows 파일도 고려하도록 스크립트를 약간 수정했습니다. 또한 missing.list
파일은 마지막에 제거됩니다.
SVN bin 디렉토리 (%% PATH 환경에서 설정)의 svndel.bat에 다음을 저장하여 명령 프롬프트의 모든 폴더에서 호출 할 수 있습니다.
### svndel.bat
svn status | findstr /R "^!" > missing.list
for /F "tokens=* delims=! " %%A in (missing.list) do (svn delete "%%A")
del missing.list 2>NUL
del missing.list 2>NUL
나는 모든 새 파일을 직접 후 처음으로 삭제 된 파일을 제거 추가하기 때문에 추가 그래서 missing.list
svn을 위해 : svn delete "missing.list"
나를 위해 일한
이 쉘 스크립트, 반복적으로 시험 일정 ( svn status
) 프로젝트의 디렉토리 (질문의 요구로) 누락 된 파일 제거 및 저장소에 새 파일을 추가. 일종의 "프로젝트의 현재 스냅 샷을 저장소에 저장"입니다.
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
실제로 missing.list
user3689460과 Paul Martin에서 완전히 제거하는 것이 가능합니다
for /F "tokens=* delims=! " %%A in ('svn status ^| findstr /R "^!"') do (svn delete "%%A")
많은 파일을 처리 할 때 xargs에 대한 인수 입력이 너무 길어질 수 있습니다. 나는 그 경우에도 더 순진한 구현을 갔다.
이것은 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