我有一个克隆的回购。有一个目录,称之为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
答案 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"