云服务器内容精选

  • 配置项目级的合并请求规则 合并请求规则包含四个部分:合入机制、合入条件、MR设置和合并模式。 表2 合入机制的参数说明 参数 说明 合入机制 必填参数。包含两个选项: 打分机制:包含代码检视,以打分为基础,可设置最低合入分值,分值范围为0~5分。只有分数和必选评审达到门禁条件时,代码才可以合入,勾选打分机制时需设置最低分值。 审核机制:包含代码检视和合并审核两个步骤,以通过人数为基础,只有审核通过的人数达到门禁条件时,代码才可以合入。 说明: 合并请求默认为“审核机制”,可手动切换为“打分机制”。 修改合入机制后,会改变合并请求的工作流,但之前创建的合并请求仍保留之前的合入机制。 表3 合入条件参数说明 参数 说明 合入条件 非必填参数。包括两个选项: 勾选“评审问题全部解决才能合入”,如果评审意见被勾选为“这是一个需要被解决的问题”,则合入条件会提示“存在未解决的评审意见”且“合入”按钮置灰;如果只是一个普通的评审意见,则不存在“已解决”开关,也不会被合入条件拦截。 如果勾选“必须与CodeArts Req关联”,被关联的所有E2E工作项校验必须通过;一个MR只能关联一个单号;可添加多个分支配置合并请求策略,支持手动输入通配符匹配,按回车确认,如:*-stable或production/*。 表4 MR设置参数说明 参数 说明 禁止合入自己创建的合并请求 勾选后,用户在查看自己创建的MR时,“合入”按钮置灰,表示自己无法合入代码,需要找其他有合入权限的人合入。 禁止审核自己创建的合并请求 勾选后,用户在查看自己创建的MR时,“审核”按钮置灰,自己无法审核,需要找其他有审核权限的人审核。 禁止检视自己创建的合并请求 勾选后,用户在查看自己创建的MR时,“检视”按钮置灰,自己无法检视,需要找其他有检视权限的人检视。 允许仓库管理员强制合入 项目创建者和管理员有强制合入的权限,当合入条件不满足,也可通过“强行合并”按钮合入MR。 允许合并请求合并或关闭后继续做代码检视和评论 勾选后,已合入MR可继续做代码检视、评论。 是否将自动合并的MR状态标记为关闭状态(如果B MR中的所有commits都包含在A MR中,那么当A MR合并后,则B MR会自动合并。默认B MR会标记为merged状态,可以通过该选项控制将B MR标记为Closed状态) 未勾选时,自动合并的MR被标记为已合并。 勾选后,自动合并的MR的状态将会标记为关闭状态。 不能重新打开一个已经关闭的合并请求 勾选后,当分支合并请求已经关闭后,不能将其重新置回“开启”状态,右上方的“重开”按钮将隐藏。 此设置一般用于流程管控,使历史评审不会被篡改。 新建合并请求,默认开启合并后删除源分支 勾选成功后,新建MR默认开启“合并后删除源分支”。开启且合并成功后,源分支将被删除。 已经设置成保护分支的源分支不会被删除。 此设置对历史合入请求,不会生效,不必担心启用此设置会丢失分支。 禁止Squash合并 勾选成功后,“Squash合并”按钮被禁止,且合并请求中无该功能使用入口。 合入MR时禁止Squash合并。 新建合并请求,默认开启Squash合并 Squash合并是指Git在做两个分支间的合并时,会把被合并分支上的所有变更“压缩(squash)”成一个提交,追加到当前分支的后面作为“合并提交”(merge commit),可以使分支变得简洁。Squash合并和普通Merge合并唯一的区别体现在提交历史上:对于普通Merge而言,在当前分支上的合并提交通常会有两个提交信息;而Squash Merge只有一个提交信息。 表5 合并模式的参数表 参数 说明 通过Merge Commit合并 勾选后,每次合并操作都会产生一个merge commit点,只要没有检测到冲突就能够执行合并操作。即不管基线点是不是最新的点,无冲突就可以合并。 Squash合并不产生Merge节点:勾选后,squash合并不会产生merge节点。 使用MR合入者生成Merge Commit :勾选后,可用于记录Commit信息。 使用MR创建者生成Merge Commit: 勾选后,可用于记录Commit信息。 通过Merge commit 合并(记录半线性历史) 勾选后,每次合并操作会记录一个merge commit提交,但是与“通过Merge commit合并”不同,必须基于目标分支最新的commit提交点进行提交,否则会提示开发者进行rebase操作。这种合并模式下可以非常确定一点,如果merge request能够正确构建,合并完成后目标分支也能够正确构建。 Fast-forward 合并 勾选后,每次合并操作不会记录一个merge commit提交,且必须基于目标分支最新的commit提交点进行提交,否则会提示开发者进行rebase操作。
  • MR预合并概述 MR预合并指的是在Repo生成一个临时合并节点,MR创建后且代码还没有合入,用户可通过自定义WebHook、流水线等下载插件的脚本,下载Repo预合并后的代码用于代码构建等操作。 MR预合并优势 当一个合并请求需要拉起几十或上百台服务器的构建,本地客户端做预合并可能会与服务端产生的结果不一致,导致构建代码获取不够准确、构建结果不准确等问题。通过开启“MR预合并”,可以解决该实时性问题,并且构建脚本命令相比本地预合并脚本更简单,开发人员更容易上手。
  • 使用示例 下述示例展示了“开启MR预合并”和“未开启MR预合并”的脚本,可见“开启MR预合并”的脚本更简洁、高效。 “开启MR预合并”,当MR创建后,则服务端会帮助用户生成一个临时合并节点,进而用户可以直接下载已临时合并的代码。具体操作步骤如下: 初始化本地代码仓,其中repo_url为合并请求仓库地址。 git init git remote add origin ${repo_url} 拉取服务端临时合并节点到本地分支。如下图所示,合并请求标题下的“10”即为“repo_MR_iid”,“merge-requests/${repo_MR_iid}/merge”表示临时合并节点,“${repo_MR_iid}/merge”表示本地分支。 git fetch origin +refs/merge-requests/${repo_MR_iid}/merge:refs/remotes/origin/${repo_MR_iid}/merge 图1 合并请求IID 检出分支,即可获得预合并后代码 git checkout ${repo_MR_iid}/merge “未开启MR预合并”,用户需要在客户端分别下载合并请求源分支、合并请求目标分支的代码,并在构建执行机自行完成合并动作。具体操作步骤如下: 初始化本地代码仓,其中repo_url为合并请求仓库地址。 git init git remote add origin ${repo_url} 拉取并检出合并请求目标分支,其中,“repoTargetBranch”为合并请求目标分支。 git fetch origin +refs/heads/${repoTargetBranch}:refs/remotes/origin/${repoTargetBranch} git checkout ${repoTargetBranch} 拉取合并请求源分支到本地分支,如下图所示,合并请求标题下的“10”即为“repo_MR_iid”,“merge-requests/${repo_MR_iid}/head”表示合并请求源分支,“${repo_MR_iid}/head”表示本地分支。 git fetch origin +refs/merge-requests/${repo_MR_iid}/head:refs/remotes/origin/${repo_MR_iid}/head 图2 合并请求IID 本地执行合并,即可获得预合并后代码。 git merge refs/remotes/origin/${repo_MR_iid}/head --no-edit
  • 使用URL导Git仓到Repo 进入CodeArts Repo首页后,单击“新建仓库”,在“归属项目”下拉框中选择已有的项目或者“新建项目”。 仓库类型选择“导入仓库”,导入方式选择“Git Url”,参数填写请参考表1。 表1 “获取授权”参数填写 字段名称 说明 源仓库路径 该参数必填,该参数表示要导入的仓库路径。源仓库路径需要以(http://)或(https://)开头,以(.git)结尾。 说明: 如果仓库过大或者网络较差时,仓库导入时间可能会超过30min。如果出现导入超时,建议使用客户端clone/push来处理,具体可参考导入外部仓库提示超时。 该功能需要保证被导入的仓库 域名 和服务节点网络连通。 源仓库访问权限 必填。分两种情况填写: 如果您导入的源仓可见范围是对所有访客公开,勾选“不需要校验权限”。 如果您导入的源仓可见范围是私仓,请勾选“需要校验权限”。当前支持两种鉴权方式,“通过服务扩展点”和“通过用户名密码授权”,参数填写请参考校验导仓权限。 单击“下一步”,进入“填写基本信息”页,请参考表格填写参数。 请参考表1 同步仓库设置的参数表格,填写“同步仓库”设置参数。 填写完参数后,会自动跳转到新建仓库的“代码”页面。 如果在代码仓库列表页,新建代码仓库名称颜色为灰色,且仓库名称旁有红色感叹号,表示该仓库导入失败,可能原因:用户名或者密码/Access Token错误。可以将该代码仓删除,按照如上步骤操作,重新导入外部仓库。 当前Git支持的外部导入源包括:bitbucket.org、code.aliyun.com、coding.net、git.qcloud.com、gitee.com、github.com、gitlab.com、visualstudio.com、xiaolvyun.baidu.com。 在新建代码仓库后,仅有创建者能够访问该仓库。其他项目成员需要手动添加到仓库中,并分配相应的权限。因此,您需要根据需求,手动为代码仓库添加成员并为新增成员配置访问权限。 父主题: 迁移第三方Git仓到Repo
  • 通过E2E单号关联门禁 如果为目标仓库开启了E2E单号关联,即勾选“必须与CodeArts Req关联”。执行如下步骤,完成E2E单号关联: 进入目标仓库,切换到“合并请求”页签,单击目标合并请求名称,进入目标合并请求。 单击“详情”页中“关联工作项”旁的图标,搜索并选择目标工作项。 单击“确定”,完成E2E单号关联。 当合并请求成功关联工作项时,门禁显示为“E2E单号关联通过”。 如果您在合并代码的时候提示单个仓库容量超过2GB,不允许合并申请,请检查是否有Git提交的缓存文件所致。 MR关联工作项最大数量为100个。
  • 如何避免冲突的产生? 代码提交、合并冲突经常发生,但只要在代码开发前,做好仓库预处理工作,就能有效地避免冲突的产生。 在示例:冲突的产生与解决中,开发者02(02_dev)成功的解决了提交远程仓库时遇到的冲突问题,此时他的本地仓库与远程仓库的最新版本内容是一样的,但是开发者01(01_dev)本地仓库和远程仓库仍然是有版本差异的,此时如果直接推送本地仓库(push),仍然会产生冲突,那么如何避免呢? 方式一(推荐新手使用): 如果开发者本地的仓库不常更新使用,在做本地修改时,可以重新clone一份远程仓库的内容到本地,修改后再次提交,这样简单直接的解决了版本差异问题,但缺点是如果仓库较大、更新记录较多,clone过程将耗费一定的时间。 方式二: 如果开发者每天都要对本地仓库进行修改,则建议在本地新建一条开发分支进行代码修改,在要提交远程仓库时,切换到master分支并将远程仓库的最新master分支内容拉取到本地,在本地进行分支合并,对产生的冲突进行修复,成功将内容合并到master分支后,再提交到远程仓库。
  • 如何解决代码提交冲突? 当代码提交冲突产生时,您可以将远程代码仓库拉取(pull)到本地仓库的工作区,这时Git会将可以合并的修改内容进行合并,并将不能合并的文件内容进行提示,开发者只需要对提示的冲突内容进行修改即可再次推送到远程仓库(add → commit → push),这时冲突就解决完毕了。 如下图所示,在做拉取(pull)操作时,Git提示您,一个文件合并时产生了冲突。 在修改冲突文件时应该考虑清楚,必要时要与冲突方联系协商解决,避免覆盖他人代码。 git pull可以理解为 git fetch 的操作 + git merge的操作,其详细说明如下: git fetch origin master #从远程主机的master分支拉取最新内容 git merge FETCH_HEAD #将拉取下来的最新内容合并到当前所在的分支中 在merge的时候,会将有冲突不能合并的内容做出提示。
  • 在Windows中使用密钥对方式进行加密、解密 下载并安装最新的Windows Git客户端,下载最新基于Windows的git-crypt,把下载到的exe文件放到Git安装目录下的“cmd”文件夹中。 执行如下命令,在本地生成密钥对。 打开“Git Bash”,并进入本地代码仓库。 执行如下命令,在Git代码仓库中创建“.git-crypt”文件夹,文件夹包含加密文件所需的密钥和配置文件。 git-crypt init 执行如下命令,把密钥文件导出到C:/test目录并命名为KeyFile。 git-crypt export-key /c/test/keyfile 执行完上述步骤,您可以到密钥导出的文件路径进行验证,确认是否已成功生成密钥。持有这个密钥文件的计算机,可以解密对应的加密文件。 执行如下命令,为代码仓库配置加密范围。 在仓库的根目录下新建一个名为“.gitattributes”的文件。 打开“.gitattributes”文件,设置加密范围,语法如下。 文件名或文件范围 filter=git-crypt diff=git-crypt 下面给出四个示例。 FT/file01.txt filter=git-crypt diff=git-crypt #将特定文件加密,这里加密的是FT文件夹下的file01.txt *.java filter=git-crypt diff=git-crypt #将 .java类型文件加密 G* filter=git-crypt diff=git-crypt #将 文件名为 G 开头的文件加密 ForTest/** filter=git-crypt diff=git-crypt #将 ForTest 文件夹下的文件加密 如果创建.gitattributes文件时提示“必须键入文件名”,可以将文件名填写成 “.gitattributes.”即可创建成功,如果使用Linux指令创建文件,则不会出现此问题。 注意不要将.gitattributes保存成txt文件,否则配置会无效。 进行文件加密。 在仓库根目录打开Git bash,执行如下指令即可完成加密,加密后可看到目前文件的加密状态。 git-crypt status 加密执行后,在您的本地仓库仍能明文方式打开和编辑这些加密文件,这是因为您本地仓库有密钥存在。 这时您可以使用add 、commit、push组合将仓库推送到代码托管仓库,此时加密文件将一同被推送。 加密文件在代码托管仓库中将以加密二进制方式存储,无法直接查看。如果没有密钥,就算将其下载到本地,也无法解密。 “git-crypt status”只会加密本次待提交的文件,对本次未发生修改的历史文件不会产生加密作用,Git会对此设定涉及的未加密文件做出提示(见上图中的Warning),如果想将仓库中的对应类型文件全部加密,请使用“git-crypt status -f”。 在让团队合作中 -f (强制执行)具有一定的风险,请谨慎使用。 进行文件解密。 确认本机器Git安装路径下存在git-crypt文件。 将仓库从代码托管克隆到本地。 获取加密此仓库的密钥文件,并存储于本地计算机。 进入仓库目录,右键打开Git bash。 执行解密指令,执行后无回显,则为执行成功。 git-crypt unlock /C/test/KeyFile #请将 /C/test/KeyFile 更换为您实际的密钥存储路径
  • Linux、Mac平台的git-crypt、GPG安装 Linux平台安装git-crypt、GPG Linux安装依赖环境。 Software Debian/Ubuntu package RHEL/CentOS package Make make make A C++11 compiler (e.g. gcc 4.9+) g++ gcc-c++ OpenSSL development files libssl-dev openssl-devel Linux环境下,使用源码编译方式安装git-crypt。 下载源码 make make install 安装到指定目录。 make install PREFIX=/usr/local Linux环境下,使用源码编译方式安装GPG。 下载源码 ./configure make make install 使用Debian包安装git-crypt。 下载源码 Debian打包可以在项目Git仓库的“debian”分支中找到。 软件包是用“git-buildpackage”构建的,如下所示。 git checkout debian git-buildpackage -uc -us Debian环境下使用构建包安装GPG。 sudo apt-get install gnupg MAC平台安装git-crypt、GPG macOS上安装git-crypt。 使用 brew 软件包管理器,只需运行如下命令。 brew install git-crypt macOS上安装GPG。 使用 brew 软件包管理器,只需运行如下命令。 brew install GPG
  • git-crypt加密在团队合作中的应用 很多时候,团队需要在代码仓库中存储限制公开的文件,这时可以优先考虑使用“CodeArts Repo” + “Git” + “git-crypt”的组合,来实现部分文件在仓库分布式开源中的加密。 通常,直接使用密钥对方式的加密就能满足限制部分文件访问的需要。 当团队需要将加密文件设置不同的秘密级别时,可以使用GPG方式加密,这种方式支持您对同一个仓库的不同文件使用不同的密钥加密,将不同密级的密钥分别随仓库共享给组织内的伙伴,即可实现文件的定向分级限制访问。
  • 使用TortoiseGit克隆代码仓库到本地 访问CodeArts Repo首页。 进入要克隆的代码仓库主页,单击“克隆/下载”按钮,并复制SSH地址。 进入您的本地仓库目录下,右键选择“Git克隆”菜单选项。 在弹出的窗口中将步骤2复制的SSH地址粘贴到URL输入框中,勾选“加载Putty密钥”并选择安装TortoiseGit客户端时生成的私钥文件。 单击“确定”。如果您是第一次在TortoiseGit客户端克隆代码仓,系统会询问您是否信任远程仓库,单击“是”即可。
  • 使用Git Bash克隆代码仓库到本地 SSH密钥是一种安全的身份验证方式,用于访问远程服务器。使用SSH密钥克隆代码仓可以避免每次都需要输入用户名和密码,提高克隆代码仓的效率。 访问CodeArts Repo首页。 进入要克隆的代码仓库主页,您可以先创建个人分支,再单击“克隆/下载”按钮,并复制SSH地址。 在本地Git Bash客户端,执行如下命令,进入您要克隆代码仓的地址,该命令表示克隆的代码仓将克隆到D盘的Repo文件夹下,您可以根据需要修改地址。 cd D:/Repo 执行如下命令,克隆代码仓到该目录下。 git clone 代码仓库的SSH地址 如果您是第一次克隆仓库,会询问您是否信任远程仓库,输入“yes”即可。 如果出现下图,说明克隆仓库成功。 图1 使用SSH密钥克隆代码仓成功示意图 如果在执行步骤3时,Git Bash报错“git@test.com: Permission denied.fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.”,表示您还未配置访问Repo的SSH密钥,请先配置SSH密钥,具体请参考配置SSH密钥。
  • 查看仓库详情 在仓库列表中单击要查看的仓库名称,即可进入该仓库的详情页面, 代码托管服务 提供了丰富的控制台操作,详情如下。 表1 页签说明 功能页签 功能说明 仓库首页 用于展示仓库的容量、提交次数、分支数量、标签数量、成员数量、LFS使用量、创建时间、创建者、可见范围、仓库状态、readme文件、语言、语言占比等信息。 代码 文件列表:支持新建文件、新建目录、新建子模块、上传文件、在线修改文件、修改追溯和查看提交历史等操作。 提交:支持查看提交记录及仓库网络图。 分支:支持在控制台管理分支。 Tags:支持在控制台管理标签。 对比:支持通过对比查看分支之间或标签版本之间发生的代码变化。 合并请求 支持在控制台管理分支的合并请求。 评审记录 支持查看合并请求的评审记录与Commit的评审记录。 关联工作项 所关联工作项的列表,其可设置与需求管理中工作项的联动,提升效率。 仓库统计 仓库提交记录的可视化图表,主要展现了代码贡献度等信息。 动态 支持查看仓库动态信息。 成员 支持对成员的管理,具体信息如下: 成员列表”、“成员组列表”“待审核”和“添加成员”位于仓库详情的“成员”页签下。 “成员列表”用于展示仓库中所有成员“用户名”、“用户来源”、“项目角色”、“仓库角色”和“操作”。 “成员组列表”用于展示仓库所有成员组的“成员组名称”、“成员数量”、“描述”和“操作”。 “待审核”用于展示即将加入仓库中待审核成员,包括“用户名”、“用户昵称”、“企业用户”、“项目角色”、“仓库角色”和“操作”。“待审核”成员可被拥有“添加成员”权限的人设置为“同意”或“拒绝”。 “添加成员”用于仓库添加成员或添加成员组。 设置 此仓库的设置入口。仓库内的仓库成员可以查看该页面,仓库成员是否具有仓库设置权限,请参考“权限管理”。 另外仓库详情页框架上还提供以下功能的快捷入口: 设置构建:新建编译构建任务入口。 IDE Online:可使用IDE Online打开代码(目前 免费体验 ,仅支持北京一、北京四及大连局点)。 关注:单击可关注该仓库,关注的仓库会在仓库列表置顶。 Fork:会显示目前仓库有几个Fork出的仓库,单击弹出“Fork代码仓库”页面。 克隆/下载:可获取仓库的SSH地址、HTTPS地址,也可以直接下载代码压缩包。 代码托管“吸顶”功能,当用户的仓库界面长度大于窗口长度,向下滑动鼠标滚轮后,仓库页签置顶,下图中红框位置被折叠,便于查看仓库信息,向上滑动鼠标滚轮后,界面恢复。 代码检查状态显示规则: 当用户有代码检查权限时,仓库名称后显示代码检查状态。 当用户无代码检查权限时,仓库名称后不显示代码检查状态。 构建状态显示规则: 当用户无构建权限 仓库页面上方只显示“设置构建”按钮。 当用户有构建权限 如果没有设置构建,则仓库页面上方显示“设置构建”按钮。 如果设置了构建,则会根据构建任务执行情况在仓库页面上方显示的状态有:“运行构建任务”、“构建进行中”、“构建执行失败”、“构建执行成功”。 父主题: 设置仓库
  • 查看仓库的动态 在仓库详情中的“动态”页签,可以查看截止当前仓库的全部动态。 全部:展示截止当前该仓库的所有操作记录。 推送:展示截至当前该仓库所有的推送操作记录,例如推送代码、新建/删除分支等。 合并请求:展示截至当前该仓库所有合并请求的操作记录,单击合并请求的序号可查看详情,例如新建/关闭/重开/合入合并请求等。 检视意见:展示截至当前该仓库所有检视意见记录,单击提交号可查看详情,例如添加/删除检视意见等。 成员:展示截至当前该仓库所有成员的管理记录,例如添加/移除成员、编辑成员权限等。 展示内容为操作者、具体的操作内容及操作时间。 支持选择时间范围、操作人等条件进行筛选查询。
  • 在控制台管理标签 在控制台的标签列表中,可查看该远程仓库中的全量标签并进行如下操作。 单击“标签名”,跳转到该标签对应版本的文件列表。 单击“提交号”,跳转到该次提交(commit)的详情页面。 单击,可下载tar.gz或zip格式的被标签版本的文件包。 单击,可以将此标签从代码托管仓库删除(想从本地删除请clone、pull或本地手动-d删除)。 如果仓库设置IP白名单,则只有IP白名单内的机器才可以在界面下载仓库源码,如果仓库没有设置IP白名单,则均可在界面下载仓库源码。 在控制台创建分支时,您可以选择基于某个标签去创建分支。 在控制台中,单击“代码”页签,单击目标文件的“文件名称”,单击文件的“对比”页签,可在该文件的提交记录之间做差异对比。