не могу добавить папку в git


21

Я добавляю новую папку (на самом деле я клонировал ее из другого репозитория и забыл об этом), затем я сделал некоторые изменения там. Кроме того, я сделал много изменений в других местах, когда я пытался сделать 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
В случае, если кто-то еще окажется на этой странице с проблемой, с которой я столкнулся: я не смог добавить файлы в подпапку в Git. Позже я обнаружил, что эта подпапка имеет свой собственный .gitрепозиторий, и файлы добавляются в этот репозиторий вместо репозитория в основной папке. Даже в графическом интерфейсе Git эта подпапка отображалась как файл, а не как папка.
Nav

Ответы:


29

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

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


1
Нет, это не присутствует git status --ignored, как-то я думаю, что это связано с подмодулем
user1016265

1
Эта команда спасала жизнь. Без него я бы никогда не выяснил, какой каталог был проигнорирован.
Игорь Ганапольский

вау ..... Я чувствовал себя совершенно глупо, читая этот факт после использования git в течение некоторого времени ^^
XandruCea

1
Ага, наконец. Это была моя проблема. Я скопировал .gitignore из родительского и в подмодули. Я игнорировал «config /» и позже создал каталог в директории источника с именем config. Не могу добавить конечно. Теперь проблема решена, спасибо :-)
Avec

7

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


Вау, это такая простая вещь, но, черт возьми. Я прочитал это и
сказал:

3

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

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

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

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


5
Это также можно исправить, запустивgit rm --cached path_to_submodule
Виктор Марчук


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. Другие вещи были действительно необходимы для уничтожения теней субмодуля.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.