CustomDataBaseTables Version2のプラグインを公開するにあたって、ついでに今後の運用がしやすいようにリポジトリの管理フローを自分なりに最適化してみようと思った次第。
ちなみに、現状のリポジトリ管理状況は下記のようになっている。
| リポジトリ | GitHub | WordPress.org(SVN) | 備考 |
|---|---|---|---|
| 公開用 | (master) | Revision: 1254821 | 最新バージョンのリポジトリ(原則的にGitHubとSVNの両リポジトリのソースは同一) |
| ソース管理用 | master | – | ソース管理用のリポジトリ |
| 開発用 | version_2 | – | 開発用のリポジトリ(バージョン2開発専用) |
今回、GitHub側のversion_2リポジトリをmasterにmergeしてしまうのだが、プラグイン・バージョン2は動作環境がPHP5.4以上であるため、一応、PHP5.3以前の環境向けのユーザー用の開発継続用にバージョン1系のリポジトリも残しておきたいと思う。
なお、SVN側はあくまでもリリース専用リポジトリという位置づけにして、GitHubのmasterとの同期はしないことにする。
──ということで、理想のリポジトリ管理仕様は下記のようになるのかな…。
| リポジトリ | GitHub | WordPress.org(SVN) | 備考 |
|---|---|---|---|
| 公開用 | (master) | Revision: 1254821 | 最新バージョンのリポジトリ(原則的にGitHubとSVNの両リポジトリのソースは同一) |
| ソース管理用 | master | – | ソース管理用のリポジトリ |
| バージョン1系開発用 | legacy-master | – | バージョン1系開発専用(masterへのマージは禁止) |
| 最新開発用 | develop | – | 最新バージョンの開発用 |
このリポジトリ構成を実現するには、
- version_2リポジトリをmergeする前に、masterブランチからlegacy-masterブランチを切る(GitHub側)
- version_2ブランチをmasterにmergeする(GitHub側)
- masterブランチからdevelopブランチを作成する(GitHub側)
- GitHubからmasterブランチをローカルリポジトリにcloneして、ディストリビューション・ソースのみをsvnへcommitする
毎回 4. の対応が面倒だが、公開環境側にはnpm、gulp、bower系のリソースや、gitの履歴情報は必要ないので、ここで削ぎ落として最適化しておかないと無駄にダウンロードファイルが肥大化してしまう。
では、自分自身の備忘録的に手順をまとめておこうかと。
1. version_2リポジトリをmergeする前に、masterブランチからlegacy_masterブランチを切る
最初にmasterブランチに移動して、legacy-masterブランチを作成する(ローカルリポジトリにて)。
$ git checkout master
$ git checkout -b legacy-master
$ git branch
* legacy-master
master
version_2
次に、ブランチをコミットしてリモートへpushする。
$ git add .
$ git commit -am "Built for maintenance of plugin version 1.x system as legacy master repository"
$ git push origin legacy-master
GitHubサイトにて、legacy-masterブランチが追加されていることを確認する。
2. version_2ブランチをmasterにmergeする
masterブランチに移動して、version_2ブランチのmergeを実行する(ローカルリポジトリにて)。
$ git checkout master
$ git merge --no-ff version_2
merge後に、リモートリポジトリへローカルのmasterをpushする。
$ git checkout master
$ git push origin master
これでリモートのmasterリポジトリもバージョン2の最新ソースとなった。この時点でversion_2リポジトリは不要になったので削除する(ローカルリポジトリにて)。
$ git branch -d version_2
$ git push origin :version_2
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/legacy-master
remotes/origin/master
3. masterブランチからdevelopブランチを作成する
これは、masterブランチに移動してから、developブランチを作成するだけだ。
$ git checkout -b develop
$ git push origin develop
4. GitHubからmasterブランチをローカルリポジトリにcloneして、ディストリビューション・ソースのみをsvnへcommitする
ここからが面倒なところだ。まず、プラグインリリース用のディストリビューション・ソースをデプロイする必要があるため、npmがグローバルインストールされている環境下にmasterブランチをcloneする(cloneしたmasterブランチに改めてnpmのグローバルインストールから始めてもイイ…というか正規の流れはこちらなのだが、npmのインストールには結構時間がかかるので、せめてローカルインストールからデプロイ環境構築をした方が圧倒的に早い)。
まず、デプロイ環境下にて適当にディレクトリを作成して、そこにmasterブランチをcloneし、npmをインストール、bower、gulpを実行する。
$ mkdir -p custom-database-tables
$ git clone https://github.com/ka215/cdbt.git custom-database-tables
$ cd custom-database-tables
$ npm install
$ bower install
$ gulp
これで、ディストリビューション・ソースがデプロイされるので、プラグインのリリースに必要なアセットのみを抽出して、SVNのローカルリポジトリへコピーする。私の場合、この操作はローカルPC(Windowsマシン)上で行うので、コマンドライン操作は特にない。
コピーが完了したら、リモートブランチをtrunkに切り替えてから、適宜ファイルやディレクトリの追加・削除を行って、SVNコミットという流れになる。
この運用部分が毎度重いので、なんとか改善したいものだが…まぁ、今はおいておこう。