22

我有一个克隆的回购。有一个目录,称它为 a/b/c,它曾经是它自己的 repo,即有 a/b/c/.git/ 等。

现在我想要在主仓库中管理的文件。我不关心 a/b/c 中的历史,所以我删除了 a/b/c 中的 .git 目录

但问题是git status完全忽略了 a/b/c。我做不到git add。就好像我将路径放入 .gitignore (我没有)。

显然,在此之前,git 忽略其中包含 .git 目录的子目录是有意义的,但现在它如何知道其中的区别?

除了 .gitignore 和 .git/info/excludes 之外,是否还有其他地方列出了忽略文件?.git/config 文件中什么都没有?

有人问我 git status 说什么。不多:

/path/to/root/dir $ git status
# On branch fred
nothing to commit (working directory clean)

以及 git add 所说的。更少(无)

/path/to/root/dir $ git add a/b/c
4

6 回答 6

34

我不知道问题是什么或它是如何出现的(v。烦人),但这是我修复它的方法,以防其他人被卡住:

git rm --cached a/b/c
git commit -m "removed phantom a/b/c dir"
git add a/b/c
git commit -m "finally able to add a/b/c"

有趣的是git log a/b/c只列出了“终于能够...”提交。git show HEAD^(“删除的幻影......”提交说

-Subproject commit c311ccdc91c8be66019aa138d1c4af49a6b7a81c

所以它看起来像是在特别对待它。我将不得不阅读更多关于子项目和/或子模块的内容。

于 2012-05-25T18:56:24.003 回答
4

你有一个全局 gitignore 文件吗?(检查git config core.excludesfile

于 2012-05-25T17:42:59.807 回答
2

用于git add -f强制 git 添加它当前忽略的文件。

于 2018-03-06T21:35:15.023 回答
1

摘要:您的 .gitignore 文件(包括目录本身中的任何文件)是否忽略了目录包含的所有内容。如果是这样,Git 会将其视为空而不列出)

我有一个类似的问题。我发现被忽略的目录包含一个 .gitignore 文件(虽然不是 .git 目录)。删除它后,git 突然再次对它感兴趣,并将其列为git status.

当我通过将 .gitignore 的原始内容从较早的终端中粘贴回来来恢复它们时,git 再次没有看到或将目录列为未跟踪。

通过反复试验,我发现我可以从 .gitignore 中删除所有内容,但以下条目除外:

.factorypath
.springBeans

如果这两行都在 .gitignore 文件中,那么 git 看不到包含目录(它不是 git 存储库的根目录)。

这提出的问题比它对我的回答要多。

这是目录列表,但我看不到模式。

total 72
drwxr-xr-x@ 10 stephen  staff    320 30 Aug 19:04 .
drwxr-xr-x  17 stephen  staff    544 30 Aug 18:59 ..
drwxr-xr-x   2 stephen  staff     64 25 Jun 15:00 .apt_generated
-rw-r--r--   1 stephen  staff   1341 25 Jun 15:00 .classpath
-rw-r--r--   1 stephen  staff  18665 28 Jun 10:44 .factorypath
-rw-r--r--@  1 stephen  staff     25 30 Aug 19:12 .gitignore
-rw-r--r--   1 stephen  staff   1094 28 Jun 10:44 .project
drwxr-xr-x   7 stephen  staff    224 25 Jun 15:00 .settings
-rw-r--r--   1 stephen  staff    479 28 Jun 15:43 .springBeans
drwxr-xr-x   6 stephen  staff    192  2 Jul 12:41 target
于 2018-08-30T18:17:49.723 回答
0

看来空目录对于Git来说基本上是不存在的。如果目录中的所有文件都匹配 .gitignore 模式,那么 git 会将目录视为空。

我在带有 foo.tgz 文件的目录上发生了这种情况,并且在 repo 的根目录下,.gitignore 文件具有模式 *.tgz。非常令人沮丧的是,“git check-ignore”命令没有报告“嘿,菜鸟,我的目录看起来是空的”之类的东西。

下次试试这个:

git check-ignore strangely-ignored-directory/*

该输出可能会解开谜团。

于 2019-07-24T20:17:57.040 回答
0

刚才我出现了这个问题,因为我曾经在一个由 git 控制的顶级文件夹create-react-app中初始化一个应用程序:clienttodo

cd todo
npx create-react-app client --template typescript

在引擎盖下,这创建了client一个包含.git目录和文件的.gitignore文件夹。这就像一个 git 子项目。

当我通过git add -i源代码控制添加项目时,创建了一个奇怪的空目录指针,但没有内容。

我使用了命令

git rm --cached client

...它删除了 git 存储的奇怪的空目录/指针。但是当我尝试添加文件夹时,我收到了这条消息:

~/depot/todo $ git add client
warning: adding embedded git repository: client
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint:   git submodule add <url> client
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint:   git rm --cached client
hint: 
hint: See "git help submodule" for more information.

为了解决这个问题,我删除了 git 工件,然后我可以正常提交。

rm -Rf client/.git
rm -f client/.gitignore
git add client
git commit -m "Add missing client content"
于 2021-03-27T06:02:43.253 回答