在仅存在于初始分支中的路径中检出git分支

时间:2013-04-20 01:10:47

标签: git

任何人都可以帮我理解我用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'现在神奇地消失了!

这怎么可能?

2 个答案:

答案 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了...所以对分支主机的更改在使用时无法删除目录......