[svn] Subversion 버전이 지정되지 않은 파일 자동 제거

누구든지 버전 제어를받지 않는 작업 복사본의 모든 파일을 재귀 적으로 제거하는 방법을 알고 있습니까? (자동 빌드 VMware에서 더 안정적인 결과를 얻으려면 이것이 필요합니다.)



답변

편집하다:

Subversion 1.9.0은이를위한 옵션을 도입했습니다 :

svn cleanup --remove-unversioned

그 전에이 파이썬 스크립트를 사용하여 다음을 수행합니다.

import os
import re

def removeall(path):
    if not os.path.isdir(path):
        os.remove(path)
        return
    files=os.listdir(path)
    for x in files:
        fullpath=os.path.join(path, x)
        if os.path.isfile(fullpath):
            os.remove(fullpath)
        elif os.path.isdir(fullpath):
            removeall(fullpath)
    os.rmdir(path)

unversionedRex = re.compile('^ ?[\?ID] *[1-9 ]*[a-zA-Z]* +(.*)')
for l in  os.popen('svn status --no-ignore -v').readlines():
    match = unversionedRex.match(l)
    if match: removeall(match.group(1))

일을 꽤 잘하는 것 같습니다.


답변

이것은 bash에서 나를 위해 작동합니다.

 svn status | egrep '^\?' | cut -c8- | xargs rm

Seth Reno 가 더 좋습니다.

svn status | grep ^\? | cut -c9- | xargs -d \\n rm -r

버전이 지정되지 않은 폴더 및 파일 이름의 공백을 처리합니다.

아래 설명에 따라 이것은 Subversion이 알지 못하는 파일에서만 작동합니다 (status =?). Subversion 알고있는 모든 정보 (무시 된 파일 / 폴더 포함)는 삭제되지 않습니다.

Subversion 1.9 이상을 사용하는 경우 –remove-unversioned 및 –remove-ignored 옵션과 함께 svn cleanup 명령을 사용하면됩니다.


답변

자동화 된 빌드는 아니지만 동일한 작업을 수행하는 동안이 페이지를 살펴 보았습니다.

좀 더 살펴본 후 TortoiseSVN에서 ‘ 확장 컨텍스트 메뉴 ‘를 발견했습니다 . Shift 키를 누른 상태에서 작업 복사본을 마우스 오른쪽 버튼으로 클릭합니다. 이제 TortoiseSVN 메뉴 아래에 ‘ 버전이 지정되지 않은 항목 삭제 … ‘를 포함한 추가 옵션이 있습니다 .

이 특정 질문에는 해당되지 않을 수도 있지만 (즉, 자동화 된 빌드의 맥락에서) 동일한 작업을 수행하려는 다른 사람들에게 도움이 될 것이라고 생각했습니다.


답변

참조 : svn-clean


답변

Windows 명령 줄에있는 경우

for /f "tokens=2*" %i in ('svn status ^| find "?"') do del %i

개선 된 버전 :

for /f "usebackq tokens=2*" %i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%i %j"

이것을 배치 파일에서 사용하는 경우 다음을 두 배로 늘려야합니다 %.

for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%%i %%j"


답변

내 Windows powershell 프로필에 이것을 추가했습니다.

function svnclean {
    svn status | foreach { if($_.StartsWith("?")) { Remove-Item $_.substring(8) -Verbose } }
}


답변

Linux 명령 줄 :

svn status --no-ignore | egrep '^[?I]' | cut -c9- | xargs -d \\n rm -r

또는 일부 파일이 루트 소유인 경우 :

svn status --no-ignore | egrep '^[?I]' | cut -c9- | sudo xargs -d \\n rm -r

이것은 Ken의 대답을 기반으로합니다. (Ken의 대답은 무시 된 파일을 건너 뛰고 내 대답은 파일을 삭제합니다).