gpt4 book ai didi

git - 在仅存在于初始分支中的路径中 checkout git 分支

转载 作者:太空狗 更新时间:2023-10-29 14:39:26 25 4
gpt4 key购买 nike

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

这怎么可能?

最佳答案

如果我没理解错的话,这和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 不会让您首先删除它们。

关于git - 在仅存在于初始分支中的路径中 checkout git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com