LoginSignup
68
52

More than 5 years have passed since last update.

git はシンボリックリンクをコミット出来る

Posted at

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

リンク先が書かれたただのファイルになりました。

68
52
1

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
68
52