2013-05-28 11 views
11

Desidero lavorare con il repository Git, ma l'albero di lavoro deve essere remoto. Ad esempio: se il mio progetto è memorizzato all'interno di ~/project e project.git memorizzato all'interno di ~/git/project.git.Git change directory di lavoro

Quello che ho cambiato albero di lavoro tramite config:

worktree=/Users/myuser/project

E sono in grado di impegnarsi e vista diff, ma quando ho provato a fare git stash, ho ottenuto l'errore:

fatale:/usr/libexec/git-core/git-stash non può essere utilizzato senza un albero di lavoro.

Come memorizzare la directory .git lontano dall'albero di lavoro? E perché sto ricevendo questo errore?

git config --get core.worktree rendimenti directory corretta di lavoro ....

+0

Prova '--git-dir' o impostare ambiente var' GIT_DIR', vedere accettata risposta di http://stackoverflow.com/questions/5283262/what-is-a-git-work-tree-why-have-i-neevered-to-set-this-as-an-env-var- perché – devconsole

+0

Ho visto la risposta, ma suppongo, se ho ignorato GIT_DIR causerà un pasticcio durante il lavoro con pochi repository in un breve periodo di tempo. Ho trovato l'opzione di configurazione worktree, ma nulla sulla directory di lavoro ... Anche il repository esiste e non posso eseguire 'git init --git-dir'. Come usare --git-dir? qualsiasi documentazione? Potrebbe essere impostato via config? – ValeriiVasin

+2

Normalmente git cerca una directory .git nella directory di lavoro corrente. Se non è presente, viene visualizzato nella directory padre e così via fino a quando non raggiunge la directory root. Nel tuo setup non troverà mai .git e quindi non troverà anche .git/config. Quindi devi specificare il percorso della directory .git. Forse potresti usare diversi alias per progetti diversi? – devconsole

risposta

12

Il seguente sembra funzionare, adattarsi alle vostre esigenze:

mkdir git 
mkdir work 
git --git-dir git/test --work-tree work/test init 
mkdir work/test 
echo -n foo > work/test/foo.txt 
git --git-dir git/test status 
git --git-dir git/test add foo.txt 
git --git-dir git/test commit -m 'commit 1' 

EDIT: Si noti che non è necessario specificare --work-tree dopo il pronti contro termine è stato inizializzato poiché quel valore è memorizzato in git/test/config.

È possibile anche cd in lavoro/verifica e commit da lì:

cd work/test 
echo -n bar > bar.txt 
git --git-dir ../../git/test status 
git --git-dir ../../git/test add . 
git --git-dir ../../git/test commit -m 'commit 2' 

quindi utilizzare un percorso assoluto per --git-dir o impostare GIT_DIR.

3

correzione per --git-dir utilizzo bandiera:

uso:

git --git-dir=git/test/.git ... 

invece di:

git --git-dir git/test ... 
Problemi correlati