Devi solo assicurarti che il repository sappia dove si trova l'albero di lavoro e viceversa.
Per far sapere al repository dove si trova l'albero di lavoro, impostare il valore di configurazione core.worktree. Per far sapere all'albero di lavoro dove si trova la directory git, aggiungi un file chiamato .git (non una cartella!) E aggiungi una riga come
gitdir: /path/to/repo.git
Da git 1.7.5 il comando init ha appreso un'opzione aggiuntiva per questo.
È possibile inizializzare un nuovo repository separato con
git init --separate-git-dir /path/to/repo.git
Questo inizializzerà il repository git nella directory separata e aggiungerà il file .git nella directory corrente, che è la directory di lavoro del nuovo repository.
Precedentemente alla 1.7.5 dovevi usare parametri leggermente diversi e aggiungere tu stesso il file .git.
Per inizializzare un repository separato il seguente comando collega l'albero di lavoro al repository:
git --git-dir=/path/to/repo.git --work-tree=. init && echo "gitdir: /path/to/repo.git" > .git
La tua directory attuale sarà l'albero di lavoro e git utilizzerà il repository su /path/to/repo.git. Il comando init imposterà automaticamente il core.worktreevalore come specificato con il --git-dirparametro.
Puoi anche aggiungere un alias per questo:
[alias]
initexternal = !"f() { git --work-tree=. --git-dir=\"$1\" init && echo \"gitdir: $1\" >> .git; }; f"
Usa il controllo versione git su una directory di lavoro di sola lettura
Con le conoscenze di cui sopra, è anche possibile impostare il controllo versione git per una directory di lavoro senza disporre delle autorizzazioni di scrittura. Se si utilizza --git-dirsu ogni comando git o si esegue ogni comando all'interno del repository (anziché nella directory di lavoro), è possibile escludere il file .git e quindi non è necessario creare alcun file all'interno della directory di lavoro. Vedi anche la risposta del Leo