git-flowを見てください。優れた(そして人気のある)分岐モデルです。
Gitフローの概要
分岐
永遠の周りに滞在する主なトランクがある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では、これらの両方をデフォルトで行うように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拡張機能を使用することです。
(編集:ルイはAVHフォークを推奨git describe
しています。これは、現在より良く機能し、よりアクティブになります。ありがとう。
拡張機能は、すべての厄介な部分を自動化して(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フローはバージョンタグを作成し、構成ファイルまたはマニフェストファイル(gruntなどのタスクマネージャーで実行できます)でバージョンをバンプするように親切に通知します。
それが役に立てば幸いです:) Travis CIのセットアップにどのように統合するのか正確にはわかりませんが、githooksがあなたをそこに導くと思います。