我已使用stackedit
从我的项目编辑了README.md。
当我在git上选择“发布”(然后直接提交)时,我将路径设置为:
./README.md
它起作用......但不像我预期的那样。实际上,它在我的项目中创建了一个.
存储库(我想里面有文件)。
但现在我无法删除它。
我已将问题报告给stackit(请参阅https://github.com/benweet/stackedit/issues/405),但没有任何成功。
有什么想法吗?
以下是git rm
的输出:
$ cd ~/mgd
$ git rm '.'
fatal: not removing '.' recursively without -r
$ git rm -r '.'
rm '.gitignore'
rm 'LICENSE'
rm 'README.md'
rm 'TODO.md'
rm 'ez_setup.py'
rm 'setup.py'
rm 'src/mgd/__init__.py'
rm 'src/mgd/readers/__init__.py'
rm 'src/mgd/readers/manga_reader.py'
rm 'src/mgd/readers/registre.py'
rm 'src/mgd/store.py'
rm 'src/mgd/util.py'
rm 'test/mgd/test_store.py'
$
.
目录未被移除......
ls输出:
$ ls
LICENSE README.md TODO.md ez_setup.py setup.py src test
$ ls -al
total 37
drwxr-xr-x 1 abz Administ 4096 May 19 11:56 .
drwxr-xr-x 1 abz Administ 32768 May 19 11:55 ..
drwxr-xr-x 1 abz Administ 4096 May 19 11:56 .git
-rw-r--r-- 1 abz Administ 544 May 19 11:56 .gitignore
-rw-r--r-- 1 abz Administ 11323 May 19 11:56 LICENSE
-rw-r--r-- 1 abz Administ 1574 May 19 11:56 README.md
-rw-r--r-- 1 abz Administ 387 May 19 11:56 TODO.md
-rwxr-xr-x 1 abz Administ 15757 May 19 11:56 ez_setup.py
-rwxr-xr-x 1 abz Administ 1276 May 19 11:56 setup.py
drwxr-xr-x 3 abz Administ 0 May 19 11:56 src
drwxr-xr-x 3 abz Administ 0 May 19 11:56 test
$
我做了什么:
$ git rm -rf *
删除所有文件/目录git checkout -- *
获取所有文件,但不 .
目录享受
$ git status [...] 删除:./ README.md
谢谢!
答案 0 :(得分:1)
.
和..
是由Linux文件系统创建的自动文件夹。 Git既不能创建也不能删除它们。实际上,Linux会为那些不支持它们的文件系统模拟这些文件夹。
因此./README.md
和README.md
是同一个文件。您可以使用cp ./README.md README.md
<强> [编辑] 强>
现在Git是一个略有不同的野兽,因为它在.git/objects
内模拟了它自己的文件系统。与此同时,Git确实与操作系统接口。所以,如果你告诉Git删除./README.md
,那么Git会注意到“哦,有文件夹”所以它会首先“cd”到.
(真实文件系统中的那个,而不是里面的那个)然后它将删除正确的README.md
。
我们需要的是一种告诉Git的方法:“只需在虚拟文件系统中执行此操作即可。”为此,您需要深入研究Git internals。
在链接后面,您将找到内部结构如何工作以及如何直接访问树和对象的说明,绕过将混合内部和外部路径的前端命令。
当解开混乱时,您将从提交对象(explained here)开始,因为您知道它的散列(15a0ec6aee0ae08764623a304e3fc5ce96cef821
)并且它包含树的散列。树对象可能包含非法名称。
知道用于创建这种非法文件名的命令stackedit
会很有趣。也许它正在使用普通的Git前端命令
答案 1 :(得分:0)
假设您正在讨论的点目录位于此repo,那么我认为您应该git rm -fr "\\.
然后手动删除该目录(如果仍然存在):rm "\\."
因为git没有跟踪空目录。