Git добавить все подкаталоги

86

У меня проблемы с добавлением папки и всех ее подкаталогов в мой репозиторий git. Я понял, что это очень популярный вопрос после некоторого поиска в Google, и я безуспешно пробовал каждое предложение, особенно предложение со страницы руководства по git-add . Я даже попробовал git add -Aбезуспешно. Для простоты предположим, что я инициализировал свой репозиторий git как Dir1. Тогда у меня есть следующая структура каталогов файлов.

Dir1/file1-1.txt
Dir1/file1-2.txt
Dir1/Dir2/file2-1.txt
Dir1/Dir2/Dir3/file3-1.txt

Мои настоящие файлы имеют подкаталоги, которые охватывают 5-6 уровней в глубину, поэтому есть ли команда git для добавления всех файлов из каждого подкаталога в мой репозиторий? Прямо сейчас, когда я делаю предложение на странице руководства, git add Dir1/\*я вижу Dir2в своем репо, но он отображается как зеленая папка, и я не могу ее открыть, что заставляет меня думать, что все файлы / папки в Dir2не получили добавлен. Любая помощь будет принята с благодарностью. Я новый пользователь git (пользуюсь им меньше недели), поэтому постарайтесь сохранить свои инструкции на уровне новичка.

Джош Брэдли
источник
2
git addлюбого каталога автоматически рекурсивно. Использование git add .на верхнем уровне репо должно добавить туда все. Если это не так, .gitignoreуже в игре (локальном или глобальном).
Невик Ренель
ты проверял .gitignore? Каким-то образом ваши каталоги игнорируются.
ogzd
2
какой выход git status --ignored?
Chronial
2
Просто чтобы помочь другим, кто видит этот вопрос, если в создаваемых git add .вами каталогах нет файлов, они не добавляются. Вам нужно добавить какой-то файл в каталоги, чтобы git мог их отслеживать.
gotphishing

Ответы:

109

Делать,

git add .

находясь в корне репозитория. Это все добавит. Если вы это сделаете git add *, он добавит только файлы, на которые *указывает. Одиночная точка относится к каталогу.

Если ваш каталог или файл не были добавлены в git index / repo после указанной выше команды, не забудьте проверить, помечены ли они как игнорируемые git в файле .gitignore .

Калле Покки
источник
8
Просто попробовал это. Все еще не работает. Я сделал git add. git commit git push origin master Я что-то упустил?
Джош Брэдли
4
Предполагая, что ваши файлы находятся в каталоге Dir1, делать cd Dir1; git init; git add . ; git commit;больше ничего не требуется. Если у вас есть .gitignore, игнорирующий файлы в каком-то каталоге, но вы все еще хотите их добавить, вам нужно сделать git add -f .вместо git add ..
Kalle Pokki
5
Я пробовал "git add". но это не сработало. На следующий день я вернулся и попробовал, и все "просто сработало", спасибо! Должно быть, это была одна из тех полуночных ошибок, которые исчезают, когда снова загорается свет.
Джош Брэдли
2
git add. не работает и не добавляет рекурсивно подкаталоги и их содержимое.
Знает
Возможно, вам потребуется открыть новое командное окно, чтобы это работало постоянно.
клетка гремучая
16

Простое решение:

git rm --cached directory
git add directory
Шашват Гупта
источник
13

Вы также можете столкнуться с проблемами, если сам подкаталог является репозиторием git, т.е. имеет каталог .git - проверьте с помощью ls -a.

Для удаления перейдите в подкаталог и rm .git -rf.

PaulB
источник
2
В терминале OSX 10.11.6 используйте: rm -rf .git
Sébastien REMY
2
То же самое, не правда ли?
PaulB
4

Тоже боролся, но набирал правильно

git add -f ./JS/*

где JS было именем моей папки, содержащей подпапки и файлы

Ян Райт
источник
2
он может добавлять игнорируемые файлы и делать беспорядок в репозитории.
changtung
git add ./JSправильное использование. Он добавит все файлы в каталог и все подкаталоги, по-прежнему заботящиеся об игнорируемых файлах.
Реми Бенуа
1

Я не могу точно сказать, так ли это, но для меня проблемой было наличие файлов .gitignore в некоторых подкаталогах. Опять же, я не могу этого гарантировать, но после их удаления все заработало.

Адам Рул
источник
0

Большинство файлов вероятно .gitignore s при игре. Обратите внимание, что файлы .gitignore могут появляться не только на корневом уровне репо, но и на любом подуровне. Вы можете попробовать это с корневого уровня, чтобы найти их:

находить . -name ".gitignore"

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

Также могут быть задействованы подмодули. Проверьте неправильные каталоги на наличие файлов ".gitmodules".

Самато
источник
0

Я видел эту проблему раньше, когда имя (подпапки), которое я пытался добавить, начиналось с "_Something_"

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

Эш Кумар
источник