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

こんな感じに、リポジトリの場所を明記している。

何に使える?

調べてみたところで、何に使えるのかちょっとぴんとこない。

Published: 2014-02-01  /  Tags: Git  /  Share: X