Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

git add -A is not adding all modified files in directories

Tags:

git

recursion

I want to add all files no matter what: whether it is deleted, created, modified, untracked, etc? I just don't want to git add ALL my files EVERY TIME. I tried git add -A but it is NOT adding modified files inside folders.

Here is my initial git status in my project:

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") 

Then I put git add -A:

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

and then here is the new status AFTER doing 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") 

You can see that there has been no change in the git status. How do I solve this?

I also tried git add . - it did not help

I also tried git add * - it did not help

like image 650
Rakib Avatar asked Oct 11 '11 12:10

Rakib


People also ask

How do I add all modified files to git?

The easiest way to add all files to your Git repository is to use the “git add” command followed by the “-A” option for “all”. In this case, the new (or untracked), deleted and modified files will be added to your Git staging area. We also say that they will be staged.

Does git add add everything?

In Git 2. If you are in any subdirectory of the working directory, git add -A will add all files from the entire working directory, and git add . will add files from your current directory.

Does git add only modified files?

This command updates the index by adding the changes for those files only about which git already know i.e. changes in tacked files only. Therefore, it will add only modified & deleted files from the current project to the staging area and will skip all new files / folders.

Does git commit add all files?

Committing in git can be a multiple step process or one step depending on the situation. This situation is where you have multiple file updated and wants to commit: You have to add all the modified files before you commit anything. with this you have to add the message for this commit.


2 Answers

The problem here is that BankAccount, BuckysButtons, multiview, rotator and segmentedControls are all git submodules, which act like independent repositories in many ways.

If what you want to do is to run git add -A . in each submodule, you could do:

git submodule foreach --recursive git add -A . 

And then you could create a commit in every submodule with:

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

(If you don't have other submodules nested inside those submodules, the --recursive option is unnecessary.)

However, I don't recommend doing this. You should carefully change into each submodule in turn, and consider how you want to update them, treating each as a standalone repository. Then only commit these new submodule versions in the main project when you have tested that the project as a whole works with those new versions of each submodule.


Update: It seems from the error message that you've quoted in the comments below that you have added these other git repositories directly rather than as submodules. This can happen if you copy another git repository into your repository and then just use git add to stage it, rather than adding it with git submodule add <REPOSITORY-URL>. If you really intend these to be stored as submodules, I would suggest moving them out of your repository, committing their deletion, and then add them properly as submodules with git submodule add

like image 200
Mark Longair Avatar answered Oct 02 '22 17:10

Mark Longair


I just recreated this by accident.

I copied a project I had in another folder into my new git repo. I didn't intend to use it as a submodule, I intended to use it as a starting point for a new project. The project I copied which was now a subfolder of my main git repo had .git/ in it. Delete subfolder/.git/.

rm -rf subfolder/.git 

Then things were still weird...

git status 

Nothing to commit. Hmm... What about all of these files?

The reason is the files are still cached in git as a submodule - this cache needs to be cleared of that:

git rm --cached subfolder 

You should now see that all of the files in the subfolder in git status.

You can now commit and push.

git add -A git commit -m 'fix: rm accidental submodule and readd files' git push origin <branch> 
like image 28
Patrick Lee Scott Avatar answered Oct 02 '22 18:10

Patrick Lee Scott