【问题标题】:git add -A is not adding all modified files in directoriesgit add -A 没有在目录中添加所有修改过的文件
【发布时间】:2011-12-05 06:47:56
【问题描述】:

无论如何我都想添加所有文件:是否已删除、创建、修改、未跟踪等?我只是不想 git add ALL 我的文件 EVERY TIME。我试过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 * - 没有帮助

【问题讨论】:

  • 这很奇怪。您现在如何实际添加文件?
  • 你能查一下git add .; git add -u吗?解释:stackoverflow.com/questions/572549/…
  • 您尝试运行git commit -a -m "just commit" 吗?您是否将 BankAccount 等添加到您的 .gitignore 中?
  • @DipSwitch 我已经尝试过 'git commit -a -m' 并且只是提交 - 没有运气
  • @DipSwitch 我没有在忽略列表中添加任何内容

标签: git recursion


【解决方案1】:

我只是无意中重新创建了这个。

我将另一个文件夹中的项目复制到我的新 git 存储库中。我不打算将其用作子模块,而是打算将其用作新项目的起点。我复制的项目现在是我的主要 git 存储库的子文件夹,其中包含 .git/。删除subfolder/.git/

rm -rf subfolder/.git

然后事情还是很奇怪......

git status

没有什么可提交的。嗯...所有这些文件呢?

原因是文件仍然作为子模块缓存在 git 中 - 这个缓存需要清除:

git rm --cached subfolder

您现在应该会看到 git status 中的子文件夹中的所有文件。

您现在可以提交和推送。

git add -A
git commit -m 'fix: rm accidental submodule and readd files'
git push origin <branch>

【讨论】:

  • 回头看,好像不知道自己在做什么,lol - 蛮力逼近。
  • 非常感谢!复制到新文件夹并删除旧子模块有帮助!
  • 2020 年更新!解决这个问题的实际方法... :)
【解决方案2】:

出现此错误是因为您添加了一个已与另一个 github 存储库链接的文件夹。

要解决这个问题,首先将您要上传的文件从 BankAccount 文件夹复制到 github,然后删除 BankAccount 文件夹。

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

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

现在你可以做

git add . 
git status

【讨论】:

    【解决方案3】:

    我通过删除假定子模块和项目根目录中的 .git 文件夹解决了这个问题,然后执行一个新的“git init”

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        过去几天我在使用 BitBucket 时遇到了这个问题。我正在开发一个项目,该项目正在由 Visual Studio 2013 社区版在其存储库中进行跟踪。

        但是,我有时使用 Git Bash 手动进行提交,这时事情开始出错,文件被简单地忽略了。尝试重新克隆存储库,但这没有帮助。

        最后我发现,如果你进入 Visual Studio > Team Explorer > 点击同步,Visual Studio 将执行拉取操作,然后提交并推送任何未跟踪的文件。

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

        希望这对某人有所帮助。

        【讨论】:

          【解决方案6】:

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

          这可能对将来的某人有所帮助,并免去一些麻烦。

          【讨论】:

            【解决方案7】:

            对我来说一个非常简单的解决方法 - 我在项目的子目录中打开了 Git Bash。

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

            【讨论】:

            • 谢谢!我很惊讶 git 没有告诉我那个目录不是一个 repo!
            【解决方案8】:

            这里的问题是BankAccountBuckysButtonsmultiviewrotatorsegmentedControls 都是 git 子模块,它们在很多方面都像独立的存储库。

            如果你想做的是在每个子模块中运行git add -A .,你可以这样做:

            git submodule foreach --recursive git add -A .
            

            然后你可以在每个子模块中创建一个提交:

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

            (如果这些子模块中没有嵌套其他子模块,则不需要--recursive 选项。)

            但是,我不建议这样做。您应该仔细地依次更改每个子模块,并考虑如何更新它们,将每个子模块视为一个独立的存储库。然后,只有在您测试了整个项目可以与每个子模块的这些新版本一起使用时,才在主项目中提交这些新的子模块版本。


            更新:从您在下面的 cmets 中引用的错误消息看来,您已经直接添加了这些其他 git 存储库,而不是作为子模块。如果您将另一个 git 存储库复制到您的存储库中,然后仅使用 git add 暂存它,而不是使用 git submodule add &lt;REPOSITORY-URL&gt; 添加它,则会发生这种情况。如果您真的打算将它们存储为子模块,我建议将它们移出您的存储库,提交删除,然后使用git submodule add 将它们正确添加为子模块

            【讨论】:

            • 无法使用子模块。它说,@ 987654336@ # Entering 'BankAccount' # No submodule mapping found in .gitmodules for path 'BankAccount' # Entering 'BuckysButtons' # No submodule mapping found in .gitmodules for path 'BuckysButtons' # Entering 'multiview' # No submodule在 .gitmodules 中找到路径 'multiview' 的映射 # 输入 'rotator' # 在 .gitmodules 中找不到路径 'rotator' 的子模块映射 # 输入 'segmentedControls' # 在 .gitmodules 中找不到路径'segmentedControls'的子模块映射
            • 在某些时候这些目录似乎被设置为子模块,但是您在主项目目录中缺少 .gitmodules 文件。
            • 在这种情况下,这些存储库还没有作为子模块添加,您只是直接添加了它们。我已经更新了我的答案以反映这一点。
            • 这是执行此操作的标准方法,是的 - 大多数人可能不知道您可以使用 git submodule 在树中添加其他存储库作为条目无需命令。但是,这并不是说这一定是适合您的方法 - 您可能希望查看 git slavegit subtreerepo 作为可能的替代方案。或者完全避免嵌套存储库可能会更好。
            • @MarkLongair:你是对的;不同的版本产生不同的输出。照你说的做了,将git status 与版本 1.7.0.4 和 1.7.4.1(从源代码构建)一起使用并得到不同的输出。 1.7.4.1 版本提供了输出引用子模块,而 1.7.0.4 没有。学到了一些新东西。
            【解决方案9】:

            让我们引用 -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.
            

            注意关键字:&lt;filepattern&gt;。你需要给它一个匹配的模式,递归地,一直到你的树。

            【讨论】:

            • 我也尝试过 'git add *' - 这应该是通用模式吧?它也不起作用,
            • * 始终表示“在当前目录中”。不幸的是,由于 kernel.org 大部分都处于离线状态,我无法为您找到文件模式的定义。
            猜你喜欢
            • 2018-05-14
            • 1970-01-01
            • 2017-07-06
            • 1970-01-01
            • 2018-05-01
            • 2020-04-27
            • 2020-08-24
            • 2011-11-09
            • 2013-07-17
            相关资源
            最近更新 更多