2010-08-05 3 views
9

svn 배경에서 오는 : 전환의 속도 (부족) 및 시간 이상 트렁크로 지점을 병합하는 데 걸렸습니다 때문에 거의 분기했습니다. 때로는 웹 사이트에서 문제를 수정해야하는 경우 트렁크 (이전 변경 또는 새 기능과 함께 사용)에서 변경 한 다음 해당 파일로 이동하여 "svn up path/to"/filename "이고 해당 파일 만 업데이트하여 문제를 해결하지만 나머지 파일은 남겨 두지 않습니다.이해 git 체리 - 선택

개념적으로 이것은 git (또는 필요)에서는 가능하지 않습니다. 체리 피킹을 허용하는 구조화 스테이징 및 그룹화 된 커밋입니까? 그래서, 사이트의 특정 영역을 변경하고 svn을 사용하여 작업하는 대신 그룹으로 커밋하고 일일 작업을하고 파일 전체를 한꺼번에 처리 할 수 ​​있습니다.

답변

10

이 경우에 수행하려는 작업은 수정 프로그램이 필요한 모든 분기의 공통 조상에서 분기하여 핫픽스에 대한 새 분기를 만드는 것입니다. 당신이 두 버전에 적용되는 핫픽스를해야 할 경우

- X - o - o - o - o - o - o - o - o - o (master) 
    \      \ 
    o - o - o (release A) o - o (release B) 

, 당신의 수정을 커밋 커밋 표시된 X의 시작 지점을 만들 예를 들어, 당신이 당신의 현재의 개발과 함께 몇 유지 출시 있다고 가정 그런 다음 해당 분기를 세 가지 분기로 병합하십시오.

당신은 체리를 뽑을 수 있지만, 체리를 집을 때 좋은 경험 법칙은 다음과 같습니다. 체리 선택을 원하는 유일한 경우는 지점을 잘못 관리 한 경우입니다. 이 경우, 이전 시점에서 올바르게 분기하지 않고 마스터에서 수정 한 내용 일 수 있으며 사람들이 이미 업데이트를 마스터로 가져 와서 변경할 수 없습니다. 두 개의 릴리스 지점에서 가져 오기 위해 체리 선택을해야합니다. 물론 처음부터 지점을 관리해야하며 체리를 고를 필요가 없습니다. (그렇습니다, 때때로 일어날 것입니다; 그러한 삶입니다.)

+0

정말 멋지 네요. 나는 방금 "git branch foo old-merge-sha1"로 놀아 봤는데 그게 놀랍다. – Hans

+0

"FeatureA"에 대해 분기 해제 마스터를 만든 다음 주제에 대해 "FeatureA"를 다시 분기하고, 준비가되면이를 FeatureA에 병합하지만 전체 FeatureA가 준비 될 때까지 마스터를 건드리지 않는 것이 가장 좋습니다. FeatureA를 마스터에 병합 하시겠습니까? 지금 (svn에서) 나는 몇 주일이 걸리고 핫픽스가 필요할 무언가에 대해 작업하고 있다면, 나는 내 질문 (svn up path/to/filename)에서 설명한 것을 수행 한 다음 계속 진행한다. Git 브랜치는 "자주 병합"되는 것으로 보이지만 준비가 될 때까지 마스터/트렁크를 건드리지 않으려면 웹 사이트를 자유롭게 업데이트 할 수 있습니다. – Hans

+2

@ 한스 : 병합 할 시간이 될 때까지 병합하지 마십시오. 일반적으로 마스터는 현재 안정적인 지점이므로 원하는 경우 부분적이지만 안정적인 기능을 이동할 수 있지만 일반적으로 완전한 항목 만 병합해야합니다. 그리고 여러 종류의 안정된 가지를 가질 수 있습니다. 하나는 특정 relase (웹 사이트 용), 하나는 현재 안정적인 테스트, 하나는 불안정한 테스트 ... 하나는 항상 올바른 방향으로 병합합니다 (주제 -> 특징 -> 마스터 또는 불안정 -> 안정). – Cascabel