5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gitで差分ファイルの抽出とバックアップファイルの作成 .sh

Last updated at Posted at 2015-10-22

ftpscpを使用して本番デプロイする方向けの投稿です。

作業分のファイルを抽出する際にgit archiveを使用しますが、
合わせてバックアップのファイルも用意したい場合のスクリプトを作りました。
例えばgit archiveで抽出したファイルを本番環境にあてた際に予期せぬ不具合が発生した場合に、

  • 元のファイルの状態に戻す
  • 急いでbugfix を行う

以上のことを本番環境に対して行うと思います。
今回は「元のファイルの状態に戻す」について話を進めます。
元のファイルの状態に戻すとは、git archiveで差分抽出前のファイルが用意できれば良いわけです。

シェル化した


やっていること

  • 差分ファイルの作成
  • バックアップファイルの作成

# !/bin/sh

# -------------------------------------------------------
# A shell script that generates a MIT LICENSE file
# Written by: takecore
# Last updated on: 2015/10/22
# -------------------------------------------------------

ORIGIN_BRANCH=`git rev-parse --abbrev-ref HEAD`
FROM_RIVISION=$1
TO_RIVISION=HEAD
if [ "$2" ]; then
	TO_RIVISION=$2
fi

# as you like change below
DIFF_LIST_PATH=$HOME/Desktop/diff_list_$FROM_RIVISION
RELEASE_ARCHIVE_PATH=$HOME/Desktop/release_$FROM_RIVISION.zip
BACKUP_ARCHIVE_PATH=$HOME/Desktop/backup_$FROM_RIVISION.zip

# archive start
git diff --name-only $TO_RIVISION $FROM_RIVISION > $DIFF_LIST_PATH
git archive --format=zip $TO_RIVISION `git diff --name-only $TO_RIVISION $FROM_RIVISION` -o $RELEASE_ARCHIVE_PATH
git checkout $FROM_RIVISION
zip $BACKUP_ARCHIVE_PATH -@ < $DIFF_LIST_PATH
rm $DIFF_LIST_PATH
git checkout $ORIGIN_BRANCH

git-archive-with-backup.sh

リリース差分ファイルの抽出とバックアップファイルの作成を目的としたスクリプトです。

配置場所

  • 任意のbin フォルダ等に配置し実行権限を与えて下さい

例えば以下のようなディレクトリ

$ chmod 755 /Uses/your_user_name/bin/git-archive-with-backup.sh

使い方

gitの作業ディレクトリ直下にて実行してください。使用例は以下になります。

# make revision_hash to HEAD diff archive
$ ~/bin/git-archive-with-backup.sh <from_revision_hash>
# or
$ ~/bin/git-archive-with-backup.sh <from_revision_hash> <to_revision_hash>
$ cd /Users/your_user_name/dev/git_repository
$ ~/bin/git-archive-with-backup.sh a88bfca3abbaffd69d16a3b71bb8eec210e27f67

差分ファイルとバックアップファイルの出力先

以下のディレクトリにそれぞれ.zipファイルが生成されます。出力場所は任意に書き換えてください。

~/Desktop/release_{from_revision_hash}.zip
~/Desktop/backup_{from_revision_hash}.zip

追記

上記の.sh をSourceTreeと組み合わせるととても便利に使用できます。
そちらについては後日Qiitaに投稿したいと思います。

バグ等のご指摘も宜しくお願いします。

以上になります。


2015/10/26 コミットに削除ファイルがある場合にリスト化に失敗するため--diff-filter=D オプションを追加しました。

http://qiita.com/takecore@github/items/9e2067cfe62897205d5e/revisions/4

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?