SVN 작업 디렉토리에서 모든 변경 사항을 제거하려면 어떻게해야합니까?


195

SVN 작업 디렉토리가 있습니다. 해당 디렉토리를 약간 변경하면에 표시됩니다 svn status. 그러나 모든 변경 사항을 제거하고 명령 줄을 사용하여 트렁크에서 모든 것을 가져올 수있는 방법이 있습니까?

답변:


274
svn revert -R .
svn up

현재 디렉토리와 그 아래의 모든 항목을 재귀 적으로 되 돌린 다음 최신 버전으로 업데이트합니다.


2
이것은 외부에서는 작동하지 않습니다 (겉으로는 무시됩니다).
cic

86

다른 사람들의 답변을 조합 하여이 솔루션을 만들었습니다.

정상적인 로컬 SVN 변경 사항 되돌리기

svn revert -R .

다른 변경 사항을 제거하고 공백 등이있는 파일 / 폴더 제거를 지원합니다.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

SVN에서 최신 파일을 얻는 것을 잊지 마십시오

svn update --force

많은 Shaize 감사합니다, 이것은 가장 우아한 sed입니다 ... 파이프는 지금까지 본 적이 있습니다 :) 특히 무시에주의.
깡패

매력처럼 작동합니다. 감사!
Niilo Keinänen

28
svn revert -R .
svn cleanup . --remove-unversioned

* .class 파일 등을 제거하지 않습니다.
Trismegistos

2
무시 된 파일도 제거하고 싶다면 –svn cleanup . --remove-ignored
Kip

14

변경 사항이 없으면 항상 철저하고 게을러서 할 수 있습니다 ...

rm -rf *
svn update

그러나 공간에서 핵 공간 옵션이 원하는지 확실 하지 않으면 실제로는 그렇게 하지 마십시오 . 이것은 모든 빌드 크래프트, 임시 파일 및 SVN이 무시하는 것들을 제거하는 이점이 있습니다.

더 올바른 해결책은 revert 명령을 사용하는 것입니다.

svn revert -R .

-R을 사용하면 서브 버전이 현재 작업 디렉토리의 내부와 아래에있는 모든 것을 재귀하고 되돌립니다.


필자는 종종이 트릭을 사용했지만 메타 데이터가 WC 루트에만 저장되는 SVN 1.7에서는 더 이상 깨끗한 솔루션이 아닙니다. 예를 들어, 삭제 된 파일은 삭제 된 상태로 유지됩니다.
바트 반 Heukelom

8
svn nuke-from-space
Jason Swett 1

9

여기에 대한 답변 중 어느 것도 내가 원하는 것이 아닙니다. 내가 생각해 낸 것은 다음과 같습니다.

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Linux에서 테스트되었습니다. Cygwin에서 작동하지만 xargs를 '\0'공백 대신에 분할 할 수있는 GNU 관련 확장에 의존합니다 (믿습니다) .

위 명령의 장점은 샌드 박스를 재설정하기 위해 네트워크 활동이 필요하지 않다는 것입니다. 당신은 당신이 전에 가지고 있던 것을 정확히 얻었고, 당신 은 모든 변화잃습니다 . (누군가이 코드가 자신의 작업을 파괴한다고 비난하기 전에 면책 조항) ;-)

이 스크립트를 연속 통합 시스템에서 사용하여 일부 테스트를 실행 한 후 깨끗한 빌드가 수행되도록합니다.

편집 : 이것이 모든 버전의 Subversion에서 작동하는지 확실하지 않습니다. svn status명령의 형식이 항상 일관된 지 확실하지 않습니다 . 이러한 블랭킷 rm명령 을 사용하는 명령과 마찬가지로 사용자의 책임하에 사용하십시오 .


7

svn revert 는 로컬 변경 사항을 취소합니다.


5

다음 명령을 사용하여 모든 로컬 변경 사항을 되돌릴 수 있습니다.

svn st -q | awk '{print $2;}' | xargs svn revert

svn revert에 대한 "논리가 충분하지 않습니다"라는 오류 메시지가 표시됨
원형

4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

수정 된 모든 파일을 제거합니다. 파일과 디렉토리가 추가되었을 때 되돌리기와 관련하여 문제가 발생한 것을 기억합니다.



0

창에있는 경우 다음 for 루프는 작업 공간에 대한 커밋되지 않은 모든 변경 사항을 되돌립니다.

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

커밋되지 않은 모든 변경 사항과 버전이없는 모든 개체를 제거하려면 2 개의 루프가 필요합니다.

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.