Właśnie zainstalowałem git w systemie Windows. Ustawiłem zmienną GIT_DIR na c: \ git \ i zweryfikowałem, że ta zmienna środowiskowa jest utrzymywana przez cygwin (tj. Echo $ GIT_DIR jest tym, czym powinno być). Poszedłem do folderu, dla którego chciałem utworzyć repozytorium git, powiedzmy c: \ www, a następnie uruchomiłem:
git init
git add .
Wtedy pojawia się błąd:
fatal: This operation must be run in a work tree
Nie jestem pewien, co poszło nie tak, ale katalog c: \ git zawiera plik konfiguracyjny, który mówi:
[core]
repositoryformatversion = 0
filemode = false
bare = true
symlinks = false
ignorecase = true
Jestem prawie pewien, że to nie powinno być nagie i to jest nasz problem.
Odpowiedzi:
Bezpośrednim powodem błędu jest to, że tak, nie można go używać
git-add
z czystym repozytorium. Surowe repozytorium z definicji nie ma drzewa roboczego.git-add
pobiera pliki z drzewa roboczego i dodaje je do indeksu, przygotowując się do zatwierdzenia.Być może będziesz musiał trochę przemyśleć swoją konfigurację tutaj. GIT_DIR to katalog repozytorium używany dla wszystkich poleceń git. Czy naprawdę próbujesz utworzyć jedno repozytorium dla wszystkiego, co śledzisz, może rzeczy w całym systemie? Repozytorium git z natury śledzi zawartość pojedynczego katalogu. Musisz ustawić
GIT_WORK_TREE
ścieżkę zawierającą wszystko, co chcesz śledzić, a następnie musisz.gitignore
zablokować wszystko, czego nie chcesz śledzić.Może próbujesz stworzyć repozytorium, które będzie tylko śledzić
c:\www
? Następnie powinieneś go umieścićc:\www
(nie ustawiaj GIT_DIR). Jest to normalne użycie git, z repozytorium w katalogu .git katalogu najwyższego poziomu twojego "modułu".Jeśli nie masz naprawdę dobrego powodu, radzę trzymać się sposobu, w jaki git lubi działać. Jeśli masz kilka rzeczy do śledzenia, prawdopodobnie potrzebujesz kilku repozytoriów!
źródło
git config --unset core.bare
.git branch
polecenia, mogłem wyświetlić listę gałęzi, ale nie byłem w stanie tego zrobićgit checkout -b feature22
. Czy to oznacza, że aby wyświetlić listę gałęzi, nie jest potrzebne drzewo robocze, ale aby je sprawdzić?Ponadto prawdopodobnie znajdujesz się w podfolderze .git, przenieś jeden folder w górę do katalogu głównego projektu.
źródło
Na wypadek, gdyby to, co mi się przydarzyło, dzieje się z kimś innym, muszę powiedzieć:
byłem w swoim
.git
katalogu w moim projekcie, kiedy otrzymywałem ten błąd.Szukałem i szukałem odpowiedzi, ale nic nie działało.
Wszystko, co musiałem zrobić, to wrócić do właściwego katalogu
( cd .. )
.To była dla mnie chwila z dłonią.
Jeśli jest ktoś tak głupi jak ja, mam nadzieję, że ta odpowiedź okazała się pomocna.
źródło
To powinno rozwiązać problem:
źródło
Wystarczy sklonować ten sam projekt w innym folderze i skopiuj do .git / folder do projektu.
Przykład
Utwórz folder tymczasowy:
przejdź do folderu tymczasowego
sklonuj ten sam projekt w folderze tymczasowym :
skopiuj folder .git do swojego projektu:
cp -R .git/ path/to/your/project/
przejdź do swojego projektu i uruchom
git status
usuwać z temp folder, jeśli są zakończone.
mam nadzieję, że to komuś pomoże
źródło
Jawne ustawienie
GIT_DIR
zmiennej środowiskowej zmusza git do używania podanego katalogu jako repozytorium git. Nigdy nie jest potrzebny podczas normalnego użytkowania.W twoim przykładzie, ponieważ określiłeś a
GIT_DIR
i nie jest on nazwany.git
(wiodąca kropka jest ważna) i nie podałeś--work-tree
opcji ani nie ustawiłeśGIT_WORK_TREE
zmiennej środowiskowej, że chcesz mieć czyste repozytorium, kiedy powiedziałeśgit init
.Ponieważ nagie repozytorium nie ma działającego drzewa, duży wybór poleceń nie ma sensu w przypadku czystego repozytorium.
git add
jest tylko jeden.Czy jest jakiś szczególny powód, dla którego musisz użyć niestandardowej lokalizacji dla swojego repozytorium git zamiast w
.git
podfolderze w katalogu głównym drzewa roboczego? Chociaż można to zorganizować, zwykle wymaga to więcej pracy i jest bardziej podatne na błędy użytkowników.źródło
Utwórz czyste repozytorium GIT
Mały rant: git nie jest w stanie samodzielnie utworzyć normalnego czystego repozytorium. Rzeczywiście głupi dupek.
Mówiąc dokładniej, nie jest możliwe klonowanie pustych repozytoriów. Zatem puste repozytorium jest bezużytecznym repozytorium. Rzeczywiście, zwykle tworzysz puste repozytorium i natychmiast je wypełniasz:
Jednak dodanie git nie jest możliwe podczas tworzenia czystego repozytorium:
wyświetla błąd „krytyczny: ta operacja musi być wykonana w drzewie roboczym”.
Nie możesz tego sprawdzić:
Rozwiązaniem jest utworzenie innego repozytorium w innym miejscu, dodanie pliku w tym repozytorium i wypchnięcie go do samego repozytorium.
mam nadzieję, że to może ci pomóc
źródło
$ git --bare init bare.git
Initialized empty Git repository in /home18/cbailey/gittest8/bare.git/
$ git clone bare.git non-bare
Cloning into 'non-bare'... \\ done. \\ warning: You appear to have cloned an empty repository.
Miałem ten problem, ponieważ
.git/config
zawierałworktree = D:/git-repositories/OldName
. Po prostu zmieniłem to naworktree = D:/git-repositories/NewName
Odkryłem to, ponieważ użyłem git gui , który pokazał bardziej szczegółowy komunikat o błędzie:
źródło
fatal: this operation must be run in a work tree
. Modyfikacja pliku konfiguracyjnego naprawiła to za mnie.W moim przypadku byłem w tym samym folderze co plik „.git” dla mojego repozytorium. Musiałem przejść o jeden poziom w górę, rozwiązałem to.
źródło
Jeśli nic innego nie działa, sprawdź dokładnie ścieżkę
git config core.worktree
. Jeśli ta ścieżka nie wskazuje na katalog roboczy, może być konieczne zaktualizowanie go.Sposób, w jaki otrzymałem ten błąd, polegał na utworzeniu repozytorium Git na dysku sieciowym. Działał dobrze na jednym komputerze, ale zwrócił ten błąd na innym. Okazało się, że miałem dysk zmapowany na literę dysku Windows na komputerze, na którym go utworzyłem, ale nie na innym komputerze, a Git zapisał ścieżkę do drzewa roboczego jako zmapowaną ścieżkę, a nie ścieżkę UNC.
źródło
Jeśli istniejący (nie-czysty) checkout zaczyna wyświetlać ten błąd, sprawdź plik .git / config; jeśli
core.bare
to prawda, usuń tę linię konfiguracjiźródło
Jeśli żaden z powyższych zwykłych sposobów nie pomaga, spójrz na ślad wywołania pod tym komunikatem o błędzie (
"fatal: This operation . . ."
) i znajdź skrypt i linię, które powodują rzeczywisty błąd. Po zlokalizowaniu tego wywołania error () wyłącz je i sprawdź, czy operacja, którą próbujesz, kończy się nawet z niektórymi ostrzeżeniami / komunikatami - na razie je zignoruj. Jeśli tak, w końcu po zakończeniu może wspomnieć o części operacji, która nie została pomyślnie zakończona. Teraz zajmij się tą częścią oddzielnie, jeśli ma to zastosowanie.W odniesieniu do powyższej logiki do mojego przypadku, otrzymałem ten komunikat o błędzie,
"fatal: This operation . . ."
gdy próbowałem uzyskać kod Androida-x86 za pomocąrepo sync . . .
. a śledzenie wywołania pokazaneraise GitError("cannot initialize work tree")
jako wywołanie error () powodujące powyższy komunikat o błędzie ("fatal: . . ."
). Tak więc, po skomentowaniu tegoGitError()
w.repo/repo/project.py
,repo sync . . .
kontynuowałem i ostatecznie wskazałem błąd dla trzech projektów, które nie zostały poprawnie zsynchronizowane. Właśnie usunąłem ich*.git
foldery z odpowiednich ścieżek w drzewie źródłowym Androida-x86 lokalnie i uruchomiłemrepo sync . . .
ponownie i zasmakowałem sukcesu!źródło
Ten sam problem, który mam, wykonałem następujące kroki,
wtedy zaczyna działać.
źródło
Edytowano plik konfiguracyjny i zmieniono bare = true na bare = false
źródło
Ponadto najwyraźniej ten błąd wystąpi, jeśli sklonujesz na dysk NTFS Ram Drive.
źródło