git - git mirror 没有历史记录,但有标签
问题描述
出于某种原因,我想创建一个没有历史但保留标签的项目的 git 镜像。
例如:
History: A-B-C-D-E-F-G-H
| | |
Tags: 1 2 3
镜像此存储库后,它应该看起来像
History: B-E-G
| | |
1 2 3
也许还需要从[B|E|G]
其他一些消息中创建,最可能与标签相同(如果需要)。
有什么方法可以直接使用 git 执行此操作,还是我必须编写脚本?我的想法是,从最近的标签开始,我只是将历史重新定位到下一个标签。在两个标签之间合并时这也可能吗?
解决方案
通常,一次移动多个引用的最简单方法(即使这只是一个分支并且该分支可以访问的标签)是使用git filter-branch
.
首先,您将使用--commit-filter
“跳过”没有标签的提交。您需要一个可以判断脚本是否有标签的脚本。你可以使用类似的东西
git describe --exact-match --tags
如果找到匹配项,它将返回 0(并在标准输出上打印标签名称);因此您的过滤器可以有条件地推迟到commit-tree
或skip-commit
取决于是否找到标签。
然后,您需要添加 a--tag-name-filter cat
或类似的东西以使标签实际移动。
有关详细信息,filter-branch
请参阅https://git-scm.com/docs/git-filter-branch
这有点像仔细编写一堆变基操作的脚本,用一种自动化的方式来映射标签。它工作得很好,因为您不想更改TREE
您保留的提交的内容 (),因此实际上并不需要主要的变基机制。
推荐阅读
- python - 会话 cookie 太大烧瓶应用程序
- c# - 如何在 WPF 中使用数据源从菜单中获取菜单项
- linux - 在 github 上使用 cmake 进行共享库版本控制
- ios - 任何人都知道这个“未知的类名'CBCentralManagerDelegate';?” 错误?
- php - 如何使用 PHP 对 json 数据进行分页
- javascript - 设置 xAxis 最小值和最大值时不显示 Highstock 数据
- oracle - 仅在新插入为 NULL 时将表属性更改为默认值
- c++ - 忽略特定代码的 weffc++ 初始化列表顺序警告
- css - 粘贴菜单时,CSS 粘性菜单链接不起作用
- jsviews - 如何为 {{selectmenu}} 标签中的选项指定自定义渲染模板