我们使用git来管理我们的项目,每个都有一个分支:dev staging production
我想使用git标签来管理软件的版本.据我所知,如果我在一个分支上并添加一些提交,那么我必须运行:git tag 1.0
使用我们所需的任何版本号来重复1.0,然后我可以使用:git push origin 1.0来推送标签
我可以使用:git push --tags更新分支
但是我现在如何重复使用标签?如果我将更多代码提交到我的本地存储库并希望它很容易成为1.0版本?或者你只是添加一个像1.1的新标签?
此外,如果我的同事在他的本地存储库中使用相同的标记名称并且我们都推送相同标记的代码,会发生什么?
最后,如果我们在不运行git标记来标记提交的情况下意外推送我们的代码会发生什么.
我并没有真正了解标签是如何工作的,我认为它们会像标记博客文章或其他东西一样工作 - 您可以使用相同的标签标记许多不同的提交并重复使用标签等.我猜这类似于分支.
但是我现在如何重复使用标签?如果我将更多代码提交到我的本地存储库并希望它很容易成为1.0版本?或者你只是添加一个像1.1的新标签?
您可以删除标签git tag -d 1.0,然后在服务器上将其删除git push origin :refs/tags/1.0.
但最佳做法是仅标记版本,然后在创建标记的位置为该版本创建维护分支.在那个分支上,你推送修复程序,并在生成更新版本时标记1.1,1.2,.... 在将代码提供给客户后移动标签是不好的做法.
此外,如果我的同事在他的本地存储库中使用相同的标记名称并且我们都推送相同标记的代码,会发生什么?
我很确定推送标签的第二个人会收到错误.亲自尝试看看会发生什么:
git checkout -b testbranch
git tag test1
git push origin tag test1
git tag -d test1
touch testfile
git add testfile
git commit -m "Added testfile"
git push origin testbranch
git tag test1
git push origin tag test1
Run Code Online (Sandbox Code Playgroud)
最后,如果我们在不运行git标记来标记提交的情况下意外推送我们的代码会发生什么.
在推送提交后,您应该推送标签.你不能同时做两件事(git push --tags不推送提交,只推送标签).如果先按下标签,遥控器将有悬空参考,直到您按下提交.所以你应该这样做
git push origin master
git push origin --tags
Run Code Online (Sandbox Code Playgroud)
或类似的,取决于您的情况.
我并没有真正了解标签是如何工作的,我认为它们会像标记博客文章或其他东西一样工作 - 您可以使用相同的标签标记许多不同的提交并重复使用标签等.我猜这类似于分支.
标签就像提交上的标签一样,因此您可以将某些提交标记为"特殊".最常见的是,这用于标记版本,因此如果客户报告错误,您可以随时返回并查看该版本中的确切内容.
gitref.org上有一个很棒的标签信息资源
不要尝试重复使用版本号。最好是直接使用 1.1 或 1.0a。手册页对此进行了详细讨论。
对于你的问题:
最后,如果我们不小心推送代码而没有运行 git tag 来标记提交,会发生什么?
您可以通过将提交引用放入命令中来标记旧提交:
git tag 1.1 HEAD~3
Run Code Online (Sandbox Code Playgroud)