Подтвердить что ты не робот

Git subtree pull говорит, что рабочее дерево имеет модификации, но статус git говорит, что это не так. Что дает?

Если я сделаю это в одном из своих репозиториев:

git subtree pull --prefix=frameworks/AquaticPrime --squash AquaticPrime

Я получаю это:

Working tree has modifications.  Cannot add.

Если я это сделаю (там же, конечно):

git status

Я получаю это:

# On branch master
nothing to commit (working directory clean)

Я не совсем уверен, что происходит здесь. Команда состояния git подразумевает, что у меня нет изменений, поэтому я предполагаю, что трюк git имеет отношение к изменениям в другой ветке, связанной с поддеревом, но это не совсем понятно.

Может ли кто-нибудь дать просветление?

4b9b3361

Ответ 1

У меня была такая же проблема. Из источника GIT возникает ошибка, когда команда git diff-index HEAD возвращает результат, даже если git status говорит, что рабочее дерево чиста.

Чтобы избежать этой ошибки, в моем случае я повторно проведу текущую ветку рабочего дерева, и все кажется ОК: git checkout <branch>

Это немного смущает, но если кто-то может объяснить, почему...

Ответ 2

Я обошел это сейчас. Мне показалось, что репозиторий был совершенно новым: я никогда ничего не совершал. Как только я передал файл репо, я смог пройти мимо этой ошибки.

Однако, используя команду git subtree add C:\gitTest\repos\subA -d --prefix subA, я получил новую ошибку:

fatal just how do you expect me to merge 0 trees?

После беспорядка в течение минуты я понял, что для этого требуется передать конкретную ревизию. Итак, эта команда преуспела:

git subtree add C:\gitTest\repos\subA HEAD -d --prefix subA

И, очевидно, вам не нужен флаг -d debug.

Ответ 3

git reset --hard исправил его мне

От git reset --help

- hard Сбрасывает индекс и рабочее дерево. Любые изменения в отслеживаемых файлах в рабочем дереве с тех пор отбрасываются.

Ответ 4

У меня была эта проблема, когда я:

  • добавлено поддерево;
  • реализовано, я добавил его неправильно (в неправильный каталог);
  • удалил его с помощью rm;
  • попытался снова импортировать его (в нужное место).

Хотя puppet diff был - правильно - ничего не показывал, git diff-index HEAD перечислял каждый из файлов, которые я только что удалял, как "удаленные" - хотя я никогда не делал ничего (что гораздо меньше).

Я считаю, что это ошибка в git (с использованием 2.7.0 здесь)... Ошибка или нет, обход - это переход на любую другую ветвь (с обычным git checkout ....), а затем обратно к твоему. Надеюсь, это помогает кому-то - даже если не оригинальному ассерту.