2008-09-29 4 views
37

나는 Tortoise SVN usuallly를 사용하지만, 분산 개정 관리 시스템이므로 Mercurial을 조사해 왔습니다.SVN 또는 Mercurial을 사용하여 코드의 일부만 커밋 할 수 있습니까?

내가 찾고있는 것은 두 시스템 모두에서 파일의 일부만 선택하여 커밋 할 수있게 해주는 도구입니다. 이 작업을 지금하고 싶다면 파일의 임시 버전으로 복사하고 현재 버전에서 커밋 할 변경 사항 만 유지 한 다음 커밋 후 임시 버전을 현재 버전으로 다시 복사해야합니다. 그것은 단지 그런 번거 로움과 프로그램이 나를 위해 이것을 할 수 있어야합니다.

힘내 (Git)가이를 지원한다고 들었는데, 이것이 맞으면 알려주세요.

+1

SVN 용 도구를 개발하는 것이 매우 쉽습니다. 왜 아무도이 일을 왜하는지 궁금해. –

+0

@PavelRadzivilovsky 패치 환영합니다. 나는 패치를 작성하여 dev @ 메일 링리스트에 보낼 수 있음을 의미합니다. – bahrep

+0

Mercurial과 함께 즉시 제공되는이 정확한 목적을위한 내장 된'interactive' 커밋 유틸리티가 있습니다. 아래 내 대답을 참조하십시오. – Oly

답변

38

머큐리얼은 record 확장명으로이 작업을 수행 할 수 있습니다.

각 파일과 각 diff 행크를 묻습니다. 예를 들어 : 확약 후

% hg record 
diff --git a/prelim.tex b/prelim.tex 
2 hunks, 4 lines changed 
examine changes to 'prelim.tex'? [Ynsfdaq?] 
@@ -12,7 +12,7 @@ 
\setmonofont[Scale=0.88]{Consolas} 
% missing from xunicode.sty 
\DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i} 
-\else 
+\else foo 
\usepackage[pdftex]{graphicx} 
\fi 

record this change to 'prelim.tex'? [Ynsfdaq?] 
@@ -1281,3 +1281,5 @@ 
%% Local variables: 
%% mode: latex 
%% End: 
+ 
+foo 
\ No newline at end of file 
record this change to 'prelim.tex'? [Ynsfdaq?] n 
Waiting for Emacs... 

, 나머지 DIFF 뒤에 남아있을 것입니다 :

% hg di 
diff --git a/prelim.tex b/prelim.tex 
--- a/prelim.tex 
+++ b/prelim.tex 
@@ -1281,3 +1281,5 @@ 
%% Local variables: 
%% mode: latex 
%% End: 
+ 
+foo 
\ No newline at end of file 

또는, 당신은 쉽게에서 개인의 변화를 분리하는 MQ (의욕 대기열)를 사용하여 찾을 수 있습니다 당신의 패치로 리포지토리. 레코드의 MQ 변형 (qrecord)도 있습니다.

업데이트 :crecord 확장 프로그램을 사용하여 행크/라인 선택에 대한 curses 인터페이스를 제공합니다.

crecord screenshot

+1

수치스러운 GUI 도구가 없습니다. GitX로이 작업을 수행하는 것이 좋습니다. – mxcl

+0

아멘. GitX는 * Git을 사용하는 이유입니다. Murky가 유능했으면 좋겠다. (불행하게도 GitX와 Murky에 공헌 했음에도 불구하고 나는 그것을 해결하기 위해 너무 많은 오픈 소스 프로젝트에 과부하가 걸렸다 :-) –

+2

Tortoisehg는 덩어리 선택을 지원합니다. – Hauge

0

나는 이런 식으로 작동하지 않는 것이 좋습니다.

변경 사항 세트가 필요한 경우 체크인 준비가 된 A를 설정하고 아직 준비되지 않은 B를 설정하십시오. 세트 A를 체크인하는 것만으로 빌드/테스트가 중단되지 않는다는 것을 어떻게 확인할 수 있습니까? 몇 줄을 놓치거나, 다른 파일의 줄을 잊어 버리거나, A가 B에 대해 다른 사람의 빌드를 위반하는 종속성을 인식하지 못할 수 있습니다.

당신의 커밋은 당신 팀을 위해서 또는 다른 사람 빌드를 깨뜨리지 않도록주의 깊게 변경해야합니다. 부분적으로 파일을 커밋하는 경우 일부 불만족 한 동료가 문을 두 드리기 전까지는 알지 못하고 다른 사람을 위해 빌드를 중단 할 확률이 크게 높아집니다.

큰 문제는 왜 이런 식으로 일할 필요가 있다고 생각합니까?

+0

힘내 기는 인접한 선을 함께 그룹화함으로써 이것을 허용합니다. 간단한 것을 체크인하고 지점을 만들고 싶지 않으면 정말 편리 할 수 ​​있습니다. – davetron5000

+6

보통 커밋하기 전에 너무 많은 코드를 작성하기 때문입니다. 파일에서 두 개의 다른 것을 변경하고 서로 다른 주석으로 커밋하려고합니다. – RobbieGee

+3

힘내 (git stash --keep-index)는 당신이 커밋하려는 변경 사항만을 격리시킴으로써 유닛 테스트 나 그 밖의 것들을 쉽게 실행할 수있게 해줍니다. –

5

나는 조금 전에 얼마 전 similar question을 물었고 그 결과로 hgshelve extension을 사용한 결과는 내가 찾고있는 것이었다.

커밋을하기 전에 다른 파일 (또는 파일 내의 변경 사항)의 변경 사항을 "shelf"에 넣은 다음 원하는 내용을 커밋 할 수 있습니다. 그렇다면 커밋하지 않은 변경 사항을 취소하고 계속 작업 할 수 있습니다.

나는 지난 며칠 동안 그것을 사용해 왔으며 많이 좋아합니다. 시각화하고 사용하기가 매우 쉽습니다.

12

네, 이것을 할 수 있습니다. git add 명령에는 변경 사항을 일괄 처리로 검토하고, 준비 할 항목을 선택하거나 (헌크를 수정하거나 패치를 제 위치에서 편집 할 수 있도록) -p (또는 --patch) 옵션이 있습니다.대화 형 모드를 사용하여 자식 추가 (git add -i)하고 "p"옵션을 사용할 수도 있습니다.

screencast on interactive addinggit add의 패치 기능을 보여줍니다.

+1

또한'git gui'는 이것을하기위한 그래픽 방식을 제공합니다. –

7

체크 아웃 TortoiseHG, 행크 선택하고 다른 커밋을 한 파일에 다른 변경 내용을 커밋 할 수 있습니다.

커밋에서 다른 파일의 부분적인 변경과 함께 일부 파일의 모든 변경 사항을 커밋 할 수도 있습니다.

http://tortoisehg.bitbucket.io/

+0

GUI는 Windows 전용 – user7610

+1

@ user7610 아니요, Linux도 지원합니다. –

+0

Nautilus 확장 프로그램과 CLI가 있지만 TortoiseHg의 일부 GUI 도구는 Windows 용입니다. – user7610

1

의욕 지금 바로 상자에서이 기능을 가능하게하는 commit 명령에 대한 옵션 --interactive (또는 -i)를 제공합니다.

이것은 명령 줄에서 직접 작동하므로 명령 줄 애호가라면 완벽합니다.

> hg commit -i 

실행

검사, 편집 및 개별 변경의 기록은 커밋 만들 수 있습니다 대화 형 세션을 시작합니다.

이것은 git addgit commit 명령에 대한 --patch--interactive 옵션과 매우 유사하게 동작합니다.

+0

이것은입니다 최고의 대답. 확장 등의 필요 없음 답변 주셔서 감사합니다. –