我曾经将轻量级标签推送到我的 GitHub 存储库中,并将它们编辑到带有更改详细信息的发布中。这很好用。
现在我开始签署我的标签,这意味着它们是带注释的而不是轻量级标签。我希望 GitHub 会考虑发布它们,因此我将之前在 GitHub 上写入的相同信息放入标签消息中。
然而,GitHub 并不认为它是一个版本,而只是一个标签。我可以像以前一样根据标签“起草新版本”,但我想知道是否有一种方法可以让 GitHub 使用标签消息中的信息自动执行此操作。
概括
如何在 Azure Devops Pipeline YAML 文件中获取当前 git 标签的名称?
我想做什么?
我正在 Azure Devops 中设置构建管道。创建新的 git 标签时会触发管道。然后我想构建 docker 镜像并用 git 标签的名称标记它们。
我的 YAML 管道如下所示:
# Trigger on new tags.
trigger:
tags:
include:
- '*'
stages:
- stage: Build
jobs:
- job: Build
pool:
vmImage: 'ubuntu-latest'
steps:
- script: export VERSION_TAG={{ SOMEHOW GET THE VERSION TAG HERE?? }}
displayName: Set the git tag name as environment variable
- script: docker-compose -f k8s/docker-compose.yml build
displayName: 'Build docker containers'
- script: docker-compose -f k8s/docker-compose.yml …Run Code Online (Sandbox Code Playgroud) 如果Git项目中有多个可用的标签,我们如何检查,这是当前所有标签中的检出标签.
git tag 将列出所有标签,条目将出现在.git/refs/tags中
比如说: - 今天我们从主存储库进行了存储库同步并得到了标记1,我们检查了标记1并开始处理它,几周后我们同步了内容并检查了新标记.
现在,如果我想检查最新状态,即当前检出标签 - 我们该怎么做?
我有一个用于测试我的代码的预刷钩,但是,当我执行时,它也会运行git push --tags.有什么方法可以避免这种情况吗?
也许有一些方法可以检查它是否是常规推动还是--tags推动?
更新 - 这是我能找到的唯一参数:
我有一个maven项目,存储在我们的GIT存储库中.当我发布这个项目时mvn release:prepare,mvn release:perform有时它会在后面的步骤中失败,但无论如何都会为此版本创建一个标记.此标记不会被删除mvn release:rollback,如果我再次尝试准备该版本,则会因此标记已存在错误而失败:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.2:prepare (default-cli) on project lwl-module: Unable to tag SCM
[ERROR] Provider message:
[ERROR] The git-tag command failed.
[ERROR] Command output:
[ERROR] fatal: tag 'lwl-module-1.5.1' already exists
[ERROR] -> [Help 1]
[ERROR]
Run Code Online (Sandbox Code Playgroud)
有没有办法mvn release:rollback删除我们的GIT存储库中的最后一个标签?
我正在使用此版本插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.2</version>
</plugin>
Run Code Online (Sandbox Code Playgroud) 创建了一个标签,其名称中包含"Ã",我无法删除标签,尝试了以下内容:
git tag -d -- xxÃxx
git push origin :refs/tags/xxÃxx
git config --global core.precomposeunicode true
git tag -d -- xxÃxx
git push origin :refs/tags/xxÃxx
Run Code Online (Sandbox Code Playgroud)
也试过这个名字的双引号.
执行命令时,git表示标签已删除:本地删除:
Deleted tag 'xxÃxx' (was 434eae7)
Run Code Online (Sandbox Code Playgroud)
推后:
remote: warning: Allowing deletion of corrupt ref.
- [deleted] xxÃxx
Run Code Online (Sandbox Code Playgroud)
标签"xxÃxx"在每个git fetch -p或git pull(两次连续拉动后的事件)中都是新的.
还尝试从源树中删除标记,但标记再次出现.
我知道关于主分支上的所有提交是否应该使项目处于有效的工作状态存在各种观点和哲学.我不是要求这些意见.
为了论证,让我们假设在master分支历史中的某个地方我确定了一个提交,它实际上是一个正在进行的提交,即它不构建或破坏其他东西.由于我们在主分支中讨论历史,因此不能选择重新定位或修改(或实际更改提交的任何内容).
为了警告其他开发人员并使自动git bisect脚本轻松跳过此提交,我想以某种方式将此提交标记为正在进行中.我该怎么做呢?
我已经考虑过使用git tag,但由于标签必须是唯一的,因此我最终会使用标签,就像wip/<some_unique_id>我认为的那样丑陋.另外,从概念上讲,我们不希望将此提交视为标记提交,即我们可能永远不想检查它,我们可能不希望它出现在标记提交点列表等中.
当git filter-branch --tag-name-filter cat …通过使用--prune-empty和/或--subdirectory-filter=…您将进入案例重写历史记录时,标记的提交将被删除。到目前为止,这是合理的,并且按设计工作。
问题/目标
我现在想要存档的是:保留附近重写提交的标签
例子:
从...开始 A -> B(tag: foo) -> C -> D -> E
(其中 E 比 D 新,比 C 新……)
跑步git filter-branch我得到
得到A' -> B'(tag: foo)' -> E ( ^ 好案例)
或:(A' -> D' -> E' ^ 坏情况)
我想要得到的是:A'(tag: foo)' -> D' -> E'
因为A'代表了被标记的内容B
一些研究:
我遇到的第一件事是git cherry在Git 中:有没有办法找出提交是从哪里挑选出来的?但这似乎对发现差异没有太大帮助,因为树木是不相交的。
相反,我已经找到了一个有用的示例--commit-filter /sf/answers/1034837401/来写重写对象的日志
一些想法:考虑
到--commit-filter …
语境:
因此,问题:
我将如何使用 git 命令行和可选的基本 bash 工具
git tag -l --merged ${BRANCH_COMMITTISH},但我不需要给定分支的标签,而是给定标签的分支)在Azure Pipelines中,我启用了git标签来触发管道,如下所示:
trigger:
branches:
include:
- '*'
tags:
include:
- '*'
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有一种方法可以通过编程确定:
git-tag ×10
git ×9
azure-devops ×2
github ×2
git-bisect ×1
git-branch ×1
git-log ×1
git-svn ×1
githooks ×1
maven ×1
release ×1
rollback ×1
yaml ×1