【问题标题】:How to update a git clone --mirror?如何更新 git clone --mirror?
【发布时间】:2011-09-03 06:12:47
【问题描述】:

我创建了一个 git 存储库来镜像一个实时站点(这是一个非裸 git 存储库):

git clone --mirror ssh://user@example.com/path/to/repo

现在,要使用来自其远程源的所有更改更新此镜像克隆,我必须使用哪些命令?

我希望更新所有内容:提交、引用、挂钩、分支等。

谢谢!

【问题讨论】:

    标签: git mirror git-clone git-remote git-fetch


    【解决方案1】:

    关于提交、引用、分支和“等等”,Magnus 的回答很有效 (git remote update)。

    但不幸的是没有办法clone/mirror/update钩子,如我所愿...

    我发现了这个关于克隆/镜像钩子的非常有趣的线程:

    http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

    我学到了:

    • 挂钩不被视为存储库内容的一部分。

    • 还有更多数据,比如.git/description 文件夹,它不会被克隆,就像挂钩一样。

    • hooks 目录中出现的默认挂钩来自TEMPLATE_DIR

    • git 上有这个有趣的template 功能。

    因此,考虑到我镜像的用途(仅用于其他克隆的备份 + 源),我可以忽略这个“克隆钩子的东西”,或者采用 rsync 策略。

    好吧...我将忘记钩子克隆,并坚持git remote update方式。

    • Sehe 刚刚指出,不仅“钩子”不受 clone / update 进程管理,而且还有 stashes、rerere 等...所以,对于严格的备份,rsync 或等效确实是要走的路。因为在我的情况下这不是必需的(我可以负担得起没有钩子、储藏室等),就像我说的那样,我会坚持使用remote update

    谢谢!改进了一些我自己的“git-fu”... :-)

    【讨论】:

      【解决方案2】:

      请看这里:Git doesn't clone all branches on subsequent clones?

      如果你真的想通过拉分支而不是push --mirror来实现这一点,你可以看看这里:

      "fetch --all" in a git bare repository doesn't synchronize local branches to the remote ones

      此答案提供了有关如何相对轻松地实现该目标的详细步骤:

      【讨论】:

      • push 对我来说不是一个选择,因为我需要在接收端(克隆所在的位置)进行操作; pull 也不是一个选项,因为镜像存储库是一个裸存储库(没有工作树,因此没有“拉”) - 似乎git remote update 确实做到了这一切(比引用的答案容易得多)......无论如何, 谢谢!当然,链接的问题/答案中包含有价值的信息。
      • 好的,我的意思是按通常的说法拉。推拉技术。除了荒谬的“在客户端主动从远程获取数据”之外,几乎没有其他词不会配音对 git 或 DVCS 系统有意义的词:) 第二个链接将提供您想要的详细信息。请注意,“git remote update”实际上在没有提到的额外操作的情况下保持“镜像”状态
      • hmm...抱歉(HTH)-似乎通过原始 repo 文件夹的简单“rsync”更容易实现“绝对”镜像...不是我想要的,但是..我只是做了一些测试......似乎没有任何东西可以复制钩子 - 我对此特别感兴趣......
      • 仅供参考,这个镜像的目的是这些,只有:1)如果原始回购服务器上的数据丢失,我可以从那里恢复; 2)其他人可以从中克隆并获得本地工作存储库的地方,而无需访问原始源存储库
      • 如果你想要钩子和所有东西,gitosis 可能(不太记得)有你需要的东西,但在这种情况下我会选择rsync。另外,我假设您忘记了 stash(参见 here)和 rerere 信息...?
      【解决方案3】:

      这是你需要在镜像上执行的命令:

      git remote update
      

      【讨论】:

      • @Magnus Skog:太好了。谢谢!这就是全部吗?我是否需要另一个命令,例如git fetch?还是 git remote update 一个人就能搞定这一切?
      • 我也想知道 git fetch 的区别是什么。
      • @Thorbjörn(你必须使用瑞典语 ö :)):Git fetch 只是使用来自远程的远程引用更新你的存储库。此命令更新镜像存储库上的所有内容
      • 这是一个很好的答案,可以解释更多:stackoverflow.com/questions/3959924/…
      • 'git remote update --prune' 会做这一切,但从原始存储库中删除分支时会删除它们。
      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2017-05-30
      • 2019-04-25
      • 2021-11-17
      • 2020-10-10
      相关资源
      最近更新 更多