2013-05-28 12 views
11

Chcę pracować z repozytorium Git, ale drzewo robocze powinno być zdalne. Na przykład: jeśli mój projekt jest przechowywany wewnątrz ~/project i project.git przechowywany wewnątrz ~/git/project.git.Katalog roboczy zmiany Git

Co Zmieniłem drzewo roboczą poprzez config:

worktree=/Users/myuser/project

I jestem w stanie zobowiązać się i zobacz różnice, ale gdy próbowałem zrobić git stash, mam błąd:

fatal:/usr/libexec/git-core/git-stash nie może być użyty bez działającego drzewa.

Jak przechowywać katalog .git z dala od drzewa roboczego? Dlaczego pojawia się ten błąd?

git config --get core.worktree powraca poprawny katalog roboczy ....

+0

Spróbuj '--git-dir' lub pakiet Srodowisko var' GIT_DIR' patrz akceptowane odpowiedź http://stackoverflow.com/questions/5283262/what-is-a-git-work-tree-why-have-i-never-ededed-to-set-this-as-an-env-var- dlaczego – devconsole

+0

Widziałem odpowiedź, ale zakładam, że jeśli przesłonię GIT_DIR to spowoduje pewne zamieszanie podczas pracy z kilkoma repozytoriami w krótkim czasie. Znalazłem opcję konfiguracji worktree, ale nic o katalogu roboczym ... Repozytorium też istnieje i nie mogę uruchomić 'git init --git-dir'. Jak korzystać z --git-dir? jakąkolwiek dokumentację? Czy można to ustawić przez config? – ValeriiVasin

+2

Zwykle git szuka katalogu .git w bieżącym katalogu roboczym. Jeśli go tam nie ma, wygląda w katalogu nadrzędnym i tak dalej, aż dotrze do katalogu głównego. W twojej instalacji nigdy nie odnajdzie .git i dlatego też nie znajdzie .git/config. Musisz więc określić lokalizację katalogu .git. Może mógłbyś użyć różnych aliasów dla różnych projektów? – devconsole

Odpowiedz

12

Poniższy wydaje się działać, dostosować do swoich potrzeb:

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: Zauważ, że nie musisz określić --work-tree po repo został zainicjowany, ponieważ ta wartość jest przechowywana w git/test/config.

Można również cd do pracy/test i zobowiązać się stamtąd:

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' 

Następnie użyj bezwzględną ścieżkę --git-dir lub ustalonym GIT_DIR.

3

Korekta --git-dir flagi użycia:

zastosowanie:

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

zamiast:

git --git-dir git/test ... 
Powiązane problemy