SVN 작업 디렉토리가 있습니다. 해당 디렉토리를 약간 변경하면에 표시됩니다 svn status
. 그러나 모든 변경 사항을 제거하고 명령 줄을 사용하여 트렁크에서 모든 것을 가져올 수있는 방법이 있습니까?
SVN 작업 디렉토리가 있습니다. 해당 디렉토리를 약간 변경하면에 표시됩니다 svn status
. 그러나 모든 변경 사항을 제거하고 명령 줄을 사용하여 트렁크에서 모든 것을 가져올 수있는 방법이 있습니까?
답변:
다른 사람들의 답변을 조합 하여이 솔루션을 만들었습니다.
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
변경 사항이 없으면 항상 철저하고 게을러서 할 수 있습니다 ...
rm -rf *
svn update
그러나 공간에서 핵 공간 옵션이 원하는지 확실 하지 않으면 실제로는 그렇게 하지 마십시오 . 이것은 모든 빌드 크래프트, 임시 파일 및 SVN이 무시하는 것들을 제거하는 이점이 있습니다.
더 올바른 해결책은 revert 명령을 사용하는 것입니다.
svn revert -R .
-R을 사용하면 서브 버전이 현재 작업 디렉토리의 내부와 아래에있는 모든 것을 재귀하고 되돌립니다.
svn nuke-from-space
여기에 대한 답변 중 어느 것도 내가 원하는 것이 아닙니다. 내가 생각해 낸 것은 다음과 같습니다.
# 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
명령 을 사용하는 명령과 마찬가지로 사용자의 책임하에 사용하십시오 .
창에있는 경우 다음 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"
)