gitを使ったEC-CUBE3のアップグレード（3.0.10 → 3.0.13）

gitを使ってのEC-CUBE3のアップグレード方法を備忘録のため残しておきます。

構成
- さくらレンタルサーバ（本番）
- ローカルPC（開発環境）mac
- EC-CUBE3.0.10

目標
EC-CUBE3.0.13までアップグレード

##3.0.10->3.0.11
####まずローカル開発環境にEC-CUBEのgithubとの連携を作ります。

1. 以下masterブランチにて実行
`git remote add ec-cube https://github.com/EC-CUBE/ec-cube.git`
`git fetch`
`git pull`

2. remotes/ec-cubeが見えているか確認
`git branch --all`

3. リモートのec-cubeからeccube_masterブランチを作成
`git checkout -b eccube_master remotes/ec-cube/master`

4. ここで次のバージョンのタグをもとにブランチ作成
`git checkout -b 3.0.11 refs/tags/3.0.11`
(これの前にgit fetch --tags ec-cubeを実行したけどなくても良さそうな気がした）

<br />

####マージして差分をチェック

1. masterへチェックアウト
`git checkout master`

2. 3.0.11をマージ
`git merge 3.0.11`
コンフリクトが大量に発生。
src/、html/、autoload.php、gitignoreなど。
3. コンフリクトしたファイルの洗い出し
ここはどれだけソースに手を加えているかで実際に修正するファイル量が違ってきます。
私はまずコンフリクトのファイルをすべてgit log <ファイル名>でコミットログをみて自分が手を加えているファイルを洗い出しました。

<br />

####コンフリクトしたファイルを修正してコミット
1. git log <ファイル名>で修正しているログがあったファイルは手動でコンフリクトを解消。

2. その他のファイルに関してはすべて
`git checkout --theirs <ファイル名>`で対応
コンフリクト対応が完了したら、addしてcommit

**ここまできたらあと少しでひと段落！**

####パーミッション変更
　　アップグレードの際にファイルのパーミッションが変わるようで
　　chmod 755 <ルートディレクトリ>/ 

####マイグレーション
　　http://<ドメイン>/html/install.php/migration
　　こちらへアクセスするとマイグレーション画面が表示されるのでマイグレーションを実行。

####本番環境へ
　　さくらレンタルサーバへ
　　`git push`

本番環境側でgit pullした後、ローカルと同じようにマイグレーションを実行して完了。

これで一通り完了で、あとは正常にアクセス出来ていれば問題ないはずです。
あとシステム情報からバージョンが3.0.11となっていることを確認。

色々と試行錯誤しながらやっていたので、間違っている部分があるかもしれませんが
何かあればご指摘ください。

とりあえずひと段落しました！

**以下は3.0.13へアップグレードするまでに気になったことを書いています。**

##3.0.11->3.0.12
既にgithubとの連携は出来ているので、

eccube_masterへチェックアウト
`git checkout eccube_master`

3.0.12ブランチ作成
`git checkout -b 3.0.12 refs/tags/3.0.12`

masterへマージ
`git checkout master`
`git merge 3.0.12` 

ここではコンフリクトは発生せず。Auto-Mergeが走っていました。

以下２つは3.0.12では削除されたみたいなのでコンフリクト(modify/delete)していましたので、git rmする。
`git rm src/Eccube/Resource/config/cache.yml.dist`
`git rm src/Eccube/ServiceProvider/EccubeMonologServiceProvider.php`

####composer.lock、composer.jsonが変更された場合
上記完了後、ページへアクセスした際にlog_debug()関数が見つからないみたいなエラーが出る。
色々しらべて、アップグレードの際にcomposer.json,composer.lockが更新されていた場合は
以下実行する必要があるとのこと。

`curl -sS https://getcomposer.org/installer | php
 php ./composer.phar install --dev --no-interaction`

上記を実行するもエラーは変わらず。
そこで
`composer update`
なんだか色々アップデートされてる感じのログがずらずらと...

composer update完了後、ページへアクセスすると問題なくアクセスができるようになりました。

最後にマイグレーションをして問題なければ、本番環境へpushしてマイグレーション実行。

##3.0.12->3.0.12-p1
なんだか3.0.12から3.0.12-p1へは差分がほとんどないですね...

```
$git merge 3.0.12-p1
warning: refname '3.0.12-p1' is ambiguous.
warning: refname '3.0.12-p1' is ambiguous.
Auto-merging src/Eccube/Repository/ProductRepository.php
Auto-merging src/Eccube/Common/Constant.php
Auto-merging .travis.yml
Merge made by the 'recursive' strategy.
 .travis.yml                                 | 9 ++++-----
 src/Eccube/Common/Constant.php              | 2 +-
 src/Eccube/Repository/ProductRepository.php | 6 +++++-
 3 files changed, 10 insertions(+), 7 deletions(-)
```

てことで、すんなり上がりました。
もちろんマイグレーションは忘れずに実行。
問題なければ、本番環境へpushしてこちらもマイグレーション。

##3.0.12-p1->3.0.13
ここまでくるとだいぶ慣れてきた感がありますね。
eccube_masterにて3.0.13タグをチェックアウトして3.0.13ブランチを作成。

mergeをすると、大量の差分がでます。コンフリクトを解消していきます。

```
CONFLICT (modify/delete): tests/Eccube/Tests/Web/Admin/Product/ProductClassContorllerTest.php deleted in 3.0.13 and modified in HEAD. Version HEAD of tests/Eccube/Tests/Web/Admin/Product/ProductClassContorllerTest.php left in tree.

3.0.13では削除されているファイルなのでgit rm
git rm tests/Eccube/Tests/Web/Admin/Product/ProductClassContorllerTest.php
```

```
CONFLICT (content): Merge conflict in composer.lock
```
普通にコンフリクトしているっぽいので中身をチェック。

```
<<<<<<< HEAD
            "version": "v5.4.5",
            "source": {
                "type": "git",
                "url": "https://github.com/swiftmailer/swiftmailer.git",
                "reference": "cd142238a339459b10da3d8234220963f392540c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c",
                "reference": "cd142238a339459b10da3d8234220963f392540c",
=======
            "version": "v5.4.4",
            "source": {
                "type": "git",
                "url": "https://github.com/swiftmailer/swiftmailer.git",
                "reference": "545ce9136690cea74f98f86fbb9c92dd9ab1a756"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/545ce9136690cea74f98f86fbb9c92dd9ab1a756",
                "reference": "545ce9136690cea74f98f86fbb9c92dd9ab1a756",
>>>>>>> 3.0.13
```

どうやらswfitmailerの部分で差分があるようですが、どっちが正しいのかわかりませんので
「eccube swiftmailer」でググると以下issueを発見。
https://github.com/EC-CUBE/ec-cube/issues/2012

issueの内容をみてv5.4.5を使ったほうがいいのかなと思い、3.0.13の部分は削除してHEAD部分を採用しました。

このあと以下を実行。

```
composer update
php ./composer.phar install --dev --no-interaction
```

忘れずにマイグレーションして完了！