오픈 소스 프로젝트를 위해 검토를 위해 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
경우에는 더 일반적인 경우에는 수행하지 않습니다.
- 공유하려는 수정 사항 과 동일한 파일 에서 공유하지 않으려는 편집 사항이 모두 있어야 합니다 .
- 자신의 사적 이익을 유지하기 위해 관심이 있는 지역 변경 사항이 있습니다 .
@ErichBSchulz의 사용 제안은 git add -p
그러한 경우에 매우 합리적이고 훨씬 일반적으로 적용 가능합니다. 대답은 세부 사항이 부족했습니다. 현재 디렉토리가 공유 가능한 패치를 만들려는 디렉토리라고 가정하면 다음과 같이 할 수 있습니다.
-
subversion에서 다른 디렉토리로 원시 버전을 체크 아웃하십시오 (여기서는 subdirectory를 사용하여 존재하지 않는 디렉토리 이름 선택
TMP/
).$ url=$(svn info . | awk '/^URL/ {print $2}') $ svn checkout "$url" TMP
-
기본 svn 체크 아웃을 기본으로 사용하여 .svn 디렉토리를 무시하고 git 저장소를 초기화하십시오. svn head의 모든 것을 임시 자식 저장소에 커밋하십시오.
$ cd TMP $ git init && echo ".svn/" > .gitignore $ git add -A && git commit $ cd ..
-
새로 준비된 git 저장소 메타 데이터를 원래 작업 디렉토리에 복사하십시오. 원시 서브 버전 체크 아웃 디렉토리가 필요하지 않으므로이를 제거 할 수 있습니다. 작업 디렉토리는 이제 git 및 subversion 저장소입니다.
$ mv TMP/.git . $ rm -rf TMP/
-
이제 강력하고 편리하게
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
-
커밋을 사용하여 공유 할 패치를 준비하십시오. 이를 위해, 당신은 또한 사용할 수 있습니다
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 명령을 사용하여 나머지 로컬 변경 사항을 버릴 수 있습니다.