【问题标题】:Update bare repo mirror preserving own branches更新裸仓库镜像,保留自己的分支
【发布时间】:2023-02-24 05:31:36
【问题描述】:

我有自己的 GIT 服务器,我在其中做了一个公共仓库的“裸克隆”。 让我们将 PUB 称为公共存储库,并将 LOC 称为我自己服务器上的裸克隆。 我使用 LOC 作为远程开发,创建我自己的 PUB 中不存在的分支。 然后我将我的分支推送到 LOC。

我想从 PUB 获取任何新内容到 LOC,但我不希望我自己的任何分支从 LOC 推送到 PUB。

我无法对 PUB 执行任何操作,因为它不在我的控制范围内。我可以改为对 LOC 进行任何操作。

为了我描述的目的,我有一个脚本,每晚运行,执行:

git --git-dir ${LOC_PATH} remote update --prune

如果我使用克隆 PUB 到 LOC

git clone --mirror <remote_repo>

然后在脚本执行时我自己的分支从 LOC 中删除。

如果我使用克隆 PUB 到 LOC

git clone --bare <remote_repo>

然后脚本似乎成功地将 PUB 提取到 LOC(这就是命令输出的建议);但是使用浏览器观察 LOC 内容或将 LOC 获取到我的 PC 我没有在日志中看到任何我知道存在于 PUB 中的新提交。

阅读其他 stackoverflow 问题的答案,似乎正确的命令是:

git --git-dir ${LOC_PATH} fetch --all

但目前我坚持使用git ... remote update ...,因为它应该执行隐式的fetch操作。

有什么解决办法自动地保持更新这种古怪的镜像形式?

我在看:

以及在互联网上找到的其他一些网站。显然我没有找到可行的解决方案。

【问题讨论】:

  • 你知道正确的方法是使用git fetch,但你继续做其他事情,知道这是错误的方法。现在你想让我们帮你……做什么?我是否正确地总结了您的问题,还是我完全弄错了?
  • 至于 --mirror 选项,它确实做了它应该做的事情:它丢弃了你的更改。从字面上看镜子遥控器。
  • @friedrich,当你说我在做其他事情时知道这是错误的方式,你就接近真相了。 :-) git-remote 的手册页报告说update 命令Fetch updates for remotes or ...。所以,就在从remote update 转到fetch 之前,我希望有人向我解释为什么update remote 没有拿来(这就是我所期望的)。

标签: git


【解决方案1】:

我用一些回购检查了我的机器并得出以下结论:

  • git remote update 确实执行隐式 fetch 和 ...
  • git fetch 也无法解决问题。

在上述任何操作之后,FETCH_HEAD 被创建并指向公共远程上的最新提交(在问题中称为 PUB)。由于您的本地仓库(称为 LOC)是一个裸仓库,因此无法在其上 mergepull。当来自 LOC pulling 时,最新的提交不存在。

应用FETCH_HEAD 的蛮力解决方案是在 LOC 上简单地使用 git reset --soft FETCH_HEAD。之后,您将看到所有新提交。

另一种解决方案(如the answer to How do I update my bare repo? 中所述)是首先使用git fetch *:*。我找不到将 *:* 传递给 git submodule update 的方法,但也许有一个。

【讨论】:

    猜你喜欢
    • 2023-02-12
    • 2021-05-27
    • 1970-01-01
    • 2018-05-26
    • 2013-11-25
    • 2022-11-25
    • 2011-05-26
    • 2019-06-19
    • 2017-03-30
    相关资源
    最近更新 更多