git-stash не может найти рабочее дерево - PullRequest
7 голосов
/ 03 мая 2011

Я пытаюсь настроить git-репозиторий с заданным вручную рабочим деревом с помощью:

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

После запуска вышеупомянутого я могу добавить файлы, расположенные в "/ Users / braitsch / projects / project1"
через: git add somefile или git add.
Коммиты работают нормально, как и звонки в "git branch"

Однако git stash list выдает следующую ошибку:

фатально: /usr/local/Cellar/git/1.7.4.4/libexec/git-core/git-stash не может использоваться без рабочего дерева.

Не поддерживается ли копирование в определяемых пользователем рабочих деревьях?

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

Любые мысли приветствуются!

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

Как заметил @jleedev ниже, при попытке вызвать git stash за пределами рабочего дерева, похоже, есть ошибка. Однако мой обходной путь заключается в том, чтобы просто перейти в рабочее дерево и затем вызвать stash, сначала пройдя путь к gitdir. Неудобно, я знаю, но для команды stash работает следующее:

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

Эта проблема, похоже, не изводит другие стандартные команды, такие как add, commit, branch и т. Д. Насколько я могу судить, просто "прятать".

Если вы хотите отойти от структуры по умолчанию, в которой ваша папка .git вложена в ваше рабочее дерево, вам могут пригодиться следующие шаги:

  1. создайте каталог, в котором вы хотите хранить свой репозиторий git
  2. создайте каталог, в котором вы хотите хранить файлы, которые вы собираетесь отслеживать (оба они могут быть где угодно в вашей файловой системе)
  3. перейдите в папку вашего репозитория git и запустите:

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

    Это запустит новый репозиторий и свяжет его с вашей внешней папкой рабочего дерева.

Для запуска стандартных команд добавления, удаления, ветвления, фиксации, cd в свой репозиторий git и запуска своей команды как обычно. Однако, чтобы запустить stash, обязательно перейдите на ваше рабочее дерево и затем запустите stash, как я уже отмечал выше, предварительно указав в команде путь к вашему gitdir.

Ответы [ 3 ]

6 голосов
/ 03 мая 2011

Это либо ошибка в поведении команды, либо сообщение об ошибке. Команды, которые требуют рабочего дерева и реализованы в виде сценариев 1 , проверяют его наличие с помощью этой команды:

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

, что не удастся, если вы на самом деле не внутри рабочего дерева, вопреки тому, что подразумевается в сообщении об ошибке. Команды, которые реализованы в C, с другой стороны, вызывают setup_work_tree, что автоматически chdir s в рабочем дереве. Могу ли я безопасно изменить функцию require_work_tree в git-sh-setup, чтобы соответствовать этому, я не знаю.

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 голосов
/ 15 июля 2013

Я столкнулся с этим, используя git для Windows 1.8.3 через ConEmu.

Кажется, моя проблема связана с отображением накопителя, которое отображало путь на C:диск к P:\

git распознал путь для подключенного диска как /p в приглашении, но настройка для git config --local core.worktree возвращала P:/

Я сбросилон использовал git config --local core.worktree /p, который дал мне p:/ в качестве нового значения, но это исправило тайник.Кажется, ему не нравилась заглавная буква диска.

Оказывается, мне просто нужно было cd /c, а затем cd /p, чтобы получить уведомление о git, я вошел в каталог рабочего дерева.Не уверен, почему git чувствителен к cd, но не смог обнаружить, что я был в нужном месте, когда была инициализирована оболочка.

0 голосов
/ 03 мая 2011

Edit:

Попробуйте установить переменную среды GIT_WORK_TREE, чтобы она указывала на подходящую папку.


Оригинальный ответ:

Это была немного странная команда. Попробуйте это вместо этого. Это намного проще:

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