【发布时间】:2014-09-12 10:56:10
【问题描述】:
我目前拥有自己的 AOSP 项目镜像。我可以手动分支一些存储库,但我不确定如何标记镜像中的所有存储库以保存版本。标记所有内容是否是一个特殊的“repo”命令?
【问题讨论】:
标签: android git tags android-source
我目前拥有自己的 AOSP 项目镜像。我可以手动分支一些存储库,但我不确定如何标记镜像中的所有存储库以保存版本。标记所有内容是否是一个特殊的“repo”命令?
【问题讨论】:
标签: android git tags android-source
据我所知,没有带有repo 的标签命令,但您可以使用repo forall 命令:
类似:
repo forall -c 'git tag TAGNAME'
应该可以。
【讨论】:
git tag -a TAGNAME创建带注释的标签,在这种情况下,您可能还想通过-m或-F设置标签注释以避免收到数百条标签消息提示。
repo forall 来推送标签,但我认为Android Gerrit ACL 将只允许来自特定组的用户推送标签。
在您的情况下,您可能确实想要标记每个 git,@ouah 的答案解释了如何,但请参阅我关于创建带注释标签的评论。请记住,虽然标签告诉您该 git 中的哪个提交是发布的一部分,但您仍然不知道哪些 git 包含该标签。要同步发布的完整工作区,您必须检查所有可能的 git 是否包含相关标签(git ls-remote 应该会有所帮助),并根据该信息制作清单。或者,在清单 git 中创建一个提交并在其中列出所有 git(并标记该提交)。
现在,如果您打算创建数千个标签(例如,因为您有一个频繁运行的 CI 作业来构建所有内容,并且您想要记录每个构建的状态),您应该考虑到 Git 在这么多的引用上效率低下.更明智的做法是创建一个包含每个 git 已签出提交的静态清单 (repo manifest -r -o manifest.xml)。
缺点是你不能说例如git diff your-release-1.0..HEAD 但必须获取静态清单并从那里获取 SHA-1 进行比较(显然,这是一项易于自动化的任务)。好处是您可以轻松同步整个工作区,特别是如果您将静态清单文件存储在清单 git 中。例如,如果您将它们存储在主分支中(无论它们是从哪个清单分支构建的),repo init -u ... -m your-release-1.0.xml 可以用于准备您的工作区。
【讨论】: