#format md
#acl +All:read

# Gitで管理している課題の提出用アーカイブを作成するスクリプト

追記: `echo -n`はOS Xの`/bin/sh`で機能しなかったので、printfを用いるように修正しました。-- [[grafi]] <<DateTime(2013-05-20T19:48:11+0900)>>

~~~
:::sh
#!/bin/sh

id=051310XX #(自分の学生証番号を入れる)

print_usage () {
	echo "usage: kadar <os|fl|hw> <number> {files}" >&2
	exit 1
}

if [ "x${2}" = "x" -o "x$(printf "${2}" | sed s/[0-9][0-9]*//)" != "x" ]; then
	print_usage
fi


case "${1}" in
	"os" )
		comp=gzip
		ext=gz
		name=$(printf "report%d" "${2}");;
	"hw" )
		comp=xz
		ext=xz
		name=$(printf "kadai%d_%s" "${2}" "${id}");;
	"fl" )
		comp=gzip
		ext=gz
		name=$(printf "%d-%s" "${2}" "${id#??}");;
	* )
		print_usage;;
esac

shift 2

git archive --prefix="${name}/" --format=tar HEAD "$@" | ${comp} > "${name}.tar.${ext}"
~~~

これに適当な名前をつけて、適当にパスの通ったところに入れる。ぼくは`kadar`という実行ファイル名にしています。

まず課題を終えて、Gitでコミットします。カレントディレクトリを、提出しようとしている課題に関係するファイルを入れているディレクトリにした上で、

~~~ 
kadar (hwかosかfl) (レポートの回数)
~~~

を実行すると、カレントディレクトリ以下のGitで管理されているファイルが入った、各実験で要求されているファイル名やフォーマットに沿ったアーカイブが作成されます。

カレントディレクトリの一部のファイルだけを入れたい場合は、

~~~
kadar (hwかosかfl) (レポートの回数) {ファイル名一覧}
~~~

とすればいいです。ファイル名一覧に含めるファイルも、Gitで管理しているファイルである必要があります。

----
[[ReadingCategory]]