任何人都可以帮我理解我用git找到的这个怪癖吗?
以下是重现这个怪癖的方法:
$ mkdir git-test && cd git-test
$ git init
Initialized empty Git repository in /tmp/git-test/.git/
$ echo hello > world
$ git add world
$ git commit -m'first commit'
[master (root-commit) 5f68103] first commit
1 file changed, 1 insertion(+)
create mode 100644 world
很酷,到目前为止;现在让我们分开:
$ git checkout -b a_branch
$ mkdir a_dir
$ echo foo > a_dir/bar
$ git add a_dir/bar
$ git commit -m message
[a_branch (root-commit) 2fbef71] message
1 file changed, 1 insertion(+)
create mode 100644 a_dir/bar
好的,这就是怪癖!
$ cd a_dir
$ pwd
/tmp/git-test/a_dir
$ git checkout master
Switched to branch 'master'
$ pwd
/tmp/git-test/a_dir
WTF!?这条路不存在于这个分支中!
$ ls
total 0
即使ls
似乎也有效......
$ cd ..
$ ls
world
目录`a_dir'现在神奇地消失了!
这怎么可能?
答案 0 :(得分:4)
如果我理解正确,这与git没什么关系。
某些进程(在本例中为git分支交换机)正在删除您当前的工作目录。如果您rmdir
当前的工作目录,也会发生同样的事情。
$ cd /tmp
$ mkdir test
$ cd test
$ rmdir ../test/
$ pwd
/tmp/test
$ ls /tmp/test
ls: /tmp/test: No such file or directory
删除打开的文件时可以看到类似的效果:它们将从文件系统中消失,但打开它们的程序仍然可以访问它们,并且只有在程序关闭后才会回收磁盘空间。请注意,UNIXy系统和Windows之间的行为完全不同。 Windows不会让你删除它们。
答案 1 :(得分:0)
似乎目录已被锁定,因为你已经被cd了...所以对分支主机的更改在使用时无法删除目录......