18

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

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   protected/ext/SpecificFolder (modified content)
#

Тогда я помню, что, возможно, там была папка .git (потому что ранее я делал там git clone). Я зашел в эту папку и удалил ненужные файлы (папки) и папку .git. Я проверил статус мерзавца, ничего странного. Затем совершите коммит и извлеките его в другую ветку, и вдруг я понял, что эта папка не была добавлена в последний коммит. На самом деле папка была добавлена, но файлы внутри были проигнорированы. Теперь, даже когда я пытаюсь сделать git add для этой папки, ничего не происходит, и git status не показывает никаких изменений :(

Что я могу сделать ?

6 ответов6

25

Git не отслеживает каталоги; но только файлы в них.

Похоже, у вас может быть шаблон игнорирования, который заставляет add ничего не делать. Вы можете видеть проигнорированные файлы со git status --ignored ; затем их можно отслеживать с помощью git add --force protected/ext/SpecificFolder

6

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

3

Мне удалось сделать именно то, что сделал этот пользователь: добавить существующее хранилище git внутри другого.

Симптом был в том, что git распознал этот каталог как файл и, следовательно, не смог добавить файлы каталога.

Чтобы решить этот вопрос, я удалил папку .git в папке, переместил эту папку в другой каталог, очистил индекс, удалил каталог в моем репозитории, а затем смог правильно добавить каталог.

Мораль этого такова: не добавляйте хранилище внутри другого.

2

Здесь есть лучший ответ:использование .gitkeep

TL; DR, добавьте файл .gitkeep в ваш пустой каталог

0

Попробуйте добавить файл в этот каталог.

$ git add my-dir/index.html

Если вы видите вывод, как показано ниже:

The following paths are ignored by one of your .gitignore files:
my-dir/index.html
Use -f if you really want to add them.
fatal: no files added

В одном из ваших gitignores есть правило, которое запрещает вам добавлять этот каталог.

0

Я обнаружил похожие побочные эффекты после попытки конвертировать субмодуль в обычную подпапку.

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

Попытка специально добавить файл в нем дал мне лучшее предупреждение

git add sites/all/modules/contrib/transclusion/transclusion.module 
fatal: Pathspec 'sites/all/modules/contrib/transclusion/transclusion.module' is in submodule 'sites/all/modules/contrib/transclusion'
  • так что это было связано с тем, как я вручную пытался удалить старый подмодуль, поскольку не было хорошо документированного процесса для его правильного выполнения. - Я только что удалил его из .gitmodules. Другие вещи были действительно необходимы, чтобы уничтожить тени субмодуля.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .