Только что установил git в Windows. Я установил для переменной GIT_DIR значение c: \ git \ и убедился, что эта переменная окружения поддерживается cygwin (т.е. echo $ GIT_DIR - это то, что должно быть). Я зашел в папку, для которой хотел создать репозиторий git, скажем c: \ www, а затем запустил:
git init
git add .
Затем я получаю сообщение об ошибке:
fatal: This operation must be run in a work tree
Я не уверен, что пошло не так, но в каталоге c: \ git есть файл конфигурации, в котором говорится:
[core]
repositoryformatversion = 0
filemode = false
bare = true
symlinks = false
ignorecase = true
Я почти уверен, что это не должно быть пустым, и это наша проблема.
Ответы:
Прямая причина ошибки в том, что да, невозможно использовать
git-add
с голым репозиторием. Чистый репозиторий по определению не имеет дерева работ.git-add
берет файлы из рабочего дерева и добавляет их в индекс для подготовки к фиксации.Однако вам, возможно, придется немного подумать о настройке. GIT_DIR - это каталог репозитория, используемый для всех команд git. Вы действительно пытаетесь создать единый репозиторий для всего, что вы отслеживаете, возможно, для всей вашей системы? Репозиторий git по своей природе отслеживает содержимое одного каталога. Вам нужно будет указать
GIT_WORK_TREE
путь, содержащий все, что вы хотите отслеживать, а затем вам понадобится,.gitignore
чтобы заблокировать все, что вас не интересует.Может вы пытаетесь создать репозиторий, который будет просто отслеживать
c:\www
? Затем вы должны вставить егоc:\www
(не устанавливайте GIT_DIR). Это обычное использование git с репозиторием в каталоге .git каталога верхнего уровня вашего «модуля».Если у вас нет действительно веской причины, я бы рекомендовал придерживаться того, как git любит работать. Если вам нужно отслеживать несколько вещей, вы, вероятно, захотите несколько репозиториев!
источник
git config --unset core.bare
.git branch
команды я смог перечислить ветки, но не смогgit checkout -b feature22
. Означает ли это, что для составления списка ветвей не требуется рабочее дерево, но для проверки оно требуется?Кроме того, вы, вероятно, находитесь в подпапке .git, перейдите на одну папку вверх в корень вашего проекта.
источник
На тот случай, если то, что случилось со мной, происходит с кем-то другим, мне нужно сказать следующее:
я был в своем
.git
каталоге в моем проекте, когда я получил эту ошибку.Я искал и рыскал в поисках ответов, но ничего не помогло.
Все, что мне нужно было сделать, это вернуться в нужный каталог
( cd .. )
.Для меня это был своего рода момент ладони.
Если есть еще кто-то такой же глупый, как я, надеюсь, вы нашли этот ответ полезным.
источник
Это должно решить эту проблему:
источник
Просто клонировать один и тот же проект в другую папку и скопировать в .git / папку для вашего проекта.
пример
Создать временную папку:
переключиться во временную папку
клонировать тот же проект во временную папку:
скопируйте папку .git в свой проект:
cp -R .git/ path/to/your/project/
переключитесь на свой проект и запустите
git status
удалить с темп папку , если ваш конец.
надеюсь, это кому-то поможет
источник
Явная установка
GIT_DIR
переменной среды заставляет git использовать данный каталог в качестве репозитория git. Это никогда не понадобится при нормальном использовании.В вашем примере, поскольку вы указали a
GIT_DIR
и он не назван.git
(ведущая точка важна), и вы не предоставили--work-tree
параметр или не установилиGIT_WORK_TREE
переменную среды, вам нужен пустой репозиторий, когда вы сказалиgit init
.Поскольку в чистом репозитории нет рабочего дерева, большой выбор команд не имеет смысла в чистом репозитории.
git add
всего один.Есть ли какая-то особая причина, по которой вам нужно использовать нестандартное расположение для вашего репозитория git, а не во
.git
вложенной папке под корнем рабочего дерева? Хотя это возможно, это требует больше работы и больше подвержено ошибкам пользователей.источник
Создайте чистый репозиторий GIT
Небольшая напыщенная речь: git не может сам по себе создать нормальный пустой репозиторий. Действительно, глупый мерзавец.
Если быть точным, клонировать пустые репозитории невозможно. Итак, пустой репозиторий - бесполезный репозиторий. Действительно, вы обычно создаете пустой репозиторий и сразу его заполняете:
Однако git add невозможно при создании чистого репозитория:
выдает ошибку «фатальная: эта операция должна выполняться в дереве работ».
Проверить это тоже нельзя:
Решение состоит в том, чтобы создать еще один репозиторий в другом месте, добавить файл в этот репозиторий и отправить его в чистый репозиторий.
надеюсь, это поможет тебе
источник
$ 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.
У меня была эта проблема, потому что
.git/config
содержалосьworktree = D:/git-repositories/OldName
. Я просто изменил это наworktree = D:/git-repositories/NewName
Я обнаружил это, потому что использовал git gui , который показал более подробное сообщение об ошибке:
источник
fatal: this operation must be run in a work tree
. Для меня это исправило изменение файла конфигурации.В моем случае я находился в той же папке, что и файл ".git" для моего репо. Мне пришлось подняться на один уровень каталога вверх, это решило проблему.
источник
Если больше ничего не работает, перепроверьте путь в
git config core.worktree
. Если этот путь не указывает на ваш рабочий каталог, возможно, вам придется обновить его.Я получил эту ошибку, создав репозиторий Git на сетевом диске. Он работал нормально на одном компьютере, но возвращал эту ошибку на другом. Оказалось, что у меня диск был сопоставлен с буквой диска Windows на компьютере, на котором я его создал, но не на другом компьютере, и Git сохранил путь к рабочему дереву как сопоставленный путь, а не путь UNC.
источник
Если существующая (не голая) касса начинает выдавать эту ошибку, проверьте файл .git / config; если
core.bare
это правда, удалите эту строку конфигурацииисточник
Если ни один из вышеперечисленных способов вам не помогает, просмотрите трассировку вызовов под этим сообщением об ошибке (
"fatal: This operation . . ."
) и найдите сценарий и строку, которая вызывает фактическую ошибку. Как только вы найдете этот вызов error (), отключите его и посмотрите, завершается ли операция, которую вы пытаетесь выполнить, даже с некоторыми предупреждениями / сообщениями - пока игнорируйте их. Если это так, то, наконец, после завершения он может упомянуть часть операции, которая не была завершена успешно. Теперь рассмотрим эту часть отдельно, если это применимо.Что касается приведенной выше логики в моем случае, я получал это сообщение об ошибке,
"fatal: This operation . . ."
когда пытался получить код Android-x86 с помощьюrepo sync . . .
. и трассировка вызова отображаетсяraise GitError("cannot initialize work tree")
как вызов error (), вызывающий указанное выше сообщение об ошибке ("fatal: . . ."
). Таким образом, после того, отметив , чтоGitError()
в.repo/repo/project.py
, по-repo sync . . .
прежнему , и , наконец , указанная ошибка для трех проектов , которые не были должным образом синхронизированы. Я просто удалил их*.git
папки из соответствующих путей в дереве исходных текстов Android-x86 локально, запустилrepo sync . . .
снова и ощутил успех!источник
Та же проблема, что и у меня, я сделал следующие шаги,
тогда он начинает работать.
источник
Отредактировал файл конфигурации и изменил bare = true на bare = false
источник
Вдобавок, видимо, такая ошибка произойдет, если вы клонируете в NTFS Ram Drive.
источник