Você só precisa garantir que o repositório saiba onde está a árvore de trabalho e vice-versa.
Para que o repositório saiba onde está a árvore de trabalho, defina o valor da configuração core.worktree
. Para que a árvore de trabalho saiba onde está o diretório git, adicione um arquivo chamado .git (não uma pasta!) E adicione uma linha como
gitdir: /path/to/repo.git
Desde o git 1.7.5, o comando init aprendeu uma opção extra para isso.
Você pode inicializar um novo repositório separado com
git init --separate-git-dir /path/to/repo.git
Isso inicializará o repositório git no diretório separado e adicionará o arquivo .git no diretório atual, que é o diretório de trabalho do novo repositório.
Anteriormente à 1.7.5, era necessário usar parâmetros ligeiramente diferentes e adicionar o arquivo .git.
Para inicializar um repositório separado, o seguinte comando vincula a árvore de trabalho ao repositório:
git --git-dir=/path/to/repo.git --work-tree=. init && echo "gitdir: /path/to/repo.git" > .git
Seu diretório atual será a árvore de trabalho e o git usará o repositório em /path/to/repo.git
. O comando init definirá automaticamente o core.worktree
valor conforme especificado com o --git-dir
parâmetro
Você pode até adicionar um alias para isso:
[alias]
initexternal = !"f() { git --work-tree=. --git-dir=\"$1\" init && echo \"gitdir: $1\" >> .git; }; f"
Use o controle de versão git em um diretório de trabalho somente leitura
Com o conhecimento acima, você pode configurar o controle de versão git para um diretório ativo sem ter permissões de gravação. Se você usar --git-dir
todos os comandos git ou executar todos os comandos do repositório (em vez do diretório ativo), poderá deixar de fora o arquivo .git e, portanto, não precisará criar nenhum arquivo no diretório ativo. Veja também a resposta do Leos