Git에 분기의 성공적인 모델

Git를 사용 하는 것이 중요, 소프트웨어에 대 한 공동 개발 환경 관리 유지를 포함 하.

크레딧

이 게시물은 원래의 포르투갈어 버전입니다, 영어로, “성공적인 Git 분기 모델“, 저자가 정당하게 승인, 빈센트 드리센. 고마워요 사람!

기술적 인 이유로, 일부 키워드는 의도적으로 영어로 보관되었습니다.. 나는 텍스트의 독창성을 보장하기 위해 노력했다, 그러나 나는 우리의 언어로 이해를 용이하게하기 위해 조정을 할 필요가 있음을 고백 (엔-US). 번역 개선에 대한 수정 이나 제안은 환영합니다.

소개

이것은 Git을 사용하는 방법을 가르치는 게시물이 아닙니다.. 이것이 필요한 경우, 나는 수동 수행 Git. 또한 소프트웨어 버전 작업을 수행하는 방법을 보여주는 것이 우리의 목표가 아닙니다., 이 경우에, 참조 의미 판버전.

여기서 제안은 소프트웨어 버전에서 팀의 공동 작업을 관리하는 것입니다. 프로그래머가 여러 개인 경우 “교 반” 동일한 소스 코드에서? 이는 개발 속도를 높이는 데 중요합니다., 그러나 그것은 두통을 많이 생성 할 수 있습니다 (부상 및 재작업) 제어가 없는 경우. 한 개발자가 다른 개발자의 작업을 덮어쓰고 점진적이고 조직화된 개발을 보장하는 것을 방지하기 위해, 충돌 최소화 및 소프트웨어 버전 관리, Git와 분기 다음.

분기 모델

이 게시물에서 는 일부 프로젝트에서 사용한 개발 모델을 제시합니다. (직장에서 나타가 있습니다.) 에 대 한의 1 몇 년 전, 그리고 그것은 매우 성공적이었습니다.. 오래 전에 나는 그것에 대해 쓰고 싶었다, 그러나 사용할 수있는 시간을 발견하지 못했습니다., 회. 프로젝트 세부 사항에 대해 이야기하지 않을 거야., 단지 의 전략에 대해 분기 및 관리 릴리스.

이 모델은 Git 모든 소스 코드를 버전화하기 위한 도구로서. (그런데, Git에 관심이 있다면, 우리 회사 GitPrime, 새로운 제공, 실시간으로, 소프트웨어 엔지니어링 최적화를 위한 몇 가지 놀라운 데이터 분석)

왜 git?

중앙 집중식 소스 제어 시스템에 비해 Git의 장단점에 대한 철저한 논의, 참조. 엄청난 이점이 있습니다. “전쟁” 그 주변. 개발자로서, 나는 오늘날 기존의 다른 모든 도구보다 Git을 선호. Git은 의심 할 여지없이 개발자가 병합 또는 지점. 나는 고전 세계에서 온 CVS/전복, 어디 병합/분기 그것은 당신이 때때로 할 뭔가 그리고 그것은 항상 조금 무서운 것 같다 (“이해 상충에 주의하십시오. 병합, 그들은 당신을 물린!”).

이미 Git이러한 작업 [병합/분기] 매우 간단하고 우리의 작업 루틴의 주요 부분 중 하나를 나타냅니다, 나를 믿으세요. 예를 들어, 에서 CSV/전복, 분기 그리고 병합 이후 장에서만 처음으로 해결됩니다. (고급 사용자를 위한), enquanto em qualquer Git에 대한 예약, 이것은 장에서 볼 수 있습니다. 3 (기본).

단순하고 반복적인 성격의 결과로, 분기 그리고 병합 더 이상 두려워할 것이 없습니다.. 실제로, 버전 제어 도구는병합 e criar 지점 무엇보다도.

더 이상 말하지 않는다, 개발 모델로 이동해 보겠습니다.. 제가 여기에 제시할 모델은 본질적으로 각 팀 구성원이 관리되는 소프트웨어 개발 프로세스에 도달하기 위해 따라야 하는 일련의 절차에 지나지 않습니다..

분산, 그러나 중앙 집중화

이것과 잘 작동하는 우리가 사용하는 리포지토리 구성 분기 중앙 저장소로 구성됩니다.. 이 리포지토리는 “tido como” 중앙 (Git은 DVCS이기 때문입니다. [분산 버전 제어 시스템], IE, 기술 수준에서 중앙 저장소와 같은 것은 없습니다.). 이 리포지토리를 참조합니다. 기원, 이 이름은 모든 Git 사용자에게 친숙하기 때문에.

