2

私が 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

OK、ここに癖があります!

$ cd a_dir
$ pwd
/tmp/git-test/a_dir
$ git checkout master
Switched to branch 'master'
$ pwd
/tmp/git-test/a_dir

なんと!? このパスはこのブランチには存在しません!

$ ls
total 0

動作lsするようです...

$ cd ..
$ ls
world

ディレクトリ `a_dir' は魔法のように消えてしまいました!

これはどのように可能ですか?

4

2 に答える 2

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 では、そもそもそれらを削除することはできません。

于 2013-04-20T01:13:49.110 に答える
0

ディレクトリにcdされているため、ディレクトリがロックされているようです...したがって、ブランチマスターへの変更では、使用中のディレクトリを削除できません...

于 2013-04-20T01:14:00.840 に答える