git add -A没有在目录中添加所有修改过的文件

时间:2011-10-11 12:37:27

标签: git recursion

我想添加所有文件,无论是什么:是删除,创建,修改,未跟踪等?我只是不想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

然后这是新状态 AFTER 执行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 * - 它没有帮助

9 个答案:

答案 0 :(得分:47)

这里的问题是BankAccountBuckysButtonsmultiviewrotatorsegmentedControls都是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的子模块

答案 1 :(得分:27)

我只是偶然重建了这个。

我将我在另一个文件夹中的项目复制到我的新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>

答案 2 :(得分:4)

一个非常简单的修复方法 - 我在项目的子目录中打开了Git Bash。

打开Bash并在根目录下执行命令修复了这个问题; git add -A .按预期工作。

答案 3 :(得分:4)

我通过删除假定子模块内部和项目根目录中的.git文件夹,然后执行新的'git init'

来解决这个问题。

答案 4 :(得分:1)

发生此错误是因为您添加了一个已与其他github存储库链接的文件夹。

要解决此问题,请先从BankAccount文件夹中将要上传的文件复制到github,然后删除BankAccount文件夹。

现在创建一个新文件夹,然后将文件粘贴到其中。

这是由于git子模块是由早期文件夹中存在的git自动获取的。

现在你可以做到

git add . 
git status

答案 5 :(得分:0)

让我们引用-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 :(得分:0)

我在Windows上遇到了类似的问题,我git add --all留下了一些未跟踪的文件,问题是有几个文件有不同的套管'test.php'和'Test.php'所以git跟踪了Test.php和不是它的小写版本。

这可能会对未来的某些人有所帮助,并且可以节省一些头脑。

答案 7 :(得分:0)

过去几天我在BitBucket上遇到了这个问题。我正在开发一个由Visual Studio 2013 Community Edition在其存储库中跟踪的项目。

但是我偶尔会使用Git Bash来手动执行提交,而且当事情开始出错并且文件被忽略时。试图重新回复回购,但这没有帮助。

最后我发现如果你进入Visual Studio&gt;团队资源管理器&gt;单击“同步”,Visual Studio将执行拉动,然后提交并推送任何未跟踪的文件。

如果您像我一样喜欢控制台,您可以通过Git Bash手动执行相同操作。

希望这有助于某人。

答案 8 :(得分:0)

我遇到了这个问题,因为我将其他人的存储库克隆到了我的项目中。当我克隆它时,已经有来自他们项目的.git和.gitignore文件夹/文件。删除那些预先存在的git文件并重新使用git后,它可以正常工作。