在我的项目中添加一个包含一些新文件的文件夹并执行 git status 时,git 只告诉我该文件夹而不是文件。当我添加 -A 时,只添加了文件夹,没有添加任何文件,当我推拉时,只有文件夹而不是文件通过。
我究竟做错了什么?
假设您有以下未跟踪的文件夹:
./fruits/
./fruits/apples.txt
./fruits/kiwis.txt
如果您想查看未跟踪文件夹中的文件:
git status -u
如果要暂存未跟踪的文件夹以及其中的文件:
git add fruits/
由于 git 只跟踪文件而不是文件夹,因此有关推送和拉取的行为是不可能的。给 git 添加一个空目录是不可能的。
然而,这git status
是预期的行为,因为文件夹中的所有文件都是新的,因为 git 尚未跟踪此文件夹中的任何文件。
另外,检查git school,挑战 7。如果你git status
在那里输入,你会看到这个输出,虽然octofamily
包含两个文件:
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# blue_octocat.txt
# octofamily/
# red_octocat.txt
这只是 UI 中的简化,您仍然可以这样做git add octofamily/baby_octocat.txt
(但是,不是在 git 学校,因为它不是真正的 git 客户端)。
随后git status
将反映这一点:
$ git status
# On branch master
# Changes to be committed:
# new file: octofamily/baby_octocat.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# blue_octocat.txt
# octofamily/momma_octocat.txt
# red_octocat.txt
请注意,它现在如何显示里面的文件octofamily
,因为现在该文件夹是已知的。
请注意,git 现在会将包含隐藏文件夹的.git
文件夹视为子模块。您可以通过这种方式检查它们,将文件夹内容作为单独的存储库访问,仅在父存储库中存储一个引用。
1)您可以保持这种方式,如果您愿意,只需单独使用两个存储库,通过引用链接。
2)如果保留文件夹内容的git历史不重要,删除.git
里面的文件夹会导致正常的git行为返回。
3)如果您想保留历史记录,您可以改为使用git subtree
将分支复制到新存储库中。这使得文件可以在本地编辑,并且仍然可以访问历史记录。
以下命令会将另一个本地 repo 的当前分支的内容和历史记录复制到您当前的本地分支中。
git subtree add --prefix=[newFolderName] [/path/to/other/repo] HEAD
(用您选择的名称和路径替换方括号部分)
尝试git add
目录中的现有文件之一。git status
它会像往常一样显示那里的所有文件。这对我有用。
就我而言,子目录中隐藏着 .git 目录文件夹。删除它为我解决了这个问题。