Git: фатальный: Pathspec находится в подмодуле
Я пытаюсь заставить TravisCI автоматически развертывать статический сайт Hakyll, согласно это руководство.
Вот как настроено мое репо. У меня есть ветвь моего источника, в которой содержатся мои файлы hakyll и markdown. Он создает html в каталог _site
, который настроен как подмодуль, связанный с моей ветвью master
.
Я создаю сайт без проблем, а затем cd
в каталог _site. Однако, когда я пытаюсь создать git add ./*
только что созданные HTML файлы, я получаю следующую ошибку:
fatal: Pathspec './about.html' is in submodule '_site'
Когда я пытаюсь git add --all
, я получаю эту ошибку:
git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.
/home/travis/build.sh: line 245: 1566 Aborted git add --all
Что вызывает это, и как я могу избежать этого?
Здесь вы можете просмотреть репозиторий .
Ответы
Ответ 1
Удаление каталога из git и добавление его снова сработало для меня:
git rm --cached directory
git add directory
Это работает, если вы целенаправленно удалили каталог .git
, потому что вы хотели добавить directory
в свой основной проект git. В моем конкретном случае у меня было git клонирование расширения и запуск git add .
, не задумываясь слишком много. git решил создать подмодуль, который мне не понравился. Поэтому я удалил directory/.git
и столкнулся с Git: fatal: Pathspec is in submodule
. Я не мог понять, как удалить материал подмодуля. Исправлено с двумя строками выше.
Ответ 2
Кажется, что контекст git add
является родительским репо ( "родительский" означает тот, который включает в себя подмодуль), который вызывает предупреждение.
Попробуйте изменить его контекст с помощью
cd _site
git --git-dir=.git --work-tree=. add .
git --git-dir=.git --work-tree=. commit -m "new files"
Не забывайте, что если это сработает, вам все равно придется вернуться к родительскому репо и git add _site
, так как подрепо будет иметь изменения.
И вам придется нажать оба.
Обновление января 2017 года (2+ года спустя)
С Git 2.12 вы больше не увидите prefix_pathspec: Assertion
.
См. commit 2d81c48 (09 января 2017 г.) Стефан Беллер (stefanbeller
).
Помощник: Джефф Кинг (peff
) и Junio C Hamano (gitster
).
(слияние Junio C Hamano - gitster
- в commit 00880a1, 18 января 2017 г.
pathspec
: дать лучшее сообщение для связанной с субмодулем ошибки pathspec
Запуск "git add a/b
", когда "a
" является правильно подобранным подмодулем но без значимого сообщения об ошибке.
Ответ 3
Кажется, моя проблема в том, что я случайно удалил папку .git
подмодуля.
Ответ 4
Похоже, вы работаете на неинициализированных подмодулях (в основном они отсутствуют каталоги .git
), поэтому вы должны сначала инициализировать их и обновить:
git submodule init
git submodule update
В противном случае, если вам больше не нужен этот подмодуль, удалите его:
git submodule deinit _site
или
git rm -f --cached _site
и добавьте его снова:
git add _site
Проверьте текущие выдающиеся подмодули: git submodule status
.
См. также: Почему git ошибка с 'Assertion failed' на git add.?