SubversionからGitに移行する過程で、空のディレクトリをリポジトリに追加するのを忘れないようにしないといけません。Gitは空のディレクトリはバージョン管理しないので、何らかのファイルを置く必要があります。何らかのファイルは.gitignore
やempty
などありますが、個人的には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があるかをチェックするようにした