首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >维护远程存储库的精确的深度副本

维护远程存储库的精确的深度副本
EN

Stack Overflow用户
提问于 2020-04-09 04:45:30
回答 1查看 160关注 0票数 1

我正在努力维护我的远程存储库的精确副本(备份)。我每天运行一个cron作业,试图从远程更新。我想按原样更新存储库,包括所有分支、标记等。我在git中读到了使用--mirror选项的文章,但它没有下载源代码。此外,我还需要添加或删除添加到远程的任何分支或标记。

考虑到我的遥控器名为“原产地”,我目前执行以下操作:

代码语言:javascript
运行
复制
// clone
git clone --mirror https://my_site.com/path/to/repo.git repo/.git
// track all remotes
for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done
git fetch --all
git pull --all

此方法工作正常,但每次运行时都尝试签出远程,而不是在找到新的远程分支时进行检出。此外,如果本地分支已从远程删除,则不删除该分支。我想标签也一样。

So...is有更好的方法来维护远程的深度本地副本/备份,动态地处理每次添加和删除吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 05:05:54

镜像克隆是一个裸露的克隆,其中所有的引用名都在每个git fetch上复制。因此,要更新镜像克隆,只需在镜像(通常为原点):git fetchgit fetch origin的远程上运行镜像,或者只运行git fetch,当镜像完成后,镜像就会被更新。

我读过关于在git中使用--镜像选项的文章,但是它没有下载源代码.

这句话对我来说毫无意义。Git没有“来源”:Git已经提交了。每个提交都有每个文件的完整和完整的快照。如果有提交,那么就有文件:不是源单数,而是每个文件(在每个提交中)。

我最好的猜测是你的意思是:镜像克隆人没有工作树。这是事实:这就是--bare的意思。没有工作树的原因是,如果要更新来自其他Git存储库的所有引用--包括所有分支名称--最好永远不要在这个存储库中做任何工作,因为每次从其他存储库更新这个存储库时,这个工作都会被销毁。

要使用镜像克隆,例如,要构建某物,您应该从它克隆到一个常规的(非镜像,非裸的)克隆。然后,您可以向这个常规克隆中添加一个额外的遥控器。如果您希望在这个常规克隆中进行新提交,然后将这些新提交发送到您创建镜像克隆的存储库,您将需要这个额外的远程,以便命名此另一个存储库所在的URL。

因此,一个比较完整的例子可能是:

代码语言:javascript
运行
复制
cd place-where-mirrors-live
git clone --mirror $URL mirror.git

其次是:

代码语言:javascript
运行
复制
cd place-to-work
git clone /path/to/place-where-mirrors-live/mirror.git working
cd working
git remote add upstream $URL
git checkout -b some-new-branch
... do work ...
git commit
git push upstream -u HEAD

其次是:

代码语言:javascript
运行
复制
(cd /path/to/where-mirrors-live/mirror.git && git fetch --prune)

要更新mirror.git中的镜像,请根据在working中进行的更新,然后使用git push发送到$URL的Git存储库。

如果在$URL上删除Git中的分支,则使用:

代码语言:javascript
运行
复制
git push upstream --delete some-branch

git fetch --prune步骤将删除镜像中的分支。您可能希望将fetch.prune配置为镜像中的true,或者在个人(--global) Git配置中配置,这样每个git fetch都是一个git fetch --prune

如果您对此非常老套的话,您可能希望使用git remote update --prune来更新镜像,但这不应该做git fetch --prune不会做的事情。(在遥远的过去,这个领域中存在一些Git bug:并非所有的修剪都适用于所有情况。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61114160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档