git忽略了一个目录,它就像它不存在一样

时间:2012-05-25 17:41:11

标签: git

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

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

但问题是git status完全忽略了a / b / c。我不能git add它。就好像我把路径放进了.gitignore(我没有)。

显然之前,git忽略了一个带有.git目录的子目录是有意义的,但现在它是如何知道差异的呢?

除了.gitignore和.git / info / excludes之外,是否存在其他忽略文件的地方? .git / config文件中没有任何内容?

我被问到git状态是什么意思。不多:

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

git补充道。更少(没有)

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

6 个答案:

答案 0 :(得分:24)

我不知道问题是什么或它是如何产生的(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

所以看起来它正在特别对待它。我将不得不阅读有关子项目和/或子模块的更多信息。

答案 1 :(得分:4)

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

答案 2 :(得分: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

答案 3 :(得分:0)

使用public class Mounds { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); String s = new String(); for (int i = 0; i < 1000; i++) { s = " " + i; sb.append(s); } // done with loop } } 强制git添加当前忽略的文件。

答案 4 :(得分:0)

似乎对于Git基本上不存在空目录。如果目录中的所有文件都匹配.gitignore模式,则git会将目录视为空目录。

我在带有foo.tgz文件的目录上发生了这种情况,在回购的根目录下,.gitignore文件的格式为* .tgz。非常令人沮丧的是,'git check-ignore'命令没有报告类似“嘿,菜鸟目录对我来说是空的”之类的信息。

下次尝试此操作:

git check-ignore strangely-ignored-directory/*

该输出可能会解开谜团。

答案 5 :(得分:0)

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

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 artifacts,然后我可以正常提交。

rm -Rf client/.git
rm -f client/.gitignore
git add client
git commit -m "Add missing client content"