누구든지 버전 제어를받지 않는 작업 복사본의 모든 파일을 재귀 적으로 제거하는 방법을 알고 있습니까? (자동 빌드 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의 대답은 무시 된 파일을 건너 뛰고 내 대답은 파일을 삭제합니다).
