66
71

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.

空のディレクトリに.gitkeepを配置するコマンドラインツール

Last updated at Posted at 2012-04-05

SubversionからGitに移行する過程で、空のディレクトリをリポジトリに追加するのを忘れないようにしないといけません。Gitは空のディレクトリはバージョン管理しないので、何らかのファイルを置く必要があります。何らかのファイルは.gitignoreemptyなどありますが、個人的にはRails風に.gitkeepを置くようにしています。

基本的には、find . -type d -name .git -prune -o -type d -empty -exec touch {}/.gitkeep \; を実行すればOKです。今回は作ったツールは、.gitkeepを配置する前にどのディレクトリが空っぽか確認する機能や、このコマンドの.gitkeep部分を指定できたりなど、オプショナルな機能を追加したものです。

使い方

空っぽのディレクトリ一覧を出す:

cd git-repo
git-empty-dir list

空っぽのディレクトリに.gitkeepを配置する:

cd git-repo
git-empty-dir keep

他にも--dir--keeperなどのオプションがあります。

$ git-empty-dir keep --help
usage: git-empty-dir keep [-h] [--dir DIR] [--keeper KEEPER]

optional arguments:
  -h, --help       show this help message and exit
  --dir DIR        path to git directory
  --keeper KEEPER  dummy file name. Default is ".gitkeep"

git-empry-dir.py

git-empry-dir.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import argparse
import commands
import sys

def list(args):
    command = "find %(dir)s -type d -name .git -prune -o -type d -empty" % vars(args)
    result = commands.getstatusoutput(command)
    print result[1]
    if result[0] > 0:
        sys.exit(1)

def keep(args):
    command = "find %(dir)s -type d -name .git -prune -o -type d -empty -exec touch {}/%(keeper)s \;" % vars(args)
    result = commands.getstatusoutput(command)
    print result[1]
    if result[0] > 0:
        sys.exit(1)

def check_git_dir(dir):
    git_dir = dir + '/.git'
    if os.path.isdir(git_dir) == False or os.path.islink(git_dir) == True:
        print 'Not found .git in ' + dir
        sys.exit(1)

def main():
    parser = argparse.ArgumentParser(description='Add .gitkeep to empty directories.')

    subparsers = parser.add_subparsers(title='commands', metavar='command')

    parser_list = subparsers.add_parser('list', help='list candidates')
    parser_list.set_defaults(func=list)
    parser_list.add_argument('--dir', type=str, help='path to git directory', default=os.getcwd())

    parser_keep = subparsers.add_parser('keep', help='')
    parser_keep.set_defaults(func=keep)
    parser_keep.add_argument('--dir', type=str, help='path to git directory', default=os.getcwd())
    parser_keep.add_argument('--keeper', type=str, help='dummy file name. Default is ".gitkeep"', default='.gitkeep')

    args = parser.parse_args()
    args.dir = args.dir.rstrip('/')

    check_git_dir(args.dir)

    args.func(args)

if __name__ == "__main__":
    main()

Pythonの argparse って便利ですね!

[2012-04-05 11:55] .git がないところでうっかり keep してしまって悲惨なことになったので、.gitがあるかをチェックするようにした

66
71
2

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
66
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?