#author("2016-07-05T14:33:13+09:00","default:wikiwriter","wikiwriter") &tag(git/ワークフロー); *目次 [#q3c84f62] #contents *関連ページ [#g5120440] *参考情報 [#x5423ea6] *共同開発時のワークフロー [#kf4c5436] -[[Git のマージについて、自分的まとめ - tanaka51のブログ:http://tanaka51.hateblo.jp/entry/20120530/1338386845]] -[[git merge --squash でブランチでの変更を1コミットにまとめてマージ - Qiita:http://qiita.com/qckanemoto/items/3f9b798fe3fb5e129489]] -[[git rebase -i はやっぱりイケてる件【git】【rebase 】【iオプション】 - DRYな備忘録:http://otiai10.hatenablog.com/entry/2012/11/10/013925]] -[[[Git] 使い分けできていますか?マージ(merge)&リベース(rebase)再入門 - The Powerful Code:http://powerful-code.com/blog/2012/11/merge-or-rebase/]] **基本的な考え [#w505049e] -ローカル(リモート用=masterとか) /ローカル(自分用=devとか)を保守する。 -masterではgit pull する(masterで直接変更しちゃった場合は、git pull --rebaseが良いかもしれない)。 -開発はトピックブランチで行い、masterにmergeする。 -mergeは--squash(複数のコミットをまとめる)、通常、--no-ff(必ずマージコミットを作る)など使い分けることができる。 -merge後はトピックブランチは削除する。ただしブランチを削除した場合分岐していたという分岐履歴は残るがブランチ名は残らない。 -ブランチ名を残したい場合、[[how to get git log display name of (deleted) branches:http://goobbe.com/questions/733292/how-to-get-git-log-display-name-of-deleted-branches]]によると、自動で作られるマージコミットのコメントを参照するか、ブランチ削除する前にtagをつけておくなどの対策をとらないといけないらしい。 *リリース戦略 [#j3c4d329] **2015/12/09のベストプラクティス [#h94c9238] -複数リリースを同時にメンテナンスする必要がある場合GitHubフローは使いづらい(アプリ・デスクトップソフト・受託開発など)。 -[[GitLab Flow | GitLab:https://about.gitlab.com/2014/09/29/gitlab-flow/]]にある「Release branches with GitLab flow」が参考になる。2-3-stable, 2-4-stableのように安定版ごとにブランチを作ってリリースするというもの。 #ref(release_branches.png) -各バージョンをリリースするごとにブランチを作るのはめんどくさいので必要ない場合はリリースブランチを作らないことにして、以下のような方法をとることにした。 --masterブランチでv1.0というタグを作成これをリリース。 --masterブランチはv1.1の開発に進む。 --v1.0の修正を行う必要がでてきた場合、v1.0のタグからrel1.0ブランチを作成。 git checkout -b rel1.0 refs/tags/v1.0 --修正後v1.0aタグを作成してリリース。 -修正は最初にmasterに反映し、各リリースブランチにcherry-pickする。 -リリースブランチは不要になったら削除。再修正が必要になった場合最新のリリースタグから再度ブランチを作成すれば良い。 -リリースブランチは不要になったら削除。再修正が必要になった場合最新のリリースタグ(例えば先ほどのv1.0a)から再度ブランチを作成すれば良い。できるかどうか要確認!