如何生成.git*文件*以及它是如何构造的?

如何生成.git*文件*以及它是如何构造的?,git,github,Git,Github,这不是关于隐藏的.git文件夹的问题 我的理解 我的大部分Git工作通常使用GitHub。使用远程服务器时,我可能会将推送和获取配置为: $git remote -v origin git@github.com:<my_org>/<my_repo>.git (fetch) origin git@github.com:<my_org>/<my_repo>.git (push) $git remote-v 起源git@github.com:/.g

这不是关于隐藏的
.git
文件夹的问题

我的理解 我的大部分Git工作通常使用GitHub。使用远程服务器时,我可能会将推送和获取配置为:

$git remote -v
origin  git@github.com:<my_org>/<my_repo>.git (fetch)
origin  git@github.com:<my_org>/<my_repo>.git (push)
$git remote-v
起源git@github.com:/.git(获取)
起源git@github.com:/.git(推送)
这里的问题是关于
/.git
文件的

我知道它“包含”了存储库所需的所有机制:文件、索引、钩子、引用等。我一直在“想象”它是一个层次化的zip文件,本质上就是整个存储库,如果我将其全部压缩,它将在本地显示

我的问题
  • 我的理解正确吗?
    .git
    文件是否只是存储库的一个zip文件?我如何生成它
  • 每次我
    git init
    git push
    或者每次我
    git clone
    时,git都做些什么来构造/解构它?(这真的只是一个拉链和解扣?)
  • 有没有办法自己创建这个结构?例如,GitHub是如何做到这一点的(或多或少)?
    • 我可以使用相同的
      gitinit-g
      命令或类似的东西来创建
      .git
      文件吗
  • 这个
    .git
    文件的文档在哪里(除了上面的链接)?
    • 我确实搜索了一会儿,但是
      “.git”
      上的所有内容都显示了隐藏的目录,而不是文件
  • 如果我在我的机器上创建这个
    .git
    文件,那么其他人可以将我的机器用作远程存储库吗?
    • 换句话说,我将如何创建一台机器和一个文件/文件夹结构,以便像其他人的远程存储库一样工作

  • 否:
    repo.git
    它是一个表示裸存储库的文件夹(没有工作树,只有repo文件)

    压缩/解压缩只发生在,然后在克隆/拉/推期间传输


    如果您只想构建一个“zip”文件,请参阅,它将生成一个完整的Git repo作为一个文件。

    您的问题似乎很广泛,但如果您只想将存储库复制到一个新位置,则只需复制
    .Git
    文件夹,仅此而已..Git是一个目录。默认情况下,它是裸git存储库的名称
    gitinit--bare.git
    正如@ElpieKay所说,它不是一个文件,而是一个目录。裸存储库
    foo.git
    的内容与非裸存储库
    foo
    .git
    的内容匹配,除了
    config
    文件将
    core.bare
    设置为
    true
    。(但是从现有的非裸克隆设置它的最好方法是
    git clone--bare
    ,也许还可以设置
    core.shared
    )要将它用作服务器,您的机器必须允许某种访问,无论是ssh、http,还是通过
    git://
    协议,或者其他什么,我应该说
    core.sharedepository
    (我已经很久没有设置Git服务器了)。感谢大家提供的信息,但我认为你们误解了我的观点。在某种程度上,
    .git
    是一个文件,而不是一个目录。我在下面问题和VonC答案中的链接可能会帮助您更好地理解。(当然,还有很多我不明白的地方,因此我提出了我的问题。但我确实明白,这在某种程度上也是一个类似存档的文件,而不仅仅是一个目录结构。)关于裸机回购:,