2017年07月23日

git リリース準備

リリースのタイミング限定での操作ではないが、リリース時によくやることについて整理する。

コミットに印を付ける


タグの作成


リリースや、目標とするマイルストーンなどの到達点で印を付ける。
リポジトリの中でのブックマークみたいな役割として、タグを打つ。

チェックアウトしているブランチの最新のコミットに対して付ける。

$ git tag "version_1.0"




コミットID を指定して過去のコミットに対して付ける。

$ git tag "release_test" 1c0a080



  • 既に存在する同名のタグはつけれない
    $ git tag "v1.0" 9fe9714
    fatal: tag 'v1.0' already exists
  • 同一コミットに複数のタグを付けることはできる
  • 有効でない文字(space、:(コロン)、~(チルダ)、?(クエスチョンマーク)、*(アスタリスク)など)は使えない
    $ git tag "version 1.0"
    fatal: 'version 1.0' is not a valid tag name.



タグだけでは、どのようなマイルストーンなのか判りにくいが、タグに注釈コメントを付けることで詳細な情報を残すことができる。
-a オプションを使う。

$ git tag -a "version_1.0" -m "Release: deployment"


-m オプションを省略して実行するとエディタが立ち上がるので、そこで編集することも可能。

注釈コメント付きにすると、タグをつけた人の情報・日時も格納されるので、タグを付けるときは、この -a オプションを使うことをススメる。



タグの確認


リポジトリ内のタグの確認。
現在チェックアウトしているブランチ以外のタグも見える。

$ git tag

release_test
v0.1
version_1.0



特定のタグの内容を確認するときには、git show を使い、タグを指定する。

$ git show version_1.0

tag version_1.0
Tagger: hoge hogehoge <hogehoge@email.com>
Date: Sat Jul 8 21:00:00 2017 +0900

Release: deployment

commit 762bccf8cb34d4b900ddb2832dc1869c7391d218
Author: hoge hogehoge <hogehoge@email.com>
Date: Sat Jul 8 20:00:00 2017 +0900

master 追加 3

diff --git a/index.html b/index.html
index a4bf772..70450f3 100755
--- a/index.html
+++ b/index.html
@@ -8,5 +8,6 @@
<body>
<h2>master</h2>
<p>master 追加</p>
+ <p>master 追加2</p>
</body>
</html>

注釈コメントをつけたタグであれば、タグをつけた人・日時・注釈コメントも表示される。



タグの削除


タグを違う場所につけた場合に削除できる。
-d オプションを使う。

$ git tag -d release_test

Deleted tag 'release_test' (was 1c0a080)




タグのリネーム


タグをつけたが、後から名称を変更する必要が出た場合、
タグを直接的に編集してリネームすることはできない。
この場合、元のタグを使って、新しいタグを同じ位置に付けてから、元のタグを削除することで対応する。

$ git tag new_tag old_tag
$ git tag -d old_tag






タグの共有


タグを付けただけでは、ローカルリポジトリにしか反映されないので、リモートリポジトリに反映するため、git push する。

$ git push origin v1.0



個別に反映するのではなく、すべてのタグを反映するときは、--tags オプションを使う。

$ git push origin --tags




リモートリポジトリのタグを削除するには、リモートのブランチを削除する操作と同じようにし、タグ名を指定すればよい。

$ git push origin :v1.0








リリース用ファイルのアーカイブ


作業の成果物として作成コードを納品するような場合、最新の安定版のファイルだけでよく、リリースのたびに履歴は含める必要がないという場合、git archive でアーカイブが使える。

$ git archive --format=zip --prefix=mysite-1.0/ HEAD > mysite-1.0.zip


--prefix= を使うことで、作成したアーカイブファイルを展開したときにディレクトリ "mysite-1.0/" を作成し、その中に展開する。このオプションを指定しないと、その場所でフラットに展開される。

また、指定ディレクトリ "mysite-1.0/" は、"/"(スラッシュ)を付けているが、これは必須。これを忘れて "mysite-1.0" と指定すると、展開時にディレクトリ内に展開されるのではなく、各ファイルの接頭語 "mysite-1.0" が付いたファイル群ができあがってしまう。

HEAD ではなく、タグを指定しても良い。
タグ "v1.0" を使って、次は "tar.gz" で作成してみる。

$ git archive --format=tar --prefix=mysite-1.0/ v1.0 | gzip > mysite-1.0.tar.gz





もしgit管理下に ".gitignore" があると、これもアーカイブ対象となってしまう。

リリースに含める必要はないので、これを除外したい場合は、".gitattributes" というファイルを作成し、これを指定することで除外可能。
以下のような構成とする。
.
├ .gitattributes
├ .gitignore
└ index.html

".gitattributes" の中身は以下とする。

.gitignore export-ignore
.gitattributes export-ignore


".gitattributes" も含めることがポイント。


これを git archive で実行するときに、--worktree-attributes オプションを指定することで除外フィルタが有効となる。

$ git archive --format=tar --worktree-attributes --prefix=mysite-1.0/ v1.0 | gzip > mysite-1.0.tar.gz




これを展開すると、
$ tar -zxvf mysite-1.0.tar.gz
mysite-1.0/
mysite-1.0/index.html

不要なファイルが除外されていることがわかる。






まとめ


タグを付けることは、作業のマイルストーンとして重要。いついつのバージョンでのリリース状態が見たいと思ったときに、すぐに引っ張ってこれる。リリース時だけではなく、作業の目標到達点があればタグを付けるようにしておくと、履歴を遡る場合に楽になる。
アーカイブは成果物として納品するような場合でないとなかなか使わないが、知っておくと役立つ。




gitをインストール
gitサーバーのセットアップ
git ブランチについて
git 変更を一時的に退避 stash
git ブランチを合流するマージ
git ブランチを付け替える
git コミット履歴を変更する
git 変更をリセットする
git リモートでの操作
git ファイルの追跡
git リモートブランチを追加
git チェックアウトをもっと便利に使う
git プロジェクトの構成
git 変更をpatchファイルにする
git コンフリクトに対処する
git 失敗したときの復元
posted by Zorinos at 20:00| Comment(0) | Linux | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください