Git を使った WordPress の開発

WordPress コアの主要開発者のひとりの Mark Jaquith の書いた「Developing on WordPress using Git」の抄訳です。Git は私もほとんど使ったことないので、変なとこがあったら教えてください。

 

まず最初はツールです。もちろん Git は必要です。また、Subversion 互換 diff を生成する Bash スクリプトの git-svn-diff も必要になります。

次のように、git-svn-diff をダウンロードしてパスの通っている任意の場所に置き、実行可能にします:

curl -L http://rkj.me/a1 > /usr/local/bin/git-svn-diff
sudo chmod +x /usr/local/bin/git-svn-diff

次に、git-svn-diff ではなくgit svn-diff を使えるようにするため、~/.gitconfig を編集して次を追加します:

[alias]
svn-diff = !git-svn-diff

次のステップは少し時間がかかります(ひと晩くらいかかるかも)。WordPress の SVN 履歴を Git の SVN サポートを利用してプルダウンします。

git svn clone -t tags -b branches -T trunk http://core.svn.wordpress.org/

終了したら、Git マスターブランチに入ります。これは WordPress SVN の trunk に対応します。WordPress のブランチはremotes/{name}に有ります。

SVN からの最新の変更をプルするには git svn rebase を使います。重要なルール: SVN ブランチ(remotes/{name})は決して修正しないこと。代わりに新しいトピックブランチを作成します。

例えば、trunk 向けのあるチケットの作業をするとします。次のようにremotes/trunk から新しいブランチを作ります:

git checkout -b ticket-12345 remotes/trunk

こうすると、SVN の trunk をベースにした ticket-12345 という名称の新しいローカルの Git ブランチが作成されますので、それをチェックアウト(言い換えれば、それにスウィッチ)します。

WordPress SVN ブランチで作業する場合は次のようになります:

git checkout -b ticket-12345 remotes/3.1

作成したブランチで作業します。必要なら、複数のローカル Git コミットを作成できます。こうすれば、自分にとって意味のあるより小さな「かたまり」に作業を分けることができます。

パッチを送る準備ができたら、git-svn-diff を使ってパッチを生成します。

git svn-diff > ~/12345.diff

もしコミットアクセス権があるのなら、このトピックブランチから Subversion にコミットできます。とはいえ、気をつけてください!最初に git svn rebase を実行して自分のパッチを最新にしてください。次に、自分のローカルの git コミットを潰しておいてください。さもないとすべての各コミットが SVN に個別にコミットされてしまうからです。次のようにして、自分の複数のコミットを一つのコミットに rebase してください:

git rebase -i remotes/trunk

最初のコミットには “reword” を使用します。それに続くコミットには “fixup” を使用します。こうすると複数のコミットを一つにまとめることができます。そして、統合したコミット用に修正したコミットメッセージを入力するよう指示されます。

準備できましたか?これで次のように SVN にコミットできます:

git svn dcommit

Git には、そのトピックブランチがいつチェックアウトされたのかによって、そのコミットがどの SVN ブランチから来たのかが分かります。そのコミットがどれにアタッチされているのかを確認するには次のようにします:

git svn info

いくつかヒント:

.gitignore ファイルを作成してください。ここには Git に無視させたいファイルやディレクトリをリストアップします。まず最初に、.gitignore ファイル自身を無視させます!次に、ローカルの wp-config.php を無視させます。最後に、追加のプラグイン、必ず使用するプラグイン、テーマ、アップロードファイルなどなど。git status を実行し、WordPress や 自分のパッチにコミットしたくないものをすべて追加します。


Twitter Comment


This entry was posted in 小ネタ. Bookmark the permalink.