NAS上にリモートリポジトリを作成しgit運用する
状況
手順
- gitのインストール
- Localにある管理したいプロジェクトのgit化
- LocalなプロジェクトをNAS上にクローン
- NAS上のノンベアリポジトリをクローンしベアリポジトリの作成
- ノンベアリポジトリに登録されているリモートリポジトリを削除し、代わりにノンベアリポジトリを登録する
- Localのプロジェクトに登録されているリモートリポジトリをNAS上のノンベアリポジトリにする
- ベアリポジトリのhookを使い、プルされたらノンベアリポジトリも更新されるようにする
1. gitのインストール
私家版 Git For Windowsのインストール手順を参考にインストール
私の場合、□Windows Explorer Integration外す、Use Git from the Windows Command Prompt、Checkout as-is, commit as-is、Use MinTTY、□Enable file system caching □Enable Git Credential Managerをオンにしてインストール
2. Localにある管理したいプロジェクトのgit化
SourceTree等をインストールして、新規/Cloneを作成 -> リポジトリを作成 でGitでリポジトリを作成する。
3. LocalなプロジェクトをNAS上にクローン
新規/クローンを作成 -> リポジトリをクローン からLocalなプロジェクトをNAS上にクローンする。SourceTreeの場合パスの¥(バックスラッシュ/エン)をすべて/(スラッシュ)に変更する必要がある。
4. NAS上のノンベアリポジトリをクローンしベアリポジトリの作成
このままではプッシュすると updating the current branch in a non-bare repository
remote: error: is denied
と怒られプッシュ出来ない。クローンしてNAS上に作成したのはノンベアなリポジトリであり、ベアなリポジトリにプッシュするようにしないといけない。
ベア、ノンベアについてはベアリポジトリとノンベアリポジトリ:理論編〜GitでWordpressのテーマを管理が分かりやすかった。
更新情報だけを持っている ワーキングディレクトリとは、ファイルそのものがあるディレクトリのこと。 つまりリポジトリが作業用(non-bare)と更新管理用(bare)に分かれてるわけですね。
ここからはベアリポジトリとノンベアリポジトリ:実践編〜GitでWordPressのテーマを管理、gitで自動デプロイ環境構築(bare,hook)を参考。
git bash等を立ち上げ、NAS上にリポジトリまで移動する。コマンドでのネットワークドライブへの移動はnet useやpushd等を使う。
参考
* ネットワークドライブの割り当て方法
* 【コマンドプロンプト】ネットワークドライブの割り当て
* コマンド プロンプトから直接ネットワーク ドライブにアクセスする方法
ここではNAS上のノンベアリポジトリの場所をZ:\projects\Sample
、ベアリポジトリの場所をZ:\projects\.Sample.git
とする。
cd z:/projects/ mkdir .Sample.git #ベアリポジトリのフォルダの作成 cd .Sample.git/ git clone --bare ../Sample/ .
実行結果
$ git clone --bare ../Sample/ . Cloning into bare repository '.'... done.
5. ノンベアリポジトリに登録されているリモートリポジトリを削除し、代わりにノンベアリポジトリを登録する
cd ../Sample/ git remote -v
リモートリポジトリを確認するとcloneしてきたためLocalなプロジェクトが登録されているのが分かる
git remote rm origin remote add origin ../.Sample.git/ git remote -v
これで以下の表示が出れば成功
$ git remote -v origin ../.Sample.git/ (fetch) origin ../.Sample.git/ (push)
6. Localのプロジェクトに登録されているリモートリポジトリをNAS上のノンベアリポジトリにする
SourcdTreeのリポジトリ設定よりノンベアリポジトリ(.Sample.git)のパスを入れて登録。
7. ベアリポジトリのhookを使い、プルされたらノンベアリポジトリも更新されるようにする
hookを使うことでいろいろと自動化できるらしい。
hookのスクリプトは.Sample.git/hooks
に入っています。今回はプッシュされたタイミングなのでpost-receiveを使うらしい。
cd ../.Sample.git/hooks/ vi post-receive #post-receiveを作成して編集
以下のコマンドを作成。viのコマンドはvi コマンドリファレンス等を参照。
(l
で入力開始、:wq
で保存して終了)
#!/bin/sh cd ../Sample || exit unset GIT_DIR git pull origin master
viを終了したら実行権限を付ける
chmod +x post-receive