각 개발자는 끌어 그리고 못 살게 굴지 대 한는 기원. 그러나 관계를 넘어 푸시 풀 중앙 집중식 [기원], 각 개발자는 또한 선택할 수 있습니다. [당겨] 하위 팀을 형성하기 위해 다른 쌍의 변경. 예를 들어, 이 기능은 두 명 이상의 개발자와 함께 훌륭한 새 기능에 대해 작업하는 데 유용할 수 있습니다., 이전에 전송 [추진] 진행 중인 작업은 기원. 위의 그림에서, 앨리스와 밥의 하위 팀이 있습니다., 앨리스와 데이비드, 클레어와 데이비드.

기술적, 이것은 앨리스가 Bob이라는 원격 Git을 정의한 것 이상의 것을 의미합니다., Bob의 리포지토리를 가리킵니다., 반대로.

주요 분기

백그라운드에서, 이 개발 모델은 기존 모델에서 매우 영감을 받았습니다.. 중앙 리포지토리에는 두 개의 분기가 있습니다. [분기] 무한한 삶:

  • 마스터
  • 개발

마스터 브랜치 에서 기원 모든 Git 사용자에게 친숙해야 합니다.. 병렬 마스터 브랜치, 또 다른 지점 호출 개발.

고려 원산지/마스터 소스 코드가 있는 메인 브랜치인 것처럼 머리 항상 상태를 반영합니다. 생산 준비 [생산 준비].

고려 원산지/개발 como sendo o 지점 소스 코드의 위치 머리 항상 다음 릴리스에서 전달될 최신 개발 변경 사항이 있는 상태를 반영합니다.. 일부는 이것을 호출할 것입니다. “지점 통합”. 가장 사악한 건물이 일어나는 곳입니다..

소스 코드의 소스 코드가 분기 개발 안정된 지점에 도달하고 출시 할 준비가되어 있습니다. [출시], 모든 변경 내용을 병합해야 합니다. [병합] 뒤로 마스터 브랜치 그런 다음 버전 번호로 표시 [릴리스]. 이 작업을 자세히 수행합니다., 나중에 논의될 예정입니다..

그래서, 변경 내용이 통합될 때마다 [병합] 뒤로 마스터, 새 버전이 생성됩니다. [출시], 정의에 의한. 우리는 그것에 대해 매우 엄격하려고, 그래서, 이론적, 스크립트를 사용할 수도 있습니다. 후크, 새로운 응용 프로그램을 자동으로 만들고 프로덕션 서버로 보내려면 커밋 에서 마스터.

보조 지점

분기 주요, 마스터 그리고 개발, 당사의 개발 모델은 다양한 것을 사용합니다. 분기 팀 구성원 간의 동시 개발을 지원하기 위한 지원, 무엇 1) 새로운 기능을 쉽게 추적할 수 있습니다. [기능], 2) 새 버전의 배달 준비 [릴리스] 그리고 3) 생산 실패를 신속하게 해결하는 데 도움이 됩니다. [핫픽스]. 달리 분기 주요, 이러한 분기 수명이 짧습니다., 그들은 결국 제거 될 것이기 때문에.

다른 유형의 분기 [보조] 우리가 사용할 수 있는, 는:

  • 피쳐 브랜치
  • 분기 릴리스
  • 핫픽스 브랜치

이들 각각 분기 특정 목적을 가지고 있으며 엄격한 규칙에 구속됩니다., 그런즉, 분기 podem dar origem a 지점 그리고 그 분기 병합해야 합니다. [병합] 대상에. 우리는 그들 중 하나 하나를 볼 수 있습니다 [분기] 순식간에.

기술적 관점에서, 이러한 분기 고려되지 않음 “특별”. 각 유형의 지점 우리가 그들을 사용하는 방법으로 분류됩니다.. 어쨌든, 간단합니다. 분기 좋은 오래된 Git의.

피쳐 브랜치

[기능 = 기능/기능]

– 분기 아웃 할 수 있습니다 [지점] 보낸 사람:
개발
– 병합해야 합니다. [병합] 다시:
개발
– 의 임명을위한 협약은 지점:
아무것도, 제외한 마스터, 개발, 릴리스*, 또는 핫픽스**

