Gitで特定ディレクトリをデプロイ

Gitでサーバにアップする場合に、開発用データは無視して、公開用ディレクトリのみをあげたかったので調べてみた。

今回の構成

今回の環境はローカルで作業をし、リモートリポジトリ(Gituhb, Bitbucket)にpush。リモートリポジトリから公開用サーバにデータをpullする。
ローカル -push-> リモートリポジトリ -pull->  公開用サーバ

前提条件
公開用サーバのドキュメントルート: /var/www/html
git管理下の公開ディレクトリが:/html

[shell]
# 公開用サーバ
$ cd /var/www
$ git clone –mirror git@bitbucket.org:xxx/xxx.git .git
[/shell]
git cloneにmirrorオプションをつけてbareをクローン。bareは更新情報だけで、実際のファイルが存在しないリポジトリのこと。最後の.gitを変えるとgitの保存ディレクトリ名が変わる。この場合は /var/www/.git。

[shell]
$ git config core.sparsecheckout true
$ echo html/ > .git/info/sparse-checkout
[/shell]
sparse checkout を有効にすることで、指定したディレクトリのみを監視します。監視対象は .git/info/sparse-checkou に記述。

[shell]
$ git –git-dir=/var/www/.git fetch
$ git –git-dir=/var/www/.git –work-tree=/var/www checkout -f
[/shell]
上記コマンドでリモートリポジトリから更新を取得して反映。

これで余計なデータを扱わず、スマートに管理。

参考:
https://www.granfairs.com/blog/cto/deploy-subdirectory