バージョン管理したくない作業用スクリプトは「,」ディレクトリに入れるといい

  • 683
    Like
  • 2
    Comment
More than 1 year has passed since last update.

TL;DR: グローバルな gitignore に ,/ を追加して、作業用スクリプトを , ディレクトリに入れると便利。 ,/tmp_script.sh で実行できる。


Git リポジトリの中に一時的に使う作業用スクリプトを置いておきたいことがある。自分だけが使うものなのでコミットはしたくないが、いちいち .git/info/exclude に追加して無視させるのも面倒臭い。

今まで自分は、 tmp_script.sh~tmp_script.sh.bak など、グローバルな gitignore で無視されるファイル名にしていたが、これは不要なファイルと間違えて消してしまう危険がある。 ignored.tmp_script.sh は分かりやすいぶん長い。 _tmp_script.sh は悪くないが、コミットすべきファイルにもアンダースコアで始まるものがあって紛らわしい。

そこで、作業用スクリプトのファイル名の先頭にカンマをつけるようにしている人の話をどこかで読んだことを思い出した。カンマはファイル名として valid で、シェルで特別な意味を持つ記号ではなく、他の人がファイル名に使わないような文字であるというのが採用の理由だったはず。

グローバルな gitignore で ,* を無視するようにして、作業用スクリプトを ,tmp_script.sh などの名前にしたら便利になった。

global-gitignore
,*

ls するとどれが作業用スクリプトが一目瞭然。カンマで始まるファイルが最初に出てくるのも分かりやすくていい(LC_COLLATE=C の場合)。

$ cd repo
$ ls
,tmp_script.sh
,tmp_script2.sh
README.md
src
...

実行は普通にできる。バックスラッシュでカンマをエスケープする必要もない。


$ ./,tmp_script.sh
Doing something...

ただ、このスクリプトを実行するとき ./,tmp_script.sh と入力するのがちょっと面倒だった。ファイル名からはカンマを取って、ファイルを , ディレクトリに入れるようにしたらよりよくなった。

global-gitignore
,/
$ cd repo
$ ls
,
README.md
src
...

$ ls ,
tmp_script.sh
tmp_script2.sh

実行するには ,/tmp_script.sh となる。 ,/./ のアナロジーになっていて指が覚えやすい。

$ ,/tmp_script.sh
Doing something...

, 内に別個のリポジトリを作って作業用スクリプトのバージョン管理をすることもできる。この恩恵がけっこう大きい。今まではスクリプトを軽く手直ししたつもりが壊してしまって復旧がだるいことがあった。他の人が使えるくらい成熟したら cp ,/hoge.sh scripts/ してコミット・共有するとみんなハッピー。

その他、テストデータやメモ書きなど、自分用のファイルには何でもカンマをつけるようにしている。

$ ls
,
,test_data_dir
,memo.txt
...

補足:他の人のやり方(ブコメより)

方法
misc/ignored/ を gitignore misc/tmp_script.sh
*.ignore を gitignore tmp_script.sh.ignore
.git ディレクトリに入れる .git/tmp_script.sh

好みに合わせてどうぞ。