ksaitoの日記

日々試したことの覚え書き

複数のディレクトリの差分と同期

複数の環境に共通のシェルやプログラムを配置することがあります。「全て同じはず」という言葉を信じる以外に確認方法がない場合、gitに移行する方法です。

bareリポジトリの作成

bareリポジトリを作ります。GitHubやbitbucketを使ってもokです。

$ git init --bare repo

対象の複数のディレクトリにリポジトリを作ります。

$ cd serv1
$ git init
$ git add .
$ git commit -m "init"
$ cd ../srv2
$ git init
$ git add .
$ git commit -m "init"

bareリポジトリにpushします。 同じことをserv2にも行います。

$ cd serv1
$ git remote add origin user@localhost:/tmp/bare
$ git push -u origin master:serv1
$ 

bareリポジトリをclone

bareリポジトリをcloneして、serv1serv2を、それぞれcheckoutします。

$ git clone user@localhost:/tmp/repo work
$ cd work
$ git checkout -b serv1 origin/serv1
$ git checkout -b serv2 origin/serv2
$

差分

serv1ブランチとserv2ブランチの差分を確認することで、違いが分かります。

$ git diff --name-status serv1 serv2
M       readme.txt
D       src/scr2
$

serv1をチェックアウトして修正/テストする

テスト環境で特定のブランチをcloneして修正/テストします。

$ git clone -b serv1 user@localhost:/tmp/repo work
$ cd work
$ git branch -av
* serv1                0640614 update2
  remotes/origin/serv1 0640614 update2
  remotes/origin/serv2 b7ab37e update
$

テストが完了したらadd/commitしてpushします。

$ git add .
$ git status
On branch serv1
Your branch is up-to-date with 'origin/serv1'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt

$ git commit -m "fix"
[serv1 554a8cb] fix
 1 file changed, 1 insertion(+)
$ git push
$ 

リリース

serv1環境でpullしてタグ付けします。

$ cd serv1
$ git pull
   0640614..554a8cb  serv1      -> origin/serv1
 * [new branch]      serv2      -> origin/serv2
Updating 0640614..554a8cb
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
$ git tag v1.1
$ 

ブランチをサーバ名、タグをリリースを特定する番号にすることで台帳+手作業をなくすことが出来ます。

以上