为什么 git clone 有时会创建一个 .git 目录,有时却不会?

Why does git clone sometimes create a .git directory, and sometimes not?

前面至少有 3 个问题解释了如何在没有 .git 目录的情况下克隆存储库:

从这些问题来看,您似乎不能只 运行 git clone 并在没有 .git 目录的情况下克隆存储库。

然而,在我克隆的大多数存储库中,例如下面命令中的存储库,没有创建 .git 目录。

git clone https://github.com/scotch-io/scotch-box.git

什么决定直接 git clone 命令是否创建 .git 目录?

您确定要在正确的位置寻找 .git 吗?当你像 git clone https://github.com/scotch-io/scotch-box.git 这样的克隆时,repo 实际上是在目录 scotch-box 中克隆的,因此 .git 将位于 scotch-box/.git

另一方面,做:

git 克隆 https://github.com/scotch-io/scotch-box.git .

注意末尾的 . - 将克隆到当前文件夹(如果它还不是 git 存储库)

总是 .git 目录在 git clone 之后。没有例外。如果您看不到它,则它会被隐藏(如何发生取决于您的操作系统。linux 上的 ls 不会显示以点开头的 files/dirs。您必须使用 ls -a.)

.git 目录是必不可少的,因为它包含 git 使用的所有文件和信息。

这是您提到的 git-clone 之后发生的事情:

/tmp % git clone https://github.com/scotch-io/scotch-box.git
Cloning into 'scotch-box'...
remote: Counting objects: 83, done.
remote: Total 83 (delta 0), reused 0 (delta 0), pack-reused 83
Unpacking objects: 100% (83/83), done.
Checking connectivity... done.
/tmp % cd scotch-box 
/tmp/scotch-box (git)-[master] % la
total 40K
drwxr-xr-x 4 t t 4.0K 12. Aug 14:10 .
drwxrwxrwt 8 root  root   12K 12. Aug 14:10 ..
drwxr-xr-x 7 t t 4.0K 12. Aug 14:10 .git
-rw-r--r-- 1 t t   18 12. Aug 14:10 .gitignore
-rw-r--r-- 1 t t 7.4K 12. Aug 14:10 README.md
-rw-r--r-- 1 t t  480 12. Aug 14:10 Vagrantfile
drwxr-xr-x 2 t t 4.0K 12. Aug 14:10 public