rya*_*zec 7 git version-control git-tag
我正在寻找将git分支转换为git标签的最佳和最安全的方法.当手动移植到svn存储库时,我基本上复制了我们所有的分支,并且我们为每个次要版本(1.1,1.2,1.3)都有一个分支,这一点可能并不是最好的方法,但为了速度,我对分支比当时的标签更舒服.我现在有分支1.5,1.6,1.7,1.8但是因为我们在任何给定时间只有1个版本的代码部署,我可能只需要最后一个版本作为分支,因为任何热修复需要进入该版本部署.所以我正在寻找将git分支转换为git标签的最佳方法.我想我有办法,但确定它有多好.
到目前为止我所做的是每个我想转换为标签的分支,我已经检查过以确保那些不在master分支中的分支中没有提交,所以我做了:
git log 1.5 ^master
git log 1.6 ^master
git log 1.7 ^master
Run Code Online (Sandbox Code Playgroud)
所有这些都没有给我任何回报,我认为这意味着这些分支中的所有提交都存在于master中.我这样做是因为我假设如果那些分支中的提交不在master中,我会在将分支转换为标记时丢失它们,因为标记只是一个提交而不是开发线的"指针".看起来很好,我的假设是我只需做:
git tag 1.5v 1.5
git tag 1.6v 1.6
git tag 1.7v 1.7
Run Code Online (Sandbox Code Playgroud)
然后我只需要在本地删除分支并将这些更改推送到远程存储库.这是将git分支转换为git标记的最佳方法吗?
我还有一个问题是,如果有人从1.7开始创建一个分支(没有人应该这样做)并且他们拉出删除该分支的更改,他们是否能够将这些更改合并到另一个分支(比如master)或者那种打破他们创建的分支?这是一个不应该发生的情况,因为除了最后一个版本之外没有人应该创建任何分支版本的分支,在这种情况下为1.8,但是人们并不总是正确地遵循过程,所以我想确保有一种方法如果它发生,解决这个问题.
简短的回答:这不是问题.并按照你建议的方式创建标签是可以的,虽然我建议你使用-m选项来创建带注释的注释标签(请参阅参考资料man git-tag),因为这将创建一个"第一类"标签,将由其他人使用而git describe无需额外的参数.
答案很长: 远程分支不会直接影响本地分支.如果我从公共仓库的分支或标签创建分支,当您删除该分支,并且我获取您的仓库时,我会看到您的分支已经消失,但我的分支仍在我的仓库中完成.
Brances只是git repo中提交的符号名称,当您提交HEAD并且您正在处理的分支指向新提交时.标签也是提交的符号名称,但这不可更改(您可以删除它,但不能更改),因此它指向历史记录中的固定位置,而分支指向移动磁头历史上的一条线.由于git中的提交有零个,一个或多个父提交(初始提交为零,一个用于正常提交,一个用于合并),即使从远程删除原始分支或标记,您的本地仓库仍然具有指向您本地分支的指针,从中您可以找到一个共同的祖先(假设分支首先是相关的),因此您仍然可以将对任何分支所做的更改合并到master中.
从svn到git,起初可能有点令人困惑.听起来你仍然在用svn术语思考,让一切更加混乱.我认为如果你认为git更像是一个高级文件系统(这是Linus Torvalds写的时候),而不是源代码控制工具,那会更容易.我还建议你花点时间阅读(或浏览)计算机科学家的git,它并不像听起来那么令人生畏; 并且更好地了解它的实际工作方式将有助于您思考"正确的方法".;)
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |