【问题标题】:Need for a bare repo in GIT在 GIT 中需要一个裸仓库
【发布时间】:2013-01-08 12:06:33
【问题描述】:

在阅读教程时,我不断听到我需要创建一个称为裸存储库的东西来共享存储库中的所有文件。

我还听说一个裸仓库不包含任何 worfiles。

如果它没有任何工作文件,那么其他用户将在他们的本地计算机上克隆什么???

我目前在我的 linux 服务器中有一个目录,我需要在几个将通过 eclipse ide 访问的用户之间共享该目录。

谁能用简单的语言解释上面突出显示的问题。

【问题讨论】:

标签: eclipse git version-control egit


【解决方案1】:

在阅读教程时,我不断听到我需要创建一个称为裸存储库的东西来共享存储库中的所有文件。

当您git push 到远程存储库时,您可以覆盖working directory 中的文件。为避免这种情况,您可以使用bare 存储库,它甚至没有working directory

但是,因为没有working directory,你不能在bare repo 中工作,你只能通过pushpull 使用它。这使它成为多个用户的“收集点”或“协作存储库”的理想选择——这就是为什么git 教程说要为服务器使用bare 存储库。

一个普通的git repo 看起来像这样:

my-repository/
    .git/
        COMMIT_EDITMSG 
        ORIG_HEAD
        description    
        index
        objects
        FETCH_HEAD     
        branches       
        gitk.cache     
        info           
        refs
        HEAD           
        config         
        hooks          
        logs
    file1
    file2

my-repositoryworking directory,包含您处理的文件file1file2 等。所有git 数据都存储在.git 文件夹中。

bare 存储库中,您没有工作文件夹。您所拥有的只是 .git 文件夹的内容,存储在该存储库的顶层:

my-bare-repository/
    COMMIT_EDITMSG 
    ORIG_HEAD
    description    
    index
    objects
    FETCH_HEAD     
    branches       
    gitk.cache     
    info           
    refs
    HEAD           
    config         
    hooks          
    logs

这是其他用户克隆的内容。

【讨论】:

  • 感谢您的回复。我明白了您的观点。我还有另一个目录,其中包含我希望其他人签出的实际文件。现在我需要做什么?
  • @gautamvegeta:(1) 将这些文件提交到存储库。 (2) 将提交推送到公共存储库。 (3) 告诉其他用户从公共存储库中克隆/拉取。
  • 我听说我需要接收后挂钩它们是什么以及如何设置它们。在这里我听说我可以使用这个接收后挂钩克隆包含工作文件的实际存储库通过这个裸仓库。
  • @gautamvegeta:请停止在多个地方发布同一个问题。
  • @gautamvegeta 这不再是关于这个问题 - 阅读this book。它真的帮助我了解了git。它有漂亮的图片。如果您有关于 post-hooks 等的具体问题,请在单独的问题中提问 :)
【解决方案2】:

我还听说裸仓库不包含任何工作文件。

是的。

远程仓库通常是一个裸仓库——一个没有工作目录的 Git 仓库。所有数据都存储在.git 目录中,不需要工作目录。这只是一个协作点。

如果它没有任何工作文件,那么其他用户将克隆什么 在他们的本地机器上???

.git 目录中的数据将被克隆。

【讨论】:

  • 如果我希望用户通过这个裸仓库查看包含实际内容的实际文件夹,我需要做什么。
  • @gautamvegeta:从裸存储库和非裸存储库克隆的方法相同。用户不需要特别说明,普通的git clone 两者都可以。
  • 我听说我需要接收后挂钩它们是什么以及如何设置它们。在这里我听说我可以使用这个接收后挂钩克隆包含工作文件的实际存储库通过这个裸仓库。
  • @gautamvegeta:为什么需要接收后挂钩?
  • 我觉得我需要创建一些称为 post-receive 挂钩的东西,它将连接裸仓库和包含工作文件的实际仓库。因此,当其他用户将他们的更改推送到项目时,它会反过来更新实际存储库。
猜你喜欢
  • 2017-03-12
  • 2011-09-07
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多