git-stash не удается найти рабочее дерево

#git #git-stash

#git #git-stash

Вопрос:

Я пытаюсь настроить репозиторий 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
  

Любые мысли были бы высоко оценены!

———ОБНОВИТЬ———

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

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

Похоже, что эта проблема не затрагивает другие стандартные команды, такие как add, commit, branch и т.д. Насколько я могу судить, просто «stash».

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

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

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

    Это инициализирует новый репозиторий и свяжет его с вашей внешней папкой worktree.

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

Ответ №1:

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

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

что приведет к сбою, если вы на самом деле не находитесь внутри рабочего дерева, вопреки тому, что подразумевает сообщение об ошибке. С другой стороны, команды, которые реализованы на C, вызывают setup_work_tree , которые автоматически chdir помещаются в рабочее дерево. Можно ли безопасно изменить 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

Комментарии:

1. Спасибо за ответ «да», похоже, это ошибка. Пожалуйста, посмотрите мое дополнение к моему первоначальному вопросу выше.

Ответ №2:

Редактировать:

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


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

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

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

Комментарии:

1. Привет, это не решает проблему. «git init» просто инициализирует новый репозиторий в вашем текущем рабочем каталоге. Я пытаюсь определить рабочее дерево в другом месте файловой системы с помощью команд в моем примере выше. Однако, похоже, что когда вы делаете это, команда git stash завершается ошибкой.

Ответ №3:

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

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

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

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

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