[svn] SVN 체크 아웃에서 로컬 변경 사항을 버리는 방법은 무엇입니까?

오픈 소스 프로젝트를 위해 검토를 위해 diff 를 제출하고 싶었습니다 .

SVN을 사용하여 코드를 얻었습니다 (터미널, 우분투에서). 그리고 몇 가지 파일을 약간만 편집했습니다. 이제 제출하려는 변경 사항이 하나뿐입니다. 내가 변경 한 나머지 부분은 디버깅을위한 것이며 더 이상 필요하지 않습니다.

사용하여 diff를 생성했습니다 svn di > ~/os/firstdiff.diff

그래서 내 질문은, 내 로컬 변경 사항을 버리는 방법?

SVN 방법이 있습니까? 그렇지 않으면 각 파일로 이동하여 모든 편집 내용을 삭제해야합니다. 그런 다음 새 diff를 생성하여 제출합니다.



답변

svn revert예를 들어 다음 명령을 사용하십시오 .

svn revert some_file.php

svnbook 자원 이나 매뉴얼 페이지에, 또는 svn help명령 과 함께 (다른 모든 svn 명령과 마찬가지로) 잘 문서화되어 있습니다.


답변

svn revert 명령을 사용하여 모든 변경 사항을 되돌려 야합니다 .

  • 변경 사항을 파일로 되돌리기 : svn revert foo.c
  • 파일의 전체 디렉토리를 되돌립니다 : svn revert --recursive .

답변

하나의 특정 파일에서 로컬 변경 사항을 삭제하려면 다음을 수행하십시오.

$ svn revert example_directory/example_file.txt

하나의 특정 폴더에서 로컬 변경 사항을 삭제하려면

$ svn revert -R example_directory/


답변

svn revert원래 포스터에는 단순했습니다 . 그러나 간단한 svn revert경우에는 더 일반적인 경우에는 수행하지 않습니다.

  1. 공유하려는 수정 사항동일한 파일 에서 공유하지 않으려는 편집 사항이 모두 있어야 합니다 .
  2. 자신의 사적 이익을 유지하기 위해 관심이 있는 지역 변경 사항이 있습니다 .

@ErichBSchulz의 사용 제안은 git add -p그러한 경우에 매우 합리적이고 훨씬 일반적으로 적용 가능합니다. 대답은 세부 사항이 부족했습니다. 현재 디렉토리가 공유 가능한 패치를 만들려는 디렉토리라고 가정하면 다음과 같이 할 수 있습니다.

  1. subversion에서 다른 디렉토리로 원시 버전을 체크 아웃하십시오 (여기서는 subdirectory를 사용하여 존재하지 않는 디렉토리 이름 선택 TMP/).

    $ url=$(svn info . | awk '/^URL/ {print $2}')
    $ svn checkout "$url" TMP
    
  2. 기본 svn 체크 아웃을 기본으로 사용하여 .svn 디렉토리를 무시하고 git 저장소를 초기화하십시오. svn head의 모든 것을 임시 자식 저장소에 커밋하십시오.

    $ cd TMP
    $ git init && echo ".svn/" > .gitignore
    $ git add -A && git commit
    $ cd ..
    
  3. 새로 준비된 git 저장소 메타 데이터를 원래 작업 디렉토리에 복사하십시오. 원시 서브 버전 체크 아웃 디렉토리가 필요하지 않으므로이를 제거 할 수 있습니다. 작업 디렉토리는 이제 git 및 subversion 저장소입니다.

    $ mv TMP/.git .
    $ rm -rf TMP/
    
  4. 이제 강력하고 편리하게 git add -p공유 할 대상을 대화식으로 선택하고 git 저장소에 커밋 할 수 있습니다. 커밋에 파일을 추가 해야하는 경우 git add <file-to-add>이전 에도 수행하십시오.git commit

    $ git add -p
    <interactively select (and edit) the chunks you want to share>
    $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
    $ git commit
    
  5. 커밋을 사용하여 공유 할 패치를 준비하십시오. 이를 위해, 당신은 또한 사용할 수 있습니다 git diff HEAD^..HEAD, 또는 git format-patch(패치 또는 여러 패치를 포함하는 송신하는 후자는 직접 이메일을 준비하는 데 사용할 수 있습니다)

    $ git show -p HEAD > my-mighty-patch.patch
    

git 메타 데이터를 제거하려면을 수행하십시오 rm -rf .git/. 원래 작업 디렉토리로 해킹을 계속하려는 경우 계속 사용 git하여 로컬 변경 사항을 관리 할 수 ​​있습니다. 이 경우 사용 방법을 배우는 데 투자하면 도움이 될 것입니다 git svn.

참고 : 익숙한 경우 git즉흥적으로 처리하는 것이 쉽지 않습니다. 그렇지 않으면 약간 어색해 보일 수 있습니다. git을 이해하지 않고 사용할 수있는 svn에 대해 “대화식 커밋”또는 “대화식 패치 작성”을 구현하기 위해이 단계에서 스크립트를 작성하여 접근 방식을 일반화 할 수 있습니다.


답변

당신은 사용할 수 있습니다

 svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff

diff를 게시 할 때, 수정하려는 diff를 알려주는 것을 잊지 마십시오.

다른 사람들이 대답했듯이 svn revert신중하게 사용할 수도 있습니다 . 향후 작업을 위해 로컬 변경 사항을 유지 하려는지 여부에 달려 있습니다 …


답변

해당 저장소의 루트로 이동하여 다음 명령을 실행하십시오.

svn revert --depth=infinity .


답변

넣고 자하는 파일에서 commit 명령을 사용하고 svn revert 명령을 사용하여 나머지 로컬 변경 사항을 버릴 수 있습니다.