如何删除拼写错误的目录?

时间:2014-05-19 10:06:47

标签: git

我已使用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
$

我做了什么:

  1. $ git rm -rf *删除所有文件/目录
  2. git checkout -- *获取所有文件,但 .目录
  3. 享受

    $ git status [...] 删除:./ README.md

  4. 谢谢!

2 个答案:

答案 0 :(得分:1)

...是由Linux文件系统创建的自动文件夹。 Git既不能创建也不能删除它们。实际上,Linux会为那些不支持它们的文件系统模拟这些文件夹。

因此./README.mdREADME.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没有跟踪空目录。