【问题标题】:Git doesn't see new files, only the folderGit 看不到新文件,只有文件夹
【发布时间】:2013-01-17 15:12:02
【问题描述】:

在我的项目中添加一个包含一些新文件的文件夹并执行 git status 时,git 只告诉我该文件夹而不是文件。当我添加 -A 时,只添加了文件夹,没有添加任何文件,当我推拉时,只有文件夹而不是文件通过。

我做错了什么?

【问题讨论】:

  • 您的文件是否与 .gitignore 文件中的模式匹配?
  • 不,这正是丹尼尔在下面所说的。

标签: git file commit


【解决方案1】:

假设您有以下未跟踪的文件夹:

./fruits/
./fruits/apples.txt
./fruits/kiwis.txt

如果您想查看未跟踪文件夹中的文件:

git status -u

如果您想暂存未跟踪的文件夹,以及其中的文件:

git add fruits/

【讨论】:

    【解决方案2】:

    由于 git 只跟踪文件而不是文件夹,所以关于推拉的行为是不可能的。给git添加一个空目录是不可能的。
    对于git status,这是预期行为,因为文件夹中的所有文件都是新文件,因为 git 尚未跟踪此文件夹中的任何文件。

    另外,请检查git school, challenge 7。如果你在那里输入git status,你会看到这个输出,虽然octofamily包含两个文件:

    $ git statu­s
    # On branch master
    # Untracked files:
    #   (use "­git add <file>..." to­ include i­n what wil­l be commi­tted)
    #
    # blue_octocat.txt
    # octofamily/
    # red_octocat.txt
    

    这只是 UI 中的简化,您仍然可以使用 git add octofamily/baby_octocat.txt(但是,在 git 学校中不行,因为它不是真正的 git 客户端)。

    随后的git status 现在会反映这一点:

    $ git statu­s
    # On branch master
    # Changes to be committed:
    #      new file: octofamily/baby_octocat.txt
    #         
    # Untracked files:
    #   (use "­git add <file>..." to­ include i­n what wil­l be commi­tted)
    #
    # blue_octocat.txt
    # octofamily/momma_octocat.txt
    # red_octocat.txt
    

    请注意,它现在如何显示 octofamily 中的文件,因为现在该文件夹是已知的。

    【讨论】:

    • 这很奇怪,因为当我推拉到站点时,我的站点上有一个空文件夹。但是,我该如何开始跟踪文件夹中的文件呢?
    • @JohanDahl:请查看更新。空文件夹确实很奇怪。
    • 好吧,我猜我的 git 状态没有问题。但我确实做了 git add 。并且还尝试了 git add -A 和未添加的文件,至少 git status 没有报告任何关于它们的信息。我终于设法通过进入文件夹并执行 git add 来识别它们。从那里。但这不应该从我的 git 项目所在的根文件夹中工作吗?
    • @JohanDahl:是的,这应该在根文件夹中工作,我刚刚在我的本地存储库中检查了它。我不得不承认,你的问题听起来有点奇怪。也许将它发布在 git 邮件列表上是个好主意。
    • 所描述的行为是我在添加子模块时看到的,子模块中文件的添加需要添加到子模块文件夹中,但从子模块外部只能看到文件夹本身。
    【解决方案3】:

    请注意,git 现在会将包含隐藏 .git 文件夹的文件夹视为子模块。您可以通过这种方式检查它们,将文件夹内容作为单独的存储库访问,仅在父存储库中存储一个引用。

    1) 您可以保持这种方式,如果您愿意,可以单独使用两个存储库,并通过引用链接。

    2)如果保留文件夹内容的git历史不重要,删除里面的.git文件夹会导致正常的git行为返回。

    3) 如果您想保留历史记录,您可以改用git subtree 将分支复制到您的新仓库中。这使得文件可以在本地编辑,并且仍然可以访问历史记录。


    以下命令会将另一个本地 repo 的当前分支的内容和历史记录复制到您当前的本地分支中。

    git subtree add --prefix=[newFolderName] [/path/to/other/repo] HEAD

    (将方括号部分替换为您选择的名称和路径)

    【讨论】:

      【解决方案4】:

      尝试git add 目录中的现有文件之一。 git status 它将像往常一样显示那里的所有文件。这对我有用。

      【讨论】:

        【解决方案5】:

        在我的例子中,有 .git 目录文件夹隐藏在子目录中。删除它为我解决了这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-12
          • 1970-01-01
          • 2016-10-05
          • 1970-01-01
          • 2018-08-15
          • 1970-01-01
          相关资源
          最近更新 更多