예를 들어 하나의 파일 에서 두 개의 독립적 인 변경 을 수행 한 경우 새로운 방법을 추가하고 다른 방법을 변경했습니다.
나는 종종 두 가지 변경 사항을 하나의 커밋 으로 커밋하지 않고 두 개의 독립적 인 커밋으로 커밋 하고 싶습니다 .
git 저장소 에서 git-add (1) 의 대화 형 모드 를 사용 하여 덩어리 를 더 작은 것으로 분할합니다 .
git add --patch
Subversion으로이 작업을 수행하는 가장 쉬운 방법은 무엇입니까? (이클립스 플러그인을 사용할 수도 있음)
업데이트 :
에 힘내 소개 살아라는 , 라이언를 호출합니다 . “얽힌 작업 복사본 문제”
답변
git-svn을 사용하면 원격 SVN 저장소의 로컬 GIT 저장소를 만들고 전체 GIT 기능 세트 (부분 커밋 포함)를 사용하여 작업 한 다음 모두 SVN 저장소로 푸시 할 수 있습니다.
답변
Tortoise SVN 1.8은 이제 “커밋 후 복원”기능으로이를 지원 합니다. 이렇게하면 커밋 후 모든 편집 내용이 취소되어 파일을 편집 할 수 있습니다.
문서에 따라 :
특정 문제와 관련된 파일 부분 만 커밋하려면 :
- 커밋 대화 상자에서 파일을 마우스 오른쪽 버튼으로 클릭하고 “커밋 후 복원”을 선택합니다.
- 예를 들어 TortoiseMerge에서 파일을 편집하십시오 : 아직 커밋하고 싶지 않은 변경 사항을 취소하십시오.
- 파일 저장
- 파일을 커밋
답변
TortoiseSVN을 사용하여이 작업을 수행했습니다 .
내장 된 병합 유틸리티를 사용하면 저장소 버전과 작업 복사본 간의 차이를 표시 할 수 있습니다.
(가) 사용하여 백업 생성 은 diff 유틸리티의 기능을
- 모든 변경 사항을 커밋하려는 것처럼 파일을 커밋하십시오.
- 커밋 창에서 파일을 두 번 클릭하여 diff를 표시합니다.
- diff 설정에서 원본 파일 백업 옵션을 클릭 합니다 .
- 원하지 않는 변경 사항을 마우스 오른쪽 버튼으로 클릭하고 다른 텍스트 블록 사용 선택을 사용합니다 .
- diff를 정확히 한 번 저장하십시오 . 저장할 때마다 백업을 덮어 씁니다. 이것이 한 번만 저장하려는 이유입니다.
- 변경 사항을 적용하십시오.
- 생성 된 .bak 파일로 원본을 덮어 씁니다 (원본 변경 사항이 모두 포함됨).
- 파일을 커밋하십시오.
이제 두 개의 개별 커밋을 사용하여 모든 변경 사항을 커밋해야합니다.
답변
사용 svn diff > out.patch
을 시도한 다음 out.patch
파일을 out.patch.add
및out.patch.modify
당신은 작업 패치 파일이있는 경우에만 사용하여 원본 파일 되돌리기를 svn revert out.c
.
추가 또는 수정을위한 덩어리 만 포함하도록 패치 파일을 직접 편집하십시오 . patch
명령을 사용하여 원본 파일에 적용하고 추가가 작동하는지 테스트 한 다음 svn commit
추가합니다.
out.patch.modify
패치를 위해 헹굼을 반복 하십시오.
초기 질문에 명시된대로 변경 사항이 파일에서 분리 된 경우-새 방법 추가, 기존 방법 변경-작동합니다.
이것은 매우 지루한 솔루션입니다. 커밋을 분리 할 이유가 있어야한다고 확신하지는 않지만.
작업을 적용하기 위해 동일한 소스의 여러 작업 사본을 체크 아웃 할 수도 있습니다.
svn co http://location/repository methodAdd
svn co http://location/repository methodModify
에 반드시 svn up
모든 것이 잘 확실하게 테스트.
답변
이것은 v1.8부터 TortoiseSvn (Windows)을 사용하여 가능합니다.
4.4.1. 커밋 대화 상자
작업 복사본이 최신 상태이고 충돌이없는 경우 변경 사항을 커밋 할 준비가 된 것입니다. 커밋하려는 파일 및 / 또는 폴더를 선택한 다음 TortoiseSVN → 커밋 …
<스닙>
4.4.3. 파일의 일부만 커밋
파일에 대한 변경 사항의 일부만 커밋하려는 경우가 있습니다. 이러한 상황은 일반적으로 작업 중이지만 긴급 수정을 수행해야 할 때 발생하며 해당 수정은 작업중인 파일과 동일한 파일에 있습니다.
파일을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴 → 커밋 후 복원을 사용하십시오. 파일의 복사본이있는 그대로 생성됩니다. 그런 다음 TortoiseMerge에서 파일을 편집하고 커밋하지 않으려는 모든 변경 사항을 취소 할 수 있습니다. 이러한 변경 사항을 저장 한 후 파일을 커밋 할 수 있습니다.
커밋이 완료되면 파일의 사본이 자동으로 복원되고 다시 커밋되지 않은 모든 수정 사항이 포함 된 파일을 갖게됩니다.
Linux에서는 http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php 를 사용해 보겠습니다. 그래도 직접 시도하지 않았습니다.
답변
나는 이것을 사용했다 :
- 내 편집기 (저는 vim 사용)에서 변경 사항 중 하나만 나타나도록 파일을 편집합니다.
- 파일 저장 (하지만 편집기를 종료하지 마십시오)
- 변경된 파일을 svn에 커밋
- 두 번째 변경 사항 세트가 다시 나타날 때까지 편집기에서 “실행 취소”를 충분히 누르십시오.
- 파일을 다시 저장하십시오.
- 두 번째 변경 사항을 커밋합니다.
이는 한 세트의 변경 사항을 실행 취소하기가 합리적으로 쉽다고 가정하는 단순한 접근 방식입니다. 더 복잡한 상황에서는 걱정하지 않고 두 가지 변경 사항을 모두 포기하고 커밋합니다.
이제 git을 사용하므로 다시는 할 필요가 없을 것입니다!
답변
로컬 darcs 리포지토리를 사용하거나 변경 사항을 점차적으로 병합합니다. 병합 (opendiff는 Xcode와 함께 제공되는 병합 프로그램 인 FileMerge를 엽니 다. 선호하는 병합 도구로 대체) :
cp file file.new
svn revert file
opendiff file.new file -merge file
관련 변경 사항을 병합하고, 병합을 저장하고, 병합 프로그램을 종료합니다.
svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file
파일에 관련없는 덩어리가 두 개 이상 있으면 헹구고 반복합니다 (하지만 커밋하기 전에 왜 그렇게 오래 기다리겠습니까?!)
또한 git을 알고 있다면 git-svn 을 사용 하여 로컬 git repo를 유지하고 커밋을 svn 마스터 서버에 동기화 할 수 있습니다. 제한된 경험에서 훌륭하게 작동합니다.