gitでディレクトリ構成を維持する

今日もgitネタ.

gitでディレクトリ構成を維持したい時が度々ある. しかし,空のディレクトリはgitで管理されない.

そこで,ディレクトリを保持したい場合は,中に.gitkeepをおいておくといいそうな.

git gitkeep

すべてのディレクトリに,いちいち作成していくのは面倒臭いのでgitのサブコマンド(gitkeep)https://gist.github.com/ringohub/7939324を作りました.

せっかくなので,コードを解説. シェルで書きました.bashが入っていれば動きます.

gitリポジトリかどうかをチェック

gitリポジトリでないところで実行した場合,.gitkeepが作成されてしまうと困るので,ガード文を書きました.

if ! git rev-parse 2> /dev/null; then
  echo -e "\033[0;31mERROR\033[0;39m: This directory is not git repository \033[0;31m:(\033[0;39m"
  exit 1
fi

ディレクトリを探索しながら.gitkeepを配置

次のような流れで.gitkeepを作成してます.

Seek() {
  for DIR in * ; do
    if [ -d "${DIR}" ]; then
      if [ -f "${DIR}/.gitkeep" ]; then
        echo  ".gitkeep already exists .gitkeep in `pwd`/${DIR}"
      elif [ -z "$(ls -A ${DIR})" ]; then
        touch ${DIR}/.gitkeep
        echo  "Create .gitkeep in `pwd`/${DIR}"
      fi
      (cd "${DIR}"; Seek;)
    fi
  done
}
Seek; 
  1. 入力がディレクトリか否かを判定 if [ -d "${DIR}” ]
  2. 対象のディレクトリに.gitkeepが存在するかを判定 if [ -f "${DIR}/.gitkeep” ]
  3. 存在しない場合,ディレクトリが空か判定 elif [ -z "$(ls -A ${DIR})” ]
  4. 空だった場合,.gitkeepファイルを作成 touch ${DIR}/.gitkeep

使い方,

  1. git-gitkeep.shをダウンロードしてパスが通ってる場所に配置
  2. chmod 755で権限を与える
  3. git gitkeepを実行

ディレクトリが空じゃなくなったら.gitkeepを削除するようにした方がいいのかなぁ??

参考