Programing

작업 복사본을 재설정하는 Subversion 명령이 있습니까?

lottogame 2020. 8. 14. 08:11
반응형

작업 복사본을 재설정하는 Subversion 명령이 있습니까?


작업 복사본을 저장소에 저장된 상태로 정확히 "재설정"하는 단일 Subversion 명령이 있습니까? 같은 뭔가 git reset --hard나 (하, 하드 힘내 재설정 중 버전없는 파일을 삭제하지 않습니다!) rm -rf wc && svn co <url> wc.

업데이트 : 작업 복사본에서 추가 파일을 삭제하지 않기 때문에 간단한 되돌리기를 수행하지 않았습니다. 데이터를 다시 다운로드 할 필요없이 작업 복사본을 삭제하고 다시 체크 아웃하는 것과 동일한 것을 정말로 원합니다. (분명히 커밋되지 않은 모든 변경 사항을 잃어도 괜찮습니다.)


다음과 같이 재귀 적으로 되돌릴 수 있습니다.

svn revert --recursive .

(크리에이티브 스크립트를 작성하지 않고는) 소스 제어하에 있지 않은 것을 제거 할 방법이 없습니다. 나는 당신이 할 수있는 가장 가까운 방법은 모든 파일을 반복하고 grep의 결과를 사용 svn list하고 grep이 실패하면 삭제하는 것이라고 생각합니다.

편집 : 크리에이티브 스크립트에 대한 솔루션은 여기에 있습니다 : Subversion 버전이 지정되지 않은 파일을 자동으로 제거

따라서 revert연결된 질문에서 가장 적합한 답변과 를 결합하는 스크립트를 만들 수 있습니다 .


추적 된 파일을 되돌리려면

svn revert . -R

추적되지 않은 파일을 정리하려면

svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')

-rf/ 처음에는 무서워 보이지만, 한 번 이러한 이유로하지 않습니다 이해한다 수 있습니다 :

  1. 완전히 추적되지 않은 디렉토리 만 전달 된 패턴과 일치합니다. rm
  2. -rf다른 이들 디렉토리가 제거되지 않습니다 필요합니다

되 돌린 다음 정리하려면 (OP 질문)

svn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')

일관된 사용 편의성

.bash_aliases에 영구 별칭 추가

alias svn.HardReset='read -p "destroy all local changes?[y/N]" && [[ $REPLY =~ ^[yY] ]] && svn revert . -R && rm -rf $(awk -f <(echo "/^?/{print \$2}") <(svn status) ;)'

다음을 사용하여 로컬 사본 내의 모든 것을 삭제하십시오.

rm -r your_local_svn_dir_path/*

그리고 아래 명령을 사용하여 모든 것을 재귀 적으로 되돌립니다.

svn revert -R your_local_svn_dir_path

파일이 로컬 SVN 메타 데이터에서 복원되기 때문에 전체 디렉토리를 삭제 한 다음 새로 체크 아웃하는 것보다 빠릅니다. 네트워크 연결도 필요하지 않습니다.


svn revert . -R

모든 것을 재설정합니다.

svn revert path/to/file

단일 파일


버전이 지정되지 않은 파일을 삭제하고 변경 사항을 되돌립니다.

svn revert D:\tmp\sql -R
svn cleanup D:\tmp\sql --remove-unversioned

밖:

D         D:\tmp\sql\update\abc.txt

순수 Windows cmd / bat 솔루션 :

svn cleanup .
svn revert -R .
For /f "tokens=1,2" %%A in ('svn status --no-ignore') Do (
     If [%%A]==[?] ( Call :UniDelete %%B
     ) Else If [%%A]==[I] Call :UniDelete %%B
   )
svn update .
goto :eof

:UniDelete delete file/dir
IF EXIST "%1\*" (
    RD /S /Q "%1"
) Else (
    If EXIST "%1" DEL /S /F /Q "%1"
)
goto :eof

OS에서 작업 복사본을 삭제하고 다시 확인하는 것이 가장 간단하지만 단일 명령은 아닙니다.


매우 빠르고 간단하며 원하는 것을 정확하게 수행합니다.

svn status | awk '{if($2 !~ /(config|\.ini)/ && !system("test -e \"" $2 "\"")) {print $2; system("rm -Rf \"" $2 "\"");}}'

/(config|.ini)/는 내 목적을위한 것입니다.

svn 명령에 --no-ignore를 추가하는 것이 좋습니다.


추적되지 않은 파일을 제거하려면

I was able to list all untracked files reported by svn st in bash by doing:

echo $(svn st | grep -P "^\?" | cut -c 9-)

If you are feeling lucky, you could replace echo with rm to delete untracked files. Or copy the files you want to delete by hand, if you are feeling a less lucky.


(I used @abe-voelker 's answer to revert the remaining files: https://stackoverflow.com/a/6204601/1695680)

참고URL : https://stackoverflow.com/questions/6204572/is-there-a-subversion-command-to-reset-the-working-copy

반응형