git-flow를 봐야 합니다. 훌륭한 (그리고 인기있는) 브랜칭 모델입니다.
힘내 흐름 요약
분기
주위에 영원히 머물 주요 줄기는 develop
와 master
. master
최신 릴리스와 develop
최신 "안정된"개발 사본을 보유합니다.
기고자는 다음에서 feature
분기를 작성 합니다 ( feature/
일반적으로 접두어 사용 ) develop
.
$ git checkout -b feature/my-feature develop
및 hotfix
분기 ( hotfix/
일반적으로 접두사로 ) master
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
이 지점은 "일회용"으로, 메인 트렁크로 다시 병합되기 전에 수명이 짧습니다. 그것들은 작은 기능을 캡슐화하기위한 것입니다.
마무리 지점
feature
지사 와 함께 기고자가 완료되면 다시 분기로 병합됩니다 develop
.
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
그들은이 완료하면 hotfix
지점, 그들은 모두에 백업 병합 master
및 develop
핫픽스 앞으로 수행 있도록 :
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
이것이 지속적인 통합 측면입니다.
자료
릴리스 패키징을 시작할 준비가되면 release
"안정된" develop
브랜치에서 브랜치를 작성하십시오 ( feature
브랜치 작성과 동일 ). 그런 다음 태그에 버전 번호를 표시합니다 (아래 설명 참조).
별도의 release
분기를 사용하면 develop
버그를 수정하고 release
분기에 마무리 작업을 추가하는 동안 새로운 기능을 계속 개발할 수 있습니다 .
릴리스를 완료 할 준비가되면 모든 변경 사항이 적용되도록 release
분기를 둘 다 ( master
와 develop
마찬가지로 hotfix
) 로 병합하십시오 .
태깅
release
분기 또는 분기 를 만들면 hotfix
태그에서 버전 번호가 적절하게 충돌합니다. 바닐라 git를 사용하면 다음과 같습니다.
$ git tag -a <tag-name> -m <tag-description>
그런 다음 태그를 원격 저장소에 별도로 푸시해야합니다.
$ git push --tags
일반적으로 버전이 형식을 취하는 시맨틱 버전 관리 를 사용하는 것이 가장 좋습니다 major.minor.hotfix
. 주요 범프는 이전 버전과 호환되지 않는 반면, 부 범프 및 핫픽스 범프는 이전 버전과 호환되지 않습니다 (베타가 아닌 한 0.x.x
).
합병
위에서 본 것처럼 git-flow는 다음 명령으로 브랜치를 병합하도록 권장합니다.
$ git merge --no-ff <branch-name>
이 --no-ff
옵션을 사용하면 리포지토리의 현재 커밋에 여러 가지 브랜치를 남기지 않고 모든 브랜치 히스토리를 유지할 수 있습니다 (걱정하지 않아도 모든 버전에 브랜치가 생길 염려가 없습니다).
당신은 또한 함께하는 것이 좋습니다
$ git pull --rebase
따라서 쓸모없는 병합 커밋을 많이 추가하지 않습니다.
git에서 기본적으로이 두 가지 작업을 모두 수행하도록 구성 할 수 있습니다 .gitconfig
. 나는 당신이 하나를 찾아 보자.)
브라우징 버전
누군가 특정 버전의 코드베이스를 찾으려면 이름으로 태그를 체크 아웃 할 수 있습니다.
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
또는 누군가가 github에서 탐색하는 경우 "분기"드롭 다운에 "태그"탭도 있습니다.
git-flow 확장 사용 (권장)
이 모델을 사용하는 가장 좋아하는 방법은 git 의 git flow extension 을 사용하는 것 입니다.
( 편집 : Louis는 AVH 포크 를 권장하며 git describe
현재 더 잘 작동 하고 더 활동적입니다. 감사합니다. Louis
확장 기능은 merge --no-ff
병합 후 분기 사용 및 삭제와 같은 모든 지저분한 부분을 자동화 하여 인생을 살아갈 수 있습니다.
예를 들어, 확장을 사용하여 다음과 같이 기능 분기를 작성할 수 있습니다.
$ git flow feature start my-feature-name
그렇게 마무리
$ git flow feature finish my-feature-name
핫픽스 및 릴리스에 대한 명령은 다음과 같이 분기 이름 대신 버전 번호를 사용하지만 비슷합니다.
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
Git flow는 버전 태그를 생성하고 구성 또는 매니페스트 파일 (grunt와 같은 작업 관리자로 수행 할 수 있음)에서 버전을 충돌 시킨다는 점을 친절하게 상기시켜줍니다.
희망이 도움이 되길 바랍니다 :) 어떻게 Travis CI 설정과 어떻게 통합 할 지 잘 모르겠지만 githooks가 당신을 거기에 데려다 줄 것입니다.