【发布时间】: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操作。
有什么解决办法自动地保持更新这种古怪的镜像形式?
我在看:
- Mirror git repo into new branch
- How do you update a bare repo from a remote source using git
- How to keep all branches and tags in sync in a fork or mirror repo?
- How do I update my bare repo?
以及在互联网上找到的其他一些网站。显然我没有找到可行的解决方案。
【问题讨论】:
-
你知道正确的方法是使用
git fetch,但你继续做其他事情,知道这是错误的方法。现在你想让我们帮你……做什么?我是否正确地总结了您的问题,还是我完全弄错了? -
至于
--mirror选项,它确实做了它应该做的事情:它丢弃了你的更改。从字面上看镜子遥控器。 -
@friedrich,当你说我在做其他事情时知道这是错误的方式,你就接近真相了。 :-)
git-remote的手册页报告说update命令Fetch updates for remotes or ...。所以,就在从remote update转到fetch之前,我希望有人向我解释为什么update remote没有拿来(这就是我所期望的)。
标签: git