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 dcommitGit には、そのトピックブランチがいつチェックアウトされたのかによって、そのコミットがどの SVN ブランチから来たのかが分かります。そのコミットがどれにアタッチされているのかを確認するには次のようにします:
git svn infoいくつかヒント:
.gitignoreファイルを作成してください。ここには Git に無視させたいファイルやディレクトリをリストアップします。まず最初に、.gitignoreファイル自身を無視させます!次に、ローカルのwp-config.phpを無視させます。最後に、追加のプラグイン、必ず使用するプラグイン、テーマ、アップロードファイルなどなど。git statusを実行し、WordPress や 自分のパッチにコミットしたくないものをすべて追加します。