より良い Git ワークフローを目指して
(black7375.tistory.com)Git をより効率的に活用するための方法をまとめました。
- リポジトリ構成
- Git は分散バージョン管理システムなので、中央集権型、GitHub/GitLab 方式、階層型などさまざまな構成が可能
- ブランチ構成
- GitHub Flow: Main を置き、機能やバグ修正用ブランチを作成してフィードバックを受けながらマージする形
- Git Flow: 頻繁なデプロイよりも従来型の開発に向いている
- Feature ブランチを作って Develop ブランチにマージ
- 十分に成熟した Develop ブランチから Release(Stage) ブランチを作り、バグ修正のみを行い、後で Develop と Master に統合
- Release の準備ができたら Master ブランチにマージし、その後はホットフィックスのみ
- GitLab Flow: 複雑な Git Flow と、単純すぎる GitHub Flow の中間的な形
- Git Flow で一時的に維持する Release ブランチの代わりに、継続的に維持する Stage ブランチを使用
- ホットフィックスは Production と Stage に、バグ修正は Stage と Develop に反映
- Perforce Stream: 複数のリリースを管理しなければならないときに有利
- Release でバグを修正したら Main-Develop へ伝播
- Develop で機能を作ったら衝突をなくして Main に反映
- Trunk ベース: Main(Master) をより効率的に使おうとする試みで、主にビッグテックが使用
- Main を長く維持し、リリースブランチでは別途バグ修正を行わない
- 機能はフラグを使って Off 状態でマージし、常に最新コードを維持
- コミット
- コンベンション: 一般的には Angular コンベンションがよく使われるが、合意のうえで絵文字などを使うことも可能
- 単位: 最小単位ごとに行うべきだが、やはりチームごとにその最小単位について合意が必要
- Hunk ごとに変更を細分化してステージング可能
- Delta 単位で変更を比較できると便利
- 投機的コミットと線形的な履歴: コンテキストを保つために頻繁にコミットしつつ、コミット履歴は線形に維持する方法
- Stash やプロトタイプの試行など、作業の保存が必要になるたびに保存
- Checkout が必要な場所ごとに Checkout して継続的にコミットし、rebase を通じて線形性を維持
- git-branchless というツールを使うと便利
git sl: 匿名ブランチを追跡してコミット履歴を見やすく可視化git prevとgit next: 前後の単位へ簡単にチェックアウト可能git sync: Main にリベースgit move: 任意の場所にコミットを移動可能git restack:rebaseやcommit --amendなどでコミット履歴の順序が崩れたときに復元git undo: 取り消し可能
- マージ
- パッチスタック(Patch Stack): 機能[1/3]、機能[2/3]、機能[3/3] のように分割してレビューする方式
- 一級のコンフリクト: Git と互換性のある Jujutsu はコンフリクトをコミットに記録するため、一度解決したコンフリクトが後で再発しにくい
- 3 Way Diff: Jujutsu の場合、コンフリクト発生時に Base-Ours を Diff として、Theirs はスナップショットとして見せるので直感的。ただし、IDE/エディタのシンタックスハイライトや Base-Their Diff を見たいニーズがあるかもしれない
- バイナリコンフリクト: Git はバイナリファイルでコンフリクトが発生すると基本的に利用者任せだが、個人的には簡単なツールを作って Base と Their のファイルを生成するようにしている
- パッチとメール: より伝統的な(?) マージ方式の紹介
git request-pullはプルリクエストを生成するコマンドgit send-mailでパッチをメール送信し、git amでパッチ適用が可能
- その他の管理方法
- Worktree: Git history は共有したまま、SVN ブランチのように作業ファイルだけを複数箇所にチェックアウトして作業を同時進行できる
- Git LFS: 大容量ファイルを管理する方法
- 部分クローンと部分チェックアウト: 部分的に clone してダウンロード時間を短縮し、部分的に checkout して必要なディレクトリだけ作業可能
- Scalar: Microsoft の取り組みにより、巨大なリポジトリを簡単に管理できるようにする
まだコメントはありません。