Git add -A не добавляет все измененные файлы в каталоги

Я хочу добавить все файлы независимо от того, будет ли он удален, создан, изменен, не проверен и т.д.? Я просто не хочу git добавлять ВСЕ мои файлы КАЖДОЕ ВРЕМЯ. Я пробовал git add -A, но НЕ добавлял измененные файлы внутри папок.

Вот мой первоначальный git status в моем проекте:

Rakib-MacBook-Pro:my-xcode-practice rakib$ git status
# On branch master
# 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:   BankAccount (modified content, untracked content)
#   modified:   BuckysButtons (modified content, untracked content)
#   modified:   multiview (modified content, untracked content)
#   modified:   rotator (modified content, untracked content)
#   modified:   segmentedControls (modified content, untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")

Затем я положил git add -A:

Rakib-MacBook-Pro:my-xcode-practice rakib$ git add -A

а затем это новый статус ПОСЛЕ, выполняющий git add -A:

Rakib-MacBook-Pro:my-xcode-practice rakib$ git status
# On branch master
# 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:   BankAccount (modified content, untracked content)
#   modified:   BuckysButtons (modified content, untracked content)
#   modified:   multiview (modified content, untracked content)
#   modified:   rotator (modified content, untracked content)
#   modified:   segmentedControls (modified content, untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")

Вы можете видеть, что в git status изменений не было. Как я могу это решить?

Я также пробовал git add . - это не помогло

Я также пробовал git add * - это не помогло

Ответ 1

Проблема заключается в том, что BankAccount, BuckysButtons, multiview, rotator и segmentedControls - это все git подмодули, которые во многом действуют как независимые репозитории.

Если вы хотите выполнить git add -A . в каждом подмодуле, вы можете сделать:

git submodule foreach --recursive git add -A .

И тогда вы можете создать фиксацию в каждом подмодуле с помощью:

git submodule foreach --recursive "git commit -m 'Committing in a submodule'"

(Если у вас нет других подмодулей, вложенных внутри этих подмодулей, опция --recursive не нужна.)

Однако, я не рекомендую это делать. Вы должны тщательно изменить каждый подмодуль по очереди и подумать о том, как вы хотите их обновить, рассматривая каждый как отдельный репозиторий. Затем завершите только эти новые версии подмодулей в основном проекте, когда вы протестировали, что проект в целом работает с этими новыми версиями каждого подмодуля.


Обновление: Из сообщения об ошибке, которое вы указали в комментариях ниже, вы добавили эти другие репозитории git напрямую, а не как подмодули. Это может произойти, если вы скопируете другой репозиторий git в свой репозиторий, а затем просто используйте git add для его создания, а не добавляете его с помощью git submodule add <REPOSITORY-URL>. Если вы действительно собираетесь их хранить в виде подмодулей, я бы предложил вывести их из вашего репозитория, совершить их удаление, а затем правильно добавить их в качестве подмодулей с помощью git submodule add

Ответ 2

Я просто воссоздал это случайно.

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

rm -rf subfolder/.git

Тогда все было странно...

git status

Нечего делать. Хм... Как насчет всех этих файлов?

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

cp subfolder newsubfolder    
rm -rf subfolder

Затем я добавил все измененные файлы, зафиксировал и нажал.

git add -A
git commit -am 'i did something and there are now files'
git push origin <branchName>

Ответ 3

Я решил это, удалив папки .git внутри предполагаемых подмодулей и внутри корня проекта, а затем выполнив новый 'git init'

Ответ 4

Довольно простое решение для меня - я открыл Git Bash в подкаталоге проекта.

Откройте Bash и выполните команды в корневом каталоге, устранив эту проблему; git add -A . работал как ожидалось.

Ответ 5

Процитировать документацию для -A:

       -A, --all
       Like -u, but match <filepattern> against files in the working tree in addition to the
       index. That means that it will find new files as well as staging modified content and
       removing files that are no longer in the working tree.

Обратите внимание на критическое слово: <filepattern>. Вам нужно дать ему образец, который соответствует, рекурсивно, полностью вниз по вашему дереву.

Ответ 6

У меня была аналогичная проблема в Windows, где я git add --all оставил некоторые файлы невосстановленными, проблема заключалась в том, что было несколько файлов с разными оболочками "test.php" и "Test.php", поэтому git отслеживал Test.php и а не в нижнем регистре.

Это может помочь кому-то в будущем и сохранить некоторые царапины головы.

Ответ 7

У меня была эта проблема последних двух дней с BitBucket. Я работаю над проектом, который отслеживается в его репозитории с помощью Visual Studio 2013 Community Edition.

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

Наконец, я обнаружил, что если вы перейдете в Visual Studio > Team Explorer > нажмите "Синхронизировать", Visual Studio сделает потянуть, а затем зафиксирует и вытолкнет любые необработанные файлы.

Вы можете сделать то же самое вручную через Git Bash, если вам нравится консоль, как я.

Надеюсь, это поможет кому-то.

Ответ 8

У меня была эта проблема, потому что я клонировал чужой репозиторий в свой проект. Когда я клонировал его, в проекте уже были .git и .gitignore папки/файлы. После удаления этих ранее существовавших файлов git и повторного запуска с помощью git он отлично работает.

Ответ 9

Эта ошибка возникает из-за того, что вы добавили папку, которая уже связана с каким-либо другим репозиторием github. Родительская папка, с которой вы работаете, связана с каким-то другим репозиторием. Чтобы решить эту проблему, сначала скопируйте файлы, которые хотите загрузить в github из папки BankAccount, а затем удалите папку BankAccount. Теперь создайте новую папку, а затем вставьте в нее файлы. Это связано с git подмодулями, которые автоматически принимаются git, присутствующими в более ранней папке. Теперь вы можете сделать

git add . 
git status