资讯详情

资讯详情

使用 AWS CLI 的 merge-branches-by-three-way 命令在 CodeCommit 中进行三路合并

使用 AWS CLI 的 merge-branches-by-three-way 命令在 CodeCommit 中进行三路合并【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cliaws codecommit merge-branches-by-three-way是 AWS Command Line InterfaceAWS CLI中用于在 AWS CodeCommit 仓库内以三路合并three-way merge策略合并两个分支的命令。本文基于当前仓库中的示例文档与 CodeCommit 服务模型完整讲解该命令的用法、全部参数含义、冲突处理机制与输出解析帮助你直接在命令行中完成分支合并、冲突自动解决与提交记录写入。命令概览与核心用途在 CodeCommit 中当两个分支从同一基点分叉后各自发生提交时merge-branches-by-three-way命令会在仓库内直接创建一个合并提交将源分支source的变更合入目标分支destination而不需要经过拉取请求pull request流程。三路合并算法会以两个分支的共同祖先提交base commit为基准将 source 与 destination 各自的变更进行比对合并因此可以保留两边的提交历史。命令对应的服务端 API 为MergeBranchesByThreeWay其官方定义为 Merges two specified branches using the three-way merge strategy定义于 service-2.json。在同一份服务模型中CodeCommit 还提供了另外两种合并策略MergeBranchesByFastForwardfast-forward 快进合并MergeBranchesBySquashsquash 压缩合并三者同属 CodeCommit 的merge-branches-*命令族对应的示例文档分别位于 merge-branches-by-fast-forward.rst 与 merge-branches-by-squash.rst。若不确定某个仓库当前支持哪些合并策略可先运行aws codecommit get-merge-options查询见 get-merge-options.rst其输出中的mergeOptions字段会列出如FAST_FORWARD_MERGE、SQUASH_MERGE、THREE_WAY_MERGE等可用选项。基本用法示例以下命令将源分支main的变更合并到目标分支bugfix-bug1234并为生成的合并提交指定作者、邮箱与提交信息。该示例出自仓库中的 merge-branches-by-three-way.rstaws codecommit merge-branches-by-three-way \ --source-commit-specifier main \ --destination-commit-specifier bugfix-bug1234 \ --author-name Jorge Souza --email jorge_souzaexample.com \ --commit-message Merging changes from main to bugfix branch before additional testing. \ --repository-name MyDemoRepo输出示例{ commitId: 4f178133EXAMPLE, treeId: 389765daEXAMPLE }其中commitId是合并提交的提交 ID落在 destination 或 target 分支上treeId是合并结果的树对象 ID二者均由服务端在完成合并后返回可据此在仓库中定位合并提交。参数详解根据服务模型 MergeBranchesByThreeWayInput 的定义该命令支持以下参数前三个为必填项参数必填类型说明--repository-name是字符串执行合并的仓库名称。--source-commit-specifier是字符串用于标识源提交的分支、标签、HEAD 或其他完全限定引用例如分支名或完整提交 ID。--destination-commit-specifier是字符串用于标识目标提交的分支、标签、HEAD 或其他完全限定引用例如分支名或完整提交 ID。--target-branch否字符串合并结果实际应用到的分支。不指定时合并提交落在 destination 分支上。--conflict-detail-level否枚举冲突检测粒度取值为FILE_LEVEL默认或LINE_LEVEL。文件级冲突指同一文件在两分支中均有改动行级冲突指同一文件同一行在两分支中均有改动。--conflict-resolution-strategy否枚举冲突解决策略取值为NONE默认、ACCEPT_SOURCE、ACCEPT_DESTINATION、AUTOMERGE详见下文。--author-name否字符串创建提交的作者姓名同时作为该提交的 author 与 committer 信息。--email否字符串执行合并人员的邮箱地址写入合并提交的提交信息中。--commit-message否字符串合并提交的提交信息。--keep-empty-folders否布尔若合并包含删除操作且删除后文件夹为空是否保留该空文件夹。设为true时为空文件夹创建.gitkeep文件默认为false。--conflict-resolution否结构体当--conflict-resolution-strategy为AUTOMERGE时指定合并冲突解决的输入列表JSON 语法详见下文。注CLI 参数中的连字符命名与 API 字段的驼峰命名如conflictDetailLevel、conflictResolutionStrategy一一对应。枚举取值见服务模型中的 ConflictDetailLevelTypeEnum 与 ConflictResolutionStrategyTypeEnum。冲突检测与解决策略三路合并的核心风险在于两分支对同一区域产生冲突。服务模型明确了两级冲突检测粒度FILE_LEVEL默认只要同一文件在两个分支中都有差异即视为不可自动合并not-mergeable。LINE_LEVEL只有同一文件在两个分支中的同一行都存在差异时才判定为不可自动合并。--conflict-resolution-strategy决定冲突发生时如何处理四种取值对应四种行为取值行为NONE默认不自动解决任何冲突存在冲突时必须先人工处理否则合并操作不会成功。ACCEPT_SOURCE冲突发生时直接采用源分支--source-commit-specifier一侧的内容。ACCEPT_DESTINATION冲突发生时直接采用目标分支--destination-commit-specifier一侧的内容。AUTOMERGE尝试自动合并同一文件的两个版本可配合--conflict-resolution提供额外的逐文件解决输入。使用 AUTOMERGE 与 conflict-resolution 的进阶示例当选择AUTOMERGE时可通过--conflict-resolution指定逐文件的冲突解决输入。根据服务模型 ConflictResolution 的定义该结构体支持三类成员replaceContents替换指定文件的内容deleteFiles删除指定文件setFileModes设置指定文件的文件模式。参考示例使用 JSON 语法传入aws codecommit merge-branches-by-three-way \ --repository-name MyDemoRepo \ --source-commit-specifier feature-xyz \ --destination-commit-specifier main \ --conflict-resolution-strategy AUTOMERGE \ --conflict-resolution { replaceContents: [ { filePath: README.md, replacementType: CONTENT, content: IyBOZXcgY29udGVudA } ], deleteFiles: [ { filePath: obsolete-config.txt } ], setFileModes: [ { filePath: deploy.sh, fileMode: EXECUTABLE } ] } \ --author-name Maria Garcia \ --email maria_garciaexample.com \ --commit-message Automerge feature branch into main提示replaceContents中content字段要求 base-64 编码的文件内容服务端模型中以blob类型传输CLI 层面对应 base64 编码字符串可用base64 README.md之类的方式生成。replacementType可取值CONTENT或FILE_MODE。若不指定--conflict-resolutionAUTOMERGE 会尽力自动合并无法自动解决的冲突仍会以失败告终。合并结果输出解析命令成功执行后返回一个 JSON 对象包含两个字段见 MergeBranchesByThreeWayOutputcommitId合并提交在目标或--target-branch指定分支上的提交 IDtreeId合并结果对应的树对象 ID。合并提交创建成功后可用仓库中的其他命令进一步验证结果aws codecommit get-commit查看合并提交详情示例见 get-commit.rstaws codecommit get-branch查看目标分支的最新提交是否已更新为合并提交示例见 get-branch.rstaws codecommit get-differences对比合并前后两个提交之间的差异示例见 get-differences.rst。常见错误场景与排错服务模型在MergeBranchesByThreeWay操作上声明了大量错误类型service-2.json以下是实际使用中容易遇到的几类仓库或引用不存在RepositoryNameRequiredException、InvalidRepositoryNameException、RepositoryDoesNotExistException、CommitRequiredException、CommitDoesNotExistException、InvalidCommitException通常由仓库名拼写错误、提交 ID 无效或引用指向不存在的提交导致。分支相关BranchNameRequiredException、InvalidBranchNameException、BranchDoesNotExistException、InvalidTargetBranchException、BranchNameIsTagNameException说明传入的分支名缺失、非法或把标签名误当成了分支名。合并失败TipsDivergenceExceededException两分支提交历史差异过大超出合并比较上限、ManualMergeRequiredException存在冲突且--conflict-resolution-strategy为NONE需要先人工解决冲突。并发与加密ConcurrentReferenceUpdateException同一引用被并发更新请重试、EncryptionIntegrityChecksFailedException及EncryptionKey*系列异常KMS 加密相关故障检查仓库加密密钥的访问权限与可用性。适用前提与注意事项使用该命令需要先完成 AWS CLI 的安装与凭证配置本仓库根目录的 README.rst 与 CONTRIBUTING.md 提供了构建与开发环境相关说明scripts/install可用于本地安装。执行合并的 IAM 身份需要对目标仓库具备codecommit:GitPull与codecommit:GitPush或等价的仓库级权限以及创建合并提交所需的权限。三路合并会保留 source 与 destination 的完整提交历史并生成一个新的合并提交与 fast-forward线性推进和 squash压缩为单次提交在提交历史上行为不同选择策略前请先确认团队的分支与历史管理约定。若分支从未分叉destination 包含 source 的全部历史服务端可能会提示改用 fast-forward 等更合适的策略可先通过get-merge-options查询可用选项再决定调用哪一个merge-branches-*命令。相关命令与延伸阅读快速合并aws codecommit merge-branches-by-fast-forward示例见 merge-branches-by-fast-forward.rst压缩合并aws codecommit merge-branches-by-squash示例见 merge-branches-by-squash.rst合并前探测冲突aws codecommit get-merge-conflicts、aws codecommit describe-merge-conflicts、aws codecommit batch-describe-merge-conflicts查询可用合并策略aws codecommit get-merge-options示例见 get-merge-options.rst拉取请求场景下的三路合并aws codecommit merge-pull-request-by-three-way以上命令所对应的 CodeCommit 服务模型含全部输入输出结构与错误类型均可在 service-2.json 中查阅分页与示例定义见同目录下的 paginators-1.json 与 examples-1.json可作为进一步深入学习和排查问题时的权威依据。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →