2009-04-15 6 views
3

내 워크 플로는 일반적으로 파일을 여러 번 변경하는 작업을 포함하는데, 각 파일은 프로젝트 전체에서 개념적으로 변경되는 단위 (커밋)에 속합니다.VCS를 사용하면 여러 보류 커밋에 변경 사항을 동시에 추가 할 수 있습니까?

내가 할 수 있기를 원하는 것은 보류중인 커밋 (아마도 이름을 지정해야 함)에 특정 diff (전체 파일 또는 파일의 특정 줄만 추가)를 추가하고 여러 개의 보류중인 파일을 추가하는 것입니다. 동시에 '활성'상태로 만듭니다.

모든 보류중인 커밋과 관련된 모든 변경 사항이 모든 파일에서 완료되면 명명 된 커밋을 커밋 할 수 있습니다!

VCS를 사용하는 것이 좋습니다.

답변

7

svn에서 changelists을 정의한 다음 특정 변경 목록에있는 파일 만 커밋 할 수 있습니다.

힘내는 조금 더 나아가서 git add -p으로 파일에서 변경된 청크를 대화 형으로 선택하여 패치를 기록 할 수 있습니다.

널리 사용되지만 이러한 기능은 모범 사례에 위배됩니다. 이런 식으로 변경 사항을 제대로 테스트 할 수는 없습니다. 모든 것이 작업 복사본에서 작동하지만 변경 사항 중 일부만 커밋되면 빌드가 손상 될 수 있습니다. feature branches을 사용하는 것이 훨씬 안전하며 모든 현대 버전 제어 시스템이이를 지원합니다.

Mercurial ShelveExtensiongit-stash도 있습니다.이 커밋을 사용하면 나중에 변경 사항을 적용하기 위해 패치 헌트 단위로 선별 된 변경 내용을 선반에 저장할 수 있습니다. 이 작업 방식을 사용하면 커밋하기 전에 제대로 테스트 할 수 있습니다.

+1

괜찮습니다. '빌드 깨기'개념은 적용되지 않습니다. 그래도 svn 변경 목록이 하위 파일 기반으로 작업되기를 바랍니다. 이 기능을 사용할 수없는 경우 카드에 git 스위치가있는 것 같습니다. 수은 또는 바자? – EoghanM

+0

아니요, Mercurial 또는 bazaar가 직접 지원한다고 생각하지 않습니다. 동일한 효과를 얻으려면 작업 흐름을 변경해야합니다. –

+1

이렇게하면 변경 사항을 테스트 할 수 있습니다. 커밋 한 후에 테스트해야합니다. 모든 개별 테스트를 통과하는 모든 테스트를 통과하고 시리즈를 사용하기 전에이를 사용하는 도구가 있습니다. – Dustin

0

Subversion 클라이언트 (> = 1.5)에는 변경 목록이라는 개념이 포함되어 있습니다. 선택한 이름과 연결된 파일 그룹.

동일한 작업 복사본에서 여러 파일 집합을 작업 할 때 특히 유용합니다. 각 세트의 각 파일을 기억할 필요없이 Subversion은 변경 목록을 각 파일 세트와 연관시킬 수 있습니다. 파일 집합을 대상으로 사용하는 대부분의 명령은 이제 changelist 구성원을 기반으로 대상을 필터링하는 --changelist 옵션도 허용합니다. 변경 목록 구성원은 새 변경 목록 부속 명령을 사용하여 편집 할 수 있습니다.

1

각 개별 변경의 커밋이 빌드 가능한 시스템이되도록 보장하는 것은 매우 어려울 것입니다.

한 번에 한 가지만 수행하고 각 문제를 별도로 수행하는 것이 좋습니다.

+1

빌드 가능한 시스템의 개념이 그림에 들어 가지 않을 수 있습니다. CSS 파일은 사이트의 다른 페이지에 영향을 미치는 여러 독립적 인 수정을 할 수 있습니다. 또는 여러 변경 사항에 대해 여러 항목이있는 변경 로그 텍스트 파일. – EoghanM

1

내용 경고 : 내 느낌 만 전달 아는 사람에 따라 : 비교했을 때 당신이해야하는 경우

동시 마이크로 관리하지만, 어떤 의미 관련이없는 변화는, 당신은 반대의 강조가 darcs을 조사하기 위해 신경 수 있습니다 svn, git 또는 mercurial 같은 시스템

darcs에서 패치는 핵심 요소이며 주어진 분기의 상태는 실제로 패치 세트의 합계입니다. 이 모델은 당신이하려는 일에 적합 할 수도 있지만 모범 사례에 대한 wcoenen의 경고가 분명히 나타납니다. 각 패치 세트에 대해 빌드가 무엇이든간에 손상되지 않았는지 확인해야합니다.

진술, 당신은 Eoghan M ... r 나는 당신이라고 생각하니?

+0

아니, 내가 생각하는 EoghanM이라고 생각하지 마! – EoghanM

1

bzr에서 shelve/unshelve 명령을 사용하여 파일에서 일부 변경 사항을 가져온 다음 다시 불러 오거나 직조기를 사용하여 관련 패치 세트를 쉽게 관리 할 수 ​​있습니다. 그러나 이들 중 어느 것도 원래의 요청을 해결할 수 없으며 모든 VCS가 이러한 방식으로 처리 할 수 ​​있을지 의심 스럽습니다.

2

원래 요청은 "체리 피킹"과 비슷하게 들립니다. 즉, "diff"조각을 수동으로 선택하여 새 커밋에 포함시킵니다. 최소한 Git과 Darcs는이를 지원합니다. 이맥스 + 자식 들어 gitsum, 내가 많이 좋아합니다.

+0

고마워요. 정확히 내가 찾고있는 도구의 종류입니다. – EoghanM