我有一些历史重写要做,为此我想保留原始树的完整性。然而,重写的树应该复制之前使用的标签。有没有比例如手动选项更少在分支名称前加上标签名称?git:有没有像每分支标签?
7
A
回答
14
不,没有什么像git中的每分支标记。所有分支和标签都只是Git中的参考类型; ref只是一个指向修订历史记录中特定修订版的名称。举例来说,如果你有devel
和master
分支机构,并v1.0
和v2.0
标签,引用会是这个样子:
refs/heads/devel -> * /\ * * <- refs/heads/master | | * * \/ * <- refs/tags/v2.0 | * | * <- refs/tags/v1.0 | *
正如你所看到的,没有什么搭售这些标签的任何分支机构;实际上,所有这些标签都包含在master
和devel
分支中。通过查看您的.git
回购库,您可以看到实际上没有更多的标签结构。它只是一个包含引用.git/refs
内提交的SHA-1或.git/packed-refs
中的一行的文件(标签经常位于packed-refs
中,因为它们不经常更改,而分支通常是git/refs
内的单独文件)。
所以,如果你想重写历史,并保留旧的标签,你将不得不重写你的标签名称。正如sehe指出的,这是通过使用git filter-branch --tag-name-filter
完成的。
1
您可以命名空间的标签变成你想要的标签(种)的分支命名的目录属于,而且不必进行手动:
git-thisBranch() { git symbolic-ref --short HEAD; }
git-localTag() {
local name="$1"; shift;
git tag $(git-thisBranch)/"$name" "[email protected]";
}
相关问题
- 1. git分支(没有分支)
- 2. 有没有办法使用git-svn镜像Git repo到SVN并让Git标签/分支变成SVN标签/分支?
- 3. Git标签与分支
- 4. 将git分支转换为git标签
- 5. git:开关分支没有分离头
- 6. 开关git分支没有文件签出
- 7. Git:新分支没有被推动
- 8. 没有历史的git分支
- 9. 没有提交的Git结帐分支
- 10. Git fetch没有下载远程分支
- 11. 没有结帐分支的Git diff
- 12. 标签vs git中的分支
- 13. 从clearcase标签合并到git分支
- 14. Git标签和分支版本是?
- 15. 分支没有分支
- 16. git rebase分支与所有子分支
- 17. git - “调试”分支,合并“修复”分支没有“调试”
- 18. Git:在检出新分支之前没有提交分支
- 19. 是否有可能在git中的多个分支上有版本标签?
- 20. 没有开发分支的特性分支模型的Git分支策略
- 21. 没有标签
- 22. github回购克隆,但没有标签/分支重新创建?
- 23. 为什么CVS中的分支标签没有向前移动?
- 24. 远程git分支与`git branch -r`没有显示?
- 25. 为什么在git获取后没有看到git分支?
- 26. 标签git版本从构建 - 标签没有在git中找到
- 27. 有没有办法查看你的git分支的映射?
- 28. 使用`git checkout -b`有和没有分支的起点
- 29. 有没有办法输出以前的git分支名称?
- 30. 有没有更好的方法来恢复git-svn分支?
......然后将其用'git filter-branch ..... --tag-name-filter cat'完成# – sehe 2011-04-18 14:41:45
@sehe:谢谢,这让我想起改进[这个脚本](http://stackoverflow.com/questions/4278264/git -split-历史的几家,文件,到-A-独立的分支/ 4283970#4283970) – 2011-04-18 14:55:45