【发布时间】:2013-01-17 15:12:02
【问题描述】:
在我的项目中添加一个包含一些新文件的文件夹并执行 git status 时,git 只告诉我该文件夹而不是文件。当我添加 -A 时,只添加了文件夹,没有添加任何文件,当我推拉时,只有文件夹而不是文件通过。
我做错了什么?
【问题讨论】:
-
您的文件是否与 .gitignore 文件中的模式匹配?
-
不,这正是丹尼尔在下面所说的。
在我的项目中添加一个包含一些新文件的文件夹并执行 git status 时,git 只告诉我该文件夹而不是文件。当我添加 -A 时,只添加了文件夹,没有添加任何文件,当我推拉时,只有文件夹而不是文件通过。
我做错了什么?
【问题讨论】:
假设您有以下未跟踪的文件夹:
./fruits/
./fruits/apples.txt
./fruits/kiwis.txt
如果您想查看未跟踪文件夹中的文件:
git status -u
如果您想暂存未跟踪的文件夹,以及其中的文件:
git add fruits/
【讨论】:
由于 git 只跟踪文件而不是文件夹,所以关于推拉的行为是不可能的。给git添加一个空目录是不可能的。
对于git status,这是预期行为,因为文件夹中的所有文件都是新文件,因为 git 尚未跟踪此文件夹中的任何文件。
另外,请检查git school, challenge 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 目录文件夹隐藏在子目录中。删除它为我解决了这个问题。
【讨论】: