SQLAlchemy

Coming Soon...

hg Release Branch

今作ってるアプリをリリースしようと思ったが、実は未だにブランチを作成したことすらないのでブランチについてまじめに考えてみようと思う。

Let’s Branch

../../../_images/branch1.png

とりあえず、ブランチを作ってみた。

画像はTortoiseHgのWorkbench。

# hg branch hoge
# hg ccmmit -m "to hoge"
# hg update default
# hg commit -m "to default"

適当に作っているので、細かいところは気にしない。

作るのは簡単だが、ブランチ作成とは何に使うのか?というところがわからないのでバージョン管理におけるブランチの意味について考えてみる。

Branch

どんな時にブランチができるのか

  • リリース
  • 他の人にcloneされる
  • etc

1つ目はいつはmasterにマージされる。

2つ目は、pull reauestをすればきっとマージしてくれる。

なんにせよ結局ブランチはマージされる運命にある。

その他にも必要に応じてブランチを作る状況があるかもしれない。知った段階で追記したい。

Release Branch

本題のリリースブランチ。

# リリースブランチのあり方

  1. ひと通り実装が終わったらリリースブランチを作成(テストはその後)
  2. テストやバグ修正のコミットはリリースブランチに
  3. テスト、バグ修正が終了->defaultにマージ
  4. リリースブランチの先頭にTagをつける

このようなワークフローが一般的なようだ。

GithubやBitbucketにあるリポジトリのコミットログを見たりして勉強するのが一番いいのかもしれない。 (ちらっと見てみた限りだとこんなようなワークフローが多い気が)

hgでは以下のようにtagをつける。

# hg tag hoge

Function Branch

開発中からブランチを切っていくという発想もある。

新しい機能を実装しようという時にmasterから、その機能実装用にブランチを切ってそこでその機能を作成する。

機能ブランチについてメリット・デメリットを考えてみた。

# merit

  • masterが綺麗なまま保たれる(いつでもリリース可能)
  • ブランチがマイルストーン的な役割を果たしてくれる
  • その機能を追加した時の作業分が明確にわかる

# demerit

  • 機能実装中に他の機能実装依頼があった時困りそう
  • ブランチを作ることに慣れていない人はめんどい
    • 今どのブランチにいるとか気にしたことすらないのでどこにコミットしているのかわかんなくなるかもしれない

# 使う場面

他人のプロジェクトをForkした際に、pull requestを送るとき。

  1. Forkした段階でbranchを切る。
  2. 何らかの修正をする
  3. この機能取り入れてほしいな。と思う。
  4. pull requestを送る
  5. branchを切ってあると、どこまで修正してあるのかわかりやすい
  6. branchを取り込めば、pull requestを送った人の環境で簡単にテスト可能
  7. 気に入ったら、branchをマージするだけでいい

マナー的にpull requestをするときはbranchを切ったほうが良好な人間関係が作れる気がする。

Merge

ブランチといえばマージがついてくる。Conflictがあった時にマージしないといけない。

デフォルトのマージはかなり残念なコトになっているので

<<<<<<<<<local
default
==========
ver other
>>>>>>>>>other

これをいちいちエディタで修正するのは無駄。

Vimmerはhgrcに以下を設定しよう。

[ui]
merge = vimdiff

vimdiffでは画面が以下のように分割して出現する。

マージ結果 | local | other

マージもしてみた感じはこんなん。

../../../_images/branch2.png

私事だが、最近vim .hg/hgrcとして設定をちまちまいじっていたが、~/.hgrcに書けばメシウマということに気づいた。

参考記事

# ブランチにもっと詳しくなりたい時

以下の記事を見てみるといいかもしれない

Tinkerer - Sphinx

reStructuredText

Sphinxで使われている軽量マークアップ。

Markdownより洗練されている感じ。

ReSTとかRSTとか呼ばれたりしてる。

Pygments

コードハイライトにはPygmentsが使われています。

Sphinxのドキュメントに詳しく書いてある。

コードサンプルの表示 — Sphinx v1.0.6 documentation

Contents

Sphinxで目次を付けれる。

.. contents:: 目次のタイトル?
     :depth: 2

Sphinxは色々なことを叶えてくれる。

ページ内の目次を作りたい :: ドキュメンテーションツール スフィンクス Sphinx-users.jp

ReST

reStructuredTextの基本だけならSphinxのドキュメントにある。

reStructuredText入門 — Sphinx v1.0 (hg) documentation

reStructuredTextについての詳細については日本語全訳があった。

はやわかり reStructuredText

Error Report

  • 1行目の見出し以外に”=”下線による見出しを作るとエラーが出てtinkerer -bが終了できないので注意。

Start Tinkerer

# pip install tinkerer
# mkdir blog
# cd blog
# tinker -s
# vim conf.py
# tinker -p "hoge"
# vim YYYY/MM/DD/hoge.rst
# tinker -b
# hg init
# vim .hg/hgrc
# hg add .
# hg commit -m 'add hoge'
# hg push

Description

  • mkdirで作成するフォルダ名は何でもいい
  • conf.pyの編集
# -*- coding: utf-8 -*-

import tinkerer
import tinkerer.paths

    # **************************************************************
    # TODO: Edit the lines below
    # **************************************************************

    # Change this to the name of your blog
    project = 'ブログタイトル'

    # Change this to the tagline of your blog
    tagline = 'タイトルの下に書かれる説明'

    # Change this to the description of your blog
    description = '説明'

    # Change this to your name
    author = 'Hoge Hogeo'

    # Change this to your copyright string
    copyright = '2013, ' + author

    # Change this to your blog root URL (required for RSS feed)
    website = 'http://<username>.bitbucket.org/'
  • BitBucketリポジトリ

<username>.bitbucket.org という名前のリポジトリを作っておく必要がある。

.hg/hgrcには、そのリポジトリを参照するようにpathsを書き込む。

[paths]
default = ssh://hg@bitbucket.org/<username>/<username>.bitbucket.org
  • ビルド
# vim YYYY/MM/DD/hoge.rst
# tinker -b

記事編集->Tinkererビルドが記事更新のサイクルになります。

編集途中で内容を確認したいときは、ビルドしてblog/html以下にあるindex.htmlをブラウザで見ればいい。

後は、pushすれば勝手にアップロードされる。

# hg add .
# hg commit -m "edit hoge"
# hg push

参考記事

# r_rudiさん

そこはかとなく~はPythonやってる人なら一度は見たことがあるような気がするブログ。

Python Developers Festa 2013.03 のr_rudiさんの発表がTinkererだったのがこのブログを作ろうと思ったそもそもの始まり。

はてブのは旧ブログなのでPowered by Tinkererな新しいブログを参照のこと。 そこはかとなく書くよん。

# Else