gitのrepositoryとworkingtreeを分ける
2014-02-01 / Git
Gitについて調べててふと思い立ったので試してみた。
ローカルのリポジトリとワーキングツリーは密接
普段使うときには、git cloneかgit initしてできたディレクトリの中で、.gitディレクトリがローカルのリポジトリ、ワーキングコピーはその他のファイルがある場所、ということになると思う。
で、この.gitディレクトリはあくまでもリポジトリなので、ワーキングツリーとは別に存在できるんじゃないだろうかと思った。
cloneのオプションでいけるらしい
ググっててStackOverFlowのQAを見つけた。
Git - Moving the .git directory to another drive, keep the source code where it is - Stack Overflow
git clone --separate-git-dir=<path to directory for repo> \
<remote url> <path for working copy>
試してみた
$ mkdir -p /tmp/test
$ cd /tmp/test
$ git init --bare bare
$ git clone --separate-git-dir=repo bare working_copy
$ ls
bare/ repo/ working_copy/
お、できた。
bare と repo の diffとってみた。
diff -r bare repo
diff -r bare/config repo/config
4c4,6
< bare = true
---
> bare = false
> logallrefupdates = true
> worktree = /private/tmp/test/working_copy
6a9,14
> [remote "origin"]
> url = /tmp/test/bare
> fetch = +refs/heads/*:refs/remotes/origin/*
> [branch "master"]
> remote = origin
> merge = refs/heads/master
configの方に、worktreeというのを設定しないといけないっぽい。
working_copyはどうなってるかというと、.gitというディレクトリではなく、ファイルが存在していて、
$ cat working_copy/.git
gitdir: /private/tmp/test/repo
こんな感じに、リポジトリの場所を明記している。
何に使える?
調べてみたところで、何に使えるのかちょっとぴんとこない。