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가 당신을 거기에 데려다 줄 것입니다.