Tthe 피쳐 브랜치 (또는 때로는 호출 주제 분기) 향후 또는 향후 릴리스에 대한 새로운 기능/기능을 개발하는 데 사용됩니다.. 개발을 시작할 때 기능, 이 기능이 통합될 대상 버전은 해당 시점에서 잘 알려지지 않을 수 있습니다..

의 본질 피쳐 브랜치 그것은 만큼 존재한다는 것입니다 기능 개발 중, 그러나 결국 그것은 통합 될 것입니다 [병합] 뒤로 개발 (확실히 새로운 추가하려면 기능 다음으로 릴리스) 또는 폐기됨 (실패한 경험이 있는 경우).

피쳐 브랜치 일반적으로 리포지토리에만 존재합니다. 개발, não em 기원.

피쳐 브랜치 만들기

$ git 체크 아웃 -b 마이피처 개발
# Switched to a new branch "myfeature"

완성된 기능을 개발에 통합

기능 완료할 수 있습니다.[병합] com a 분기 개발 다음에 확실히 추가하려면 릴리스.

$ git 체크 아웃 개발
# 분기 '개발'로 전환
$ git 병합 --에서-ff 마이피처
# 업데이트 ea1b82a.. 오전 05:9557
# (변경 사항 요약)
# $ git 분기 -d 마이피처
# 삭제된 분기 마이피쳐 (05e9557).
$ git 푸시 원산지 개발

플래그 –노-FF 병합의 원인 [병합] 항상 새 개체를 만듭니다. 커밋, 병합을 수행할 수 있더라도 빨리 감기 [Ff 로]. 이렇게 하면 존재의 이력에 대한 정보가 손실되는 것을 방지할 수 있습니다. 피쳐 브랜치, 모든 그룹화 커밋합니다 이 에 추가된 기능. 비교:

후자의 경우 [위의 그림의], git의 역사에서 볼 수 없습니다. 커밋합니다 내에서 구현되었습니다. 기능; 모든 로그 메시지를 수동으로 읽어야 합니다.. 반전 기능 전체 (IE, um grupo de 커밋합니다), 그것은 마지막 상황에서 진짜 두통, 플래그가 있으면 쉽게 수행할 수 있습니다. –노-FF 사용 되었습니다..

예, 이렇게 하면 몇 가지 개체가 더 생성됩니다. 커밋합니다 (빈), 그러나 이득은 비용보다 훨씬 높습니다..

분기 릴리스

[릴리스 = 릴리스/배송/버전]

– 분기 아웃 할 수 있습니다 [지점] 보낸 사람:
개발
– 병합해야 합니다. [병합] 다시:
개발 그리고 마스터
– 의 임명을위한 협약은 지점:
릴리스*

Tthe 분기 릴리스 새 프로덕션 버전을 준비하는 데 도움이 됩니다. [생산 릴리스]. 그들은 당신이 마지막 순간에 물방울을 넣을 수 있습니다.. 또한, 그들은 사소한 수정을 허용 버그 e definição de 메타 데이터릴리스 (버전 번호, 빌드 날짜, 등). 이 모든 작업을 수행함으로써 릴리스 분기, o 브랜치 개발 수신을 위해 깨끗하게 유지 기능 다음 큰 릴리스 [버전].

새 를 만드는 중요한 순간 릴리스 분기 분기에서 개발 é quando o 개발 이미 (거의) 새 의 원하는 상태를 반영 릴리스 [버전]. 모든 기능 후보자는 릴리스 구축하려면 통합해야 합니다. [병합] 는 개발 이 시점에서. 다른 한편으로는 기능 겨냥 릴리스 선물은 다음 을 기대해야 한다 릴리스 [버전].

그것은 정확히 의 시작 부분에 릴리스 분기 다음 릴리스 버전 번호 받기 – 전에는 안 됩니다.. 그 순간까지, o 브랜치 개발 반영된 변경 사항은 “다음 릴리스” [다음 버전], 그러나 그것이 분명하지 않다면 “다음 버전” 결국 0.3 또는 1.0, até que o 릴리스 분기 시작. 이 결정은 시작 시 릴리스 분기 버전화에 대한 프로젝트의 규칙에 의해 수행되고 [나는 당신이에 대해 볼 것을 제안 “의미 판버전“].

릴리스 분기 만들기

