GitでSubversionの空のフォルダの移行など

シェアする

  • このエントリーをはてなブックマークに追加

最近、巨大なSubversionリポジトリをGitに移行する作業を行っており、その際に学んだ内容を書き留めておきます。
最初に以下の本をよく読みます。
市販本の中では一番よくできていると思います。

スポンサードリンク

Gitで空ディレクトリの扱うときには、.gitkeepを使う

Gitではディレクトリに関する情報を保持していないようです。
空のディレクトリを作っても、リポジトリにコミットできません。
こんな感じになります。

$ mkdir aaa
$ git add aaa
$ git commit
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

 

空ディレクトリを保持するには、慣習的に.gitkeepという空のファイルをフォルダにおくようです。
.gitkeep自体は、いわゆるプレースホルダーで、Gitの仕様ではありません。
要はなんでもいいけどファイルが必要なので、慣習的に.gitkeepを使うようです。
こんな感じになります。

$ mkdir aaa
$ touch aaa/.gitkeep
$ git add aaa
$ git commit -m "add directory"
[master 79cd8fc] add directory
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 Test/aaa/.gitkeep

空ディレクトリをリポジトリに保持できないのは、Gitの仕様とはいえ不便ではあります。
その昔、CVSを使っていた時も同じ仕様で、空ディレクトリはリポジトリに保持できませんでした。
例えば、ディレクトリがあるという前提で動いているプログラムがあったときに、実行して初めて、エラーを吐いたり気づいてディレクトリを作ることがありました。
Subversionでは、そういったCVSの制限が解消されていて便利と思ったのですが、Gitでは逆戻りなんですね。。

スポンサードリンク

git svnコマンドでSubversionからGitへ空ディレクトリを移行

git svnコマンドを使って、リポジトリをSubversionからGitへ移行してみて、空のディレクトリが移行できないことに気づきました。
その後、いろいろと調べてみると、git svnには、--preserve-empty-dirsというオプションがあって空のディレクトリを移行できることがわかりました。
こんな感じで使います。

$ git svn clone --trunk= --prefix=svn/ --preserve-empty-dirs svn://aa.bb.cc.dd/repository/path

このオプションを使うと、デフォルトでは空フォルダには、.gitkeepではなくて、.gitignoreというファイルが作成されます。
空フォルダに、デフォルトで.gitkeepが作成されないのが府には落ちないところもありますが、.gitkeepは慣習的にその名前を使うというだけで、Gitの仕様にはその名前のファイルがないからなんでしょう。

このプレースホルダーは、--placeholder-filename=<filename>というオプションで別名に変更することが出来ます。

ちなみに、.gitignoreというファイルは、Gitの仕様に存在して、中にファイルを書いておけば、そのファイルがGitでは管理されないファイルとして認識されます。

CVSでは.cvsignore、Subversionでは.svnignoreという名称で同じ用途のファイルがあります。

スポンサードリンク

リネームしたファイルの履歴を追いかける git log  --follow

ちょっと話題は変わってファイルの履歴の話です。
test.txtというファイルがGitで管理されていたとします。
このファイルをaaaというディレクトリに移動したとしましょう。
この時、以下のコマンドでは移動後のファイルの履歴しか追えないようです。

$ git log test.txt

こういう時には、--followオプションを使います。

$ git log --follow test.txt

followオプションを使うと、リネームしたファイルの履歴も追いかけることが可能です。
このオプション、Webのインターフェースがあれば良いのですが、探した範囲では見つけることが出来ませんでした。

Git Bashのlsコマンド日本語文字化けを直す

さらに話は変わって、Git Bashの日本語の文字化けの話です。
Git自身は日本語をUTFで扱っているようです。
Git Bashでコマンドラインの環境変数では、UTF8と表示されるのですが、lsコマンドで表示される日本語のファイル名が文字化けしてしまいます。
以下のように実行すると文字化けは解消されます。

$ ls --show-control-chars

 

納得はしないですが、.bash_profileに以下の通りに書いておきました。

alias ls='ls --show-control-chars'

文字化けと言えば、TortoiseGitではexport(archive)した時の、日本語も文字化けします。
これ自体は、どうしようもないので、コマンドラインからgit archiveを実行してexportすることとします。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です