问题标签 [conventional-commits]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 如何让 Sublime Merge 强制执行常规提交?
我正在尝试使 sublime 合并强制执行Conventional Commits。
这就是我每个存储库的方式:
- 添加
npm
包@commitlint/config-conventional
,@commitlint/cli
- 将脚本添加到 package.json
"commitmsg": "commitlint -e $GIT_PARAMS"
- 添加
commitlint.config.js
以下内容:module.exports = {extends: ['@commitlint/config-conventional'] };
我如何在全球范围内默认执行常规提交而不对每个存储库进行任何更改?
gitlab - 使用 Semantic Versioning 或 Lerna Publish 从 CI/CD 部署时如何确保 Master 和 Dev 分支保持同步
设置
我有几个 gitlab 存储库,其中一般设置涉及拥有一个master
分支、一个stage
(预发布)分支和一个dev
分支。
所有 3 个分支都禁用了推送权限。
工作流程是从dev
分支中派生任何热修复、错误修复和功能。当您对发布感到满意时,您将提交合并请求到dev
. 最终,当内部准备好稳定的构建时dev
;将为stage
分支提交合并请求。最后,当您对预发布感到满意时,您将为master
分支提交合并请求。
我配置了 CI/CD,以便通过自动生成文件从master
和分支自动执行测试、构建和部署。分支部署到 UAT s3 存储桶并部署到生产 s3 存储桶。stage
CHANGELOG.md
stage
master
部署是通过Semantic Versioning 2.0.0
它来处理的,它负责更新版本、生成变更日志和部署。
我有一个与上面刚刚描述的类似的设置,除了它是一个 monorepo,所以我Lerna
用来处理发布(部署)与{"conventionalCommits": true}
复制Semantic Versioning 2.0.0
的行为。我在 monorepo 中使用独立的版本控制。
theSemantic Versioning 2.0.0
和Lerna
setup 都强制master
分支总是在 and 分支之后或等于stage
anddev
分支;并且stage
分支总是落后或等于dev
分支,有点像级联效应。
dev
>= stage
>=master
问题
在发布/部署Lerna Publish
时Semantic Versioning
对文件进行多项更改。其中一些更改包括更新CHANGELOG.md
文件和增加文件内部的版本package.json
。
Lerna 和语义版本控制最终都将这些更改推送到通过 CI/CD 运行它们的分支。
这意味着如果我从dev
to合并stage
,stage 将通过语义版本控制或 Lerna Publish 执行将增加的版本号和新的变更日志推入其中。这将导致stage
分支领先于dev
分支,并导致分支中的所有未来分叉与dev
分支分离,这stage
意味着下次我从它合并时dev
不会像预期的那样stage
是一个简单的fast-forward
合并,并且合并很可能会遇到冲突,这将阻止任何未来的合并或可能使 CI/CD 失败。
我的解决方法
对于语义版本控制:
- 我已禁用推送功能,以便不再提交和推送新的、更改的文件(仍然创建和推送标签)
- 我创建了一个脚本,将
CHANGELOG.md
文件转换为 PDF 并将其发送到我的团队电子邮件
这很有效,因为语义版本控制使用标签来确定更改的文件并决定如何更新版本。因此,尽管 repo 中的版本保持不变,1.0.0
例如,语义版本控制足够聪明,可以从最新标签而不是从package.json
不幸的是,这不适用于 Lerna,它仍然使用标签来确定更改的文件,但随后会从内部版本颠簸,package.json
这意味着通过不package.json
使用新版本推送更新,Lerna 总是将我从1.0.0
、或1.0.1
1.1.0
2.0.0
所以我被勒娜难住了。
问题
我应该如何设置我的 CI/CD 以避免该问题?我知道我的 repo 的结构很常见,尽管 Lerna 和 Semantic Versioning 的无数用户告诉我,我显然错过了一些东西,因为它不是一个广泛传播的问题,但我还没有找到任何人解决这个问题。
可能的解决方案
在我写这个问题时,我突然想到也许我应该只插入版本dev
然后从stage
and部署master
。这将防止stage
并master
永远领先于dev
,这是正确的方法吗?
git - 如何在每次推送提交时在 GitHub 工作流程中运行 commitlint
我有一个 Github 存储库,在本地安装了commitlint 和 husky,并且希望在验证拉取请求时设置一个在每次推送提交时运行 commitlint 的工作流。在主分支上,较旧的提交不遵循传统的提交规则。
根据此评论,我创建了一个单独的分支
https://github.com/conventional-changelog/commitlint/issues/586#issuecomment-657226800
我从这个工作流程开始
我按照传统的提交规则又做了两次提交并开始了一个拉取请求
- 我预计工作流不会运行,因为我在主分支上还不存在。
- 实际上它运行
- 我希望工作流只检查 PR 提交
- 工作流失败,因为它开始验证主分支中的每个提交。而且由于我知道旧的提交不遵守规则,所以这永远不会通过。
我想到的第一个解决方案是重新设置所有内容并重命名每个提交以遵循规则,但这需要付出巨大的努力。
我不确定我是否必须在这里改进这条线
npx commitlint --from HEAD~${{ github.event.pull_request.commits }} --to HEAD --verbose
仅检查 PR 的提交(不幸的是,我不知道那里需要修复什么)。
您有什么想法或者正在重新定位和重命名唯一的解决方案?
git - 用于添加单元测试的语义提交消息类型
问题:
我应该使用什么语义提交消息类型来添加单元测试用例?像Udin.test.js
,
feat
, chore
, 还是update
?
conventional-commits - Commitlint - 在范围枚举中允许“/”
在我的 Angular 项目中,我想@commitlint/config-conventional
用一些预定义的scopes
.
Angular 项目有一个UI 组件库(通过 生成ng generate library
)和一个使用 UI 库的默认应用程序。
在commitlint.config.js
我添加了以下几行:
但是,当我尝试使用范围提交某些内容时'ui-components/tooltip'
:
fix(ui-components/tooltip): fix border
我收到一个提交错误,说:
maven - 建议 maven 插件根据常规提交自动提升 project.version
使用 nx monorepos 时,我可以使用一个插件 ( https://github.com/jscutlery/semver ),它会根据提交的提交消息使用 semver 2.0.0 自动调整 package.json 版本。
maven有类似的东西吗?
release - 标准版本变更日志重复不同版本中的变更
我正在使用standard-version
withconventional commits
来管理我正在开发的应用程序的版本,但我在自动生成变更日志时遇到了问题。
基本上发生的情况是,每次我发布新版本时,它不仅会在更改日志中放入当前版本的更改,还会包含以前版本的更改,如下所示:
因为我在beta
这就是我运行的命令:npm run release -- --prerelease beta
关于生成更轻量级的变更日志有什么好的建议吗?
谢谢!
git - 将常规提交限制为仅拉取请求
作为我的 CI/CD 管道工作流程的一部分,我正在考虑利用常规提交在 github 中自动生成发布草稿。创建草稿的想法是允许代码所有者在发布之前查看发布说明。
但是,我担心这是否会导致以下两个问题:
- 如果我们继续将每个提交消息创建为常规提交,我们最终会得到一个巨大的更改日志,作为发布草案中的断开信息,这需要在发布之前手动重构以使其具有任何意义
- 我可以想到的替代方法是在所有相关更改完成之前避免提交更改,并在完成后将所有相关更改推送到单个提交消息下。然而,这与 CI/CD 的提议背道而驰,因为它会延迟早期的合并
作为上述问题的解决方案,我正在考虑仅在功能完成后向主线创建拉取请求时才使用常规提交。这样我可以避免发布草案中的所有噪音,同时自动创建发布说明。但我不太确定这是否是正确的方法。我想知道其他人正在采用什么策略来处理这个问题,以及我打算采取的方法是否正确?或者如果我们最好手动创建发行说明?谢谢!
git - 如何从最新提交创建分支
最近我遇到了一个独特的问题,我必须在一个分支中只包含最新的提交,而丢弃所有旧的。
例如考虑我有这样一个提交结构:
(我知道这听起来很傻,但是,)我想从那时起获取所有(最新的)提交以及与之相关的所有提交信息,即提交日期、提交作者等。
创建的分支必须如下所示:
我试过removing/squashing commits with interactive rebasing
了,没用。
Cherry-picking
也没有用。
这可以实现吗?有没有简单的方法来实现这一目标?
git - 一些参考资料,包括良好的“Git 提交消息”示例
我需要一些参考资料,其中包括有关拥有良好 git 提交消息的指南、其约定,尤其是一些示例。