Tthe 분기 릴리스 são criados a partir do 브랜치 개발. 예를 들어, 버전을 가정 해 봅시다. 1.1.5 현재 생산 버전이며 우리는 훌륭한 릴리스 오는. 의 상태 개발 está pronto para a “다음 버전” [다음 릴리스] 그리고 우리는이것이 버전이 될 것이라고 결정했습니다. 1.2 (대신에 1.1.6 또는 2.0). 그래서, 우리는 분기를 주고 릴리스 분기 새 버전 번호를 반영하는 이름:

$ git 체크 아웃 -B 릴리스-1.2 개발
# Switched to a new branch "release-1.2"
$ ./범프-버전.Sh 1.2
# 성공적으로 수정된 파일, 부딪힌 버전에서 1.2.
$ git 커밋 --m "Bumped version number to 1.2"
# [릴리스-1.2 74d9424] 범프 버전 번호에 1.2
# 1 파일변경, 1 삽입(+), 1 삭제(-)

새 를 만든 후 지점 액세스, 버전 번호에 부딪혔습니다.. 여기, bump-version.sh 새 버전을 반영하기 위해 작업 복사본에서 일부 파일을 변경하는 셸 스크립트입니다.. (이 수, 물론, 수동 변경 – 요점은 일부 파일이 변경된다는 것입니다.) 그래서, 완료됩니다. 커밋 수정된 버전 번호.

이 새로운 지점 잠시 동안 거기에 존재할 수 있습니다., até que a 릴리스 영구적으로 출시. 이 기간 동안, 버그 수정 은 이에 적용할 수 있습니다. 지점 (대신 브랜치 개발). 새롭고 큰 추가 기능 여기에 엄격하게 금지되어 있습니다.. 병합해야 합니다. [병합] 에서 개발 그리고, 이것처럼, 다음 큰 기다립니다 릴리스.

릴리스 분기 완료

릴리스 분기 실제 버전이 될 준비가되어 있습니다., 일부 작업은 수행해야 합니다.. 첫 번째, o 릴리스 분기 병합됩니다. 마스터 (각 이후 커밋 에서 마스터 정의에 의해 새로운 버전입니다, 기억). 다음, 이 커밋 에서 마스터 이 버전 기록에 대한 향후 참조를 용이하게 하려면 표시해야 합니다.. 마지막으로, 변경 사항은 릴리스 분기 병합해야 합니다. [병합] 다시 개발, 그래서 릴리스 선물에는 이러한 버그 수정도 포함됩니다..

Git의 처음 두 단계:

$ git 체크 아웃 마스터
# 분기 '마스터'로 전환
$ git 병합 --에서-ff 릴리스-1.2
# 재귀에 의해 만들어진 병합.
# (변경 사항 요약)
$ git 태그 -1.2

릴리스 이제 완료되고 향후 참조로 표시됩니다..

참고: -s 또는 -u 플래그를 사용할 수도 있습니다. 암호화하여 태그에 서명하려면.

변경 사항을 유지하려면 릴리스 분기, 우리는 그들을 다시 함께 넣어해야합니다 개발. Git에:

$ git 체크 아웃 개발
# 분기 '개발'로 전환
$ git 병합 --에서-ff 릴리스-1.2
# 재귀에 의해 만들어진 병합.
# (변경 사항 요약)

이 단계는 병합 충돌로 이어질 수 있습니다. (아마 가서, 버전 번호를 변경하면). 그렇다면, 수정하고 커밋.

지금, 우리가 정말로 끝났어, o 릴리스 분기 제거할 수 있습니다., 우리는 더 이상 필요하지 않기 때문에:

$ git 분기 -d 릴리스-1.2
# 삭제된 분기 릴리스-1.2 (ff452fe).

핫픽스 브랜치

– 분기 아웃 할 수 있습니다 [지점] 보낸 사람:
마스터
– 병합해야 합니다. [병합] 다시:
개발 그리고 마스터
– 의 임명을위한 협약은 지점:
핫픽스**

Tthe 핫픽스 브랜치 são muito parecidos com os 릴리스 분기, 그들은 또한 새로운 생산 버전을 준비하기위한 것이기 때문에, 계획되지 않았지만. 그들은 생산 버전의 원치 않는 상태 직후 행동 할 필요성에서 발생 [사용 중]. 프로덕션 버전에서 중요한 오류가 발생합니다., 즉시 해결해야 합니다., 그런 다음 핫픽스 브랜치 기존 프로덕션 버전을 표시하는 태그에서 파생될 수 있습니다. 마스터 브랜치.

