当使用git clone --mirror命令时,实际的文件在哪里?

13

我在Github上有一个项目,想要在我的服务器上进行镜像。

我尝试了以下命令:git clone --mirror git@github.com:user/repo.git

然后,在 repo.git 目录下,我看到以下文件结构(例如,运行 ls 命令的输出结果):

FETCH_HEAD branches/ description info/ packed-refs HEAD config hooks/ objects/ refs/

所以我的问题是:我的文件在哪里! 看起来有一堆与Git相关的东西,但我就是找不到我编写的代码。我是不是漏掉了什么明显的地方?

顺便说一下,git status 返回 fatal: This operation must be run in a work tree,但是 git branch 返回分支信息。很奇怪。

1个回答

16
当你使用git clone --mirror命令时,它会生成一个裸库(bare repository),所以没有工作区。我更经常使用--mirror选项为其他人提供只读副本(clone)。听起来你可能应该省略 --mirror 选项。
git clone 手册页 中可以看到:

--mirror
设置对源代码库的镜像。这意味着使用了--bare选项。相比于--bare--mirror不仅将源的本地分支映射到目标的本地分支,它还将所有引用(refs)(包括远程跟踪分支、注释等)都映射并设置refspec配置,使得在目标代码库上执行git remote update命令时,所有这些引用都将被覆盖。

需要明确的是,裸的镜像库确实有从其克隆而来的整个代码库内容,但是它没有可以查看这些文件的工作区(work area)。如果你从镜像克隆(git clone /path/to/local/mirror_repo.git),你将会在那个新的非裸库(repo)中得到工作树(work tree)。

我没有意识到裸仓库没有工作区。我可能不够熟悉 Git 的复杂性,无法正确理解文档中的这一部分。谢谢。 - cpa
1
没错,一个裸仓库非常接近于普通仓库中 .git 目录内的内容。 - Mike Seplowitz
这很奇怪,没有一种方法可以将所有东西都拉下来吗?包括完整的镜像历史记录、代码库和工作树? - eddyizm
@eddyizm,“一切”都在正常克隆的工作区的.git文件夹中。你必须费些心思来做一些与常规不同的事情,比如浅层克隆。尝试执行git log以查看历史记录,或执行git branch -a以查看所有本地和远程分支。 - Kevin Tindall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接