2011-05-02 8 views
6

Próbuję skonfigurować repozytorium git z ręcznie określonym worktree poprzez:git-ukryta w stanie znaleźć drzewo praca

cd /Users/braitsch/repos/project1 
git --git-dir=. --work-tree=/Users/braitsch/projects/project1 init 

Po uruchomieniu powyższego mogę dodać pliki znajdujące się w „/ Users/braitsch/projekty/projekt1 "
przez: git dodaj plik somefile lub git add.
zobowiązuje się działać dobrze, jak zrobić połączeń do „git oddział”

Jednak git stash list wyrzuca następujący błąd:

fatal: /usr/local/Cellar/git/1.7.4.4/libexec/git-core/git-stash cannot be used without a working tree.

Czy nie stashing obsługiwana w zdefiniowanych przez użytkownika roboczych drzew?

git config --local core.worktree 
echoes out : /Users/braitsch/projects/project1 

Wszelkie przemyślenia będą mile widziane!

-------- UPDATE --------

Jak @jleedev zauważyć poniżej, nie wydaje się być błąd podczas próby nazywamy „git zapas” z zewnątrz w worktree. Jednak moim obejściem jest po prostu wgranie się do worktree, a następnie wywołanie skrytki poprzedzającej ścieżkę do gitdir. Niewygodne, wiem, ale następujące prace dla komendy stash:

git --git-dir="projects/proj1/.git" stash list 

Ten problem nie wydaje się plaga inne polecenia photography Podobnie jak dodawanie, popełnić, oddział, itd. Po prostu „ukryta”, o ile mogę powiedzieć .

Jeśli szukasz ucieczka z domyślnej struktury posiadające swoje .git folderu zagnieżdżone wewnątrz swojej worktree, może się okazać użyteczne następujące kroki:

  1. stworzyć katalog, w którym chcesz do przechowywania repozytorium git
  2. utworzyć katalog, w którym chcesz przechowywać pliki zamierzasz śledzić (oba z nich może być w dowolnym miejscu w systemie plików)
  3. CD do folderu repozytorium git i uruchom:

    git --git-dir=. --work-tree="path-to-your-project-folder" init 
    

    Spowoduje to zainicjowanie nowego repozytorium i połączenie go z zewnętrznym folderem roboczym.

Aby uruchomić standardowe dodawanie, usuwanie gałęzi, popełnić polecenia cd do repozytorium git i uruchomić komendę jak zwykle. Aby uruchomić skrytkę, pamiętaj o zapisaniu w katalogu swojego worktree, a następnie uruchom spakowanie zgodnie z powyższym opisem, poprzedzając polecenie ścieżką do gitdir.

Odpowiedz

5

Jest to błąd w działaniu polecenia lub zgłaszaniu błędów. Polecenia, które wymagają drzewa pracy i są realizowane jako skrypty zweryfikować swoją obecność z tym poleceniem:

git rev-parse --is-inside-work-tree 

który powiedzie się, jeśli nie jesteś rzeczywiście wewnątrz drzewo praca, wbrew temu, co komunikatu o błędzie implikuje. Z drugiej strony polecenia zaimplementowane w C wywołują w drzewie roboczym setup_work_tree, które automatycznie chdir s. Niezależnie od tego, czy funkcja require_work_tree w git-sh-setup może być bezpiecznie zmieniona, aby to pasować, nie wiem.

1. git-am.sh git-bisect.sh git-mergetool.sh git-pull.sh git-rebase--interactive.sh git-rebase.sh git-stash.sh git-submodule.sh

+0

Dzięki za odpowiedź jako tak, to wygląda na błąd. Zobacz mój addendum do mojego pierwotnego pytania powyżej. – braitsch

0

Edit: ustawienie

Spróbuj zmienną środowiskową GIT_WORK_TREE aby wskazać odpowiedniego folderu.


Oryginalny odpowiedź:

To polecenie dziwne bitów. Spróbuj tego.Jest to znacznie łatwiejsze:

mkdir yourRepo 
cd yourRepo 
git init 
.. edit some files 
git add . 
git commit -m "First commit" 
+1

Witam, to nie rozwiązuje problemu. "git init" właśnie inicjuje nowe repozytorium w bieżącym katalogu roboczym. Próbuję zdefiniować worktree gdzie indziej w systemie plików za pomocą poleceń w moim przykładzie powyżej. Wygląda jednak na to, że gdy to zrobisz, polecenie git ukryje się. – braitsch

+0

Roger Roger. Zobacz moją zredagowaną odpowiedź. Twoje zdrowie. – ralphtheninja

0

wpadłem na to za pomocą git for Windows 1.8.3 poprzez ConEmu.

Mój problem wydawał się być związany z mapowaniem dysku miałem która odwzorowanym ścieżkę na dysku C: do P:\

git rozpoznała ścieżkę zmapowany dysk jako /p w wierszu, ale ustawienie git config --local core.worktree wracał P:/

Zresetowałem go, używając git config --local core.worktree /p, co dało mi p:/ jako nową wartość, ale to naprawiono. Wydaje się, że nie podoba mi się litera napędu.

Okazuje się, że po prostu musiałem cd /c, a następnie cd /p mieć git zawiadomienie, że wszedł do katalogu drzewa roboczego. Nie wiem, dlaczego git jest wrażliwy na cd, ale nie mógł wykryć, że znajdowałem się we właściwym miejscu, gdy powłoka została zainicjalizowana.