본질은 팀 원의 작품이라는 것입니다. (에서 브랜치 개발) 계속 할 수 있습니다., 다른 사람이 생산 실패에 대한 빠른 수정을 준비하는 동안.

핫픽스 분기 만들기

Tthe 핫픽스 브랜치 são criados a partir do 마스터 브랜치. 예를 들어, 버전이 있다고 가정합니다. 1.2 실행 중인 프로덕션 릴리스의 현재 버전이며 심각한 오류로 인해 문제가 발생합니다.. 변경 사항 개발 여전히 불안정한 상태로 두십시오.. 그런 다음 핫픽스 브랜치 문제 해결을 시작:

$ git 체크 아웃 -b 핫픽스-1.2.1 마스터
# Switched to a new branch "hotfix-1.2.1"
$ ./범프-버전.Sh 1.2.1
# 성공적으로 수정된 파일, 부딪힌 버전에서 1.2.1.
$ git 커밋 --m "Bumped version number to 1.2.1"
# [핫픽스-1.2.1 41e61bb] 범프 버전 번호에 1.2.1
# 1 파일변경, 1 삽입(+), 1 삭제(-)

분기 후 버전 번호를 변경하는 것을 잊지 마세요.!

다음, 오류를 수정하고 커밋 하나 이상의 수정 커밋 별도.

$ git 커밋 -m "Fixed severe production problem"
# [핫픽스-1.2.1 abbe5d6] 심각한 생산 문제 해결
# 5 파일변경, 32 삽입(+), 17 삭제(-)

핫픽스 분기 마무리

완료되면, o Bugfix 다시 병합해야 합니다. 마스터, 그러나 그것은 또한 다시 통합 될 필요가 개발, a fim de garantir que o Bugfix 다음 버전에도 포함되어 있습니다.. 이것은 방법과 매우 유사합니다. 릴리스 분기 최종 확정.

첫 번째, 업데이트 마스터 그리고 태그 릴리스 [여름을 표시]:

$ git 체크 아웃 마스터
# 분기 '마스터'로 전환
$ git 병합 --에서-핫픽스 ff-1.2.1
# 재귀에 의해 만들어진 병합.
# (변경 사항 요약)
$ git 태그 -는 1.2.1

참고: -s 또는 -u 플래그를 사용할 수도 있습니다. 암호화하여 태그에 서명하려면.

다음, 포함 Bugfix 에서 개발 또한:

$ git 체크 아웃 개발
# 분기 '개발'로 전환
$ git 병합 --에서-핫픽스 ff-1.2.1
# 재귀에 의해 만들어진 병합.
# (변경 사항 요약)

여기서 규칙의 유일한 예외는, quando existir um 릴리스 분기 진행 중인 상황, 변경 내용 핫픽스 이에 대해 병합해야 합니다. 릴리스 분기, 보다 개발. 병합 Bugfix 에서 릴리스 분기 irá fazer com que o Bugfix 병합되어 개발 또한, quando o 릴리스 분기 완료됨. (작업하는 경우 개발 즉시 이 것을 요구합니다. Bugfix e não puder esperar até que o 릴리스 분기 완료됨, você pode seguramente mesclar o Bugfix 에 대 한 데베올프 또한.)

마지막으로, remova a 지점 임시:

$ git 분기 -핫픽스 d-1.2.1
# 삭제된 분기 핫픽스-1.2.1 (abbe5d6이었다).

요약

이 분기 모델에 대해 정말 특별한 것은 없지만, 게시물의 시작 부분에 그림은 우리의 프로젝트에 매우 유용 할 수 있습니다. 이해하기 쉬운 정신 모델을 보여주며 팀 구성원이 분기 그리고 공개.

그림의 고품질 PDF 버전은 원래 게시물의 블로그에 제공됩니다: http://nvie.com/posts/a-successful-git-branching-model/ [또는 아래 다운로드 링크에서]. 언제든지 빠른 참조를 얻기 위해 벽에 놓고 가서.

총 조회 수: 8810

에 대 한 의견 “Git에 분기의 성공적인 모델

  1. Deivson 출생 고 말했다:

    안녕하세요, SEI o Git 법 desenvolvido 따라 처음 리눅스 시스템 더 ao는 falar em portabilidade, 알고 살펴 보는 또는 Git로 다 창 MSI 및 POSIX 하지??

응답을 남기다

귀하의 이메일 주소가 게시 되지 것입니다. 필수 항목으로 표시 됩니다. *