rbenv で気づいた衝撃の事実・・・git はシンボリックリンクをコミット出来る。
例
普通のファイルとそのファイルを指すシンボリックリンク、さらにリポジトリ外を指すシンボリックリンクを作成してみます。
$ mkdir hoge
$ cd hoge
$ touch aa
$ ln -s aa bb
$ touch ../zz
$ ln -s ../zz cc
ちゃんと出来ています。
$ ll
-rw-r--r-- 1 ng wheel 0 May 17 20:11 aa
lrwxrwxrwx 1 ng wheel 2 May 17 20:11 bb -> aa
lrwxrwxrwx 1 ng wheel 5 May 17 20:11 cc -> ../zz
リポジトリを作ります。
$ git init
Initialized empty Git repository in /tmp/hoge/.git/
$ git add .
$ git commit -m first
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 aa
create mode 120000 bb
create mode 120000 cc
おっと削除してしまった。
$ rm -f *
でも大丈夫。
$ git checkout -- \*
元通りです。
$ ll
-rw-r--r-- 1 ng wheel 0 May 17 20:13 aa
lrwxrwxrwx 1 ng wheel 2 May 17 20:13 bb -> aa
lrwxrwxrwx 1 ng wheel 5 May 17 20:13 cc -> ../zz
もちろん clone してもシンボリックリンクは復元されます。
$ mkdir ../fuga
$ cd ../fuga
$ git clone ../hoge/.git .
Initialized empty Git repository in /tmp/fuga/.git/
$ ll
total 0
-rw-r--r-- 1 ng wheel 0 May 17 20:14 aa
lrwxrwxrwx 1 ng wheel 2 May 17 20:14 bb -> aa
lrwxrwxrwx 1 ng wheel 5 May 17 20:14 cc -> ../zz
このリポジトリを Windows(msysgit) でチェックアウトすると・・・
> git clone git@remoteserver:/tmp/hoge/.git
Cloning into 'hoge'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (5/5), done.
> type hoge\bb
aa
> type hoge\cc
../zz
リンク先が書かれたただのファイルになりました。