最新Gerrit2.16.15版本用户指南-中文文档

2023-05-16

这是为Gerrit最终用户准备的Gerrit指南。 它说明了标准的Gerrit工作流程以及指导用户可以根据个人喜好来设置并使用Gerrit。

为了更好地理解本指南,读者最好了解Git,并熟悉基本的git命令和工作流程。

什么是Gerrit

Gerrit是一个Git服务器,为托管的Git存储库提供访问控制,并提供Web前端进行代码审查。 代码审查是Gerrit的核心功能,但仍然是可选的,团队可以决定直接使用但不进行代码审查。

工具

Gerrit使用git协议。这意味着要使用Gerrit,您不需要安装任何Gerrit客户端,只要拥有常规的git客户端(例如git命令行或Eclipse中的EGit)就足够了。

仍然有一些Gerrit客户端工具,可以选择使用这些工具:

  • Mylyn Gerrit Connector:Mylyn集成的Gerrit
  • Gerrit IntelliJ插件:IntelliJ平台集成的Gerrit
  • mGerrit:Gerrit的Android客户端
  • Gertty:基于控制台界面的Gerrit

克隆Gerrit项目

克隆Gerrit项目的方法与使用git clone命令克隆任何其他git存储库的方法相同。

克隆Gerrit项目:

$ git clone ssh://gerrithost:29418/RecipeBook.git RecipeBook
  Cloning into RecipeBook...

可以在Gerrit Web UI中的Projects> List> <project-name>> General下找到克隆项目的URL。

译者注:上面的UI为旧的GWT UI路径,2.16.15默认为PolyGerrit UI,3.0以后只有新的PolyGerrit UI界面。新UI界面路径为BROWSE> Repositories> <project-name>,打开后最上方即为克隆路径。

对于git操作,Gerrit支持SSHHTTP/HTTPS协议。

注意

要使用SSH,您可能需要在Settings中配置SSH公钥。

代码审查工作流

使用Gerrit进行代码审查意味着先审查每个提交,然后再将其合入到代码库中。

代码修改者对代码的每一次commit在Gerrit中都作为一个change。 在Gerrit中,每个change都存储在暂存区域中,我们可以对暂存区中的代码进行检查和审核。只有当这部分代码审核通过并且点击submitt按钮后,它才会被合并到代码库中。

如果有关于change的反馈(其他reviewer对你提交的代码提出了修改意见),那么作者可以通过amend commit来修改代码并提交新的补丁集。 这样,每次提交的change就可以迭代地得到改进,并且仅在准备就绪时才将其应用于代码库中。

上传一个change

通过对Gerrit推送一次提交就完成了一个change的上传。(这是一个很重要的概念,后面的大部分论述都以change为操作对象) 必须将提交推送到使用目标分支名命名的引用分支:refs/for/<target-branch>。 神奇的refs/for/前缀使Gerrit可以区分这次提交是需要代码审核的提交,还是不用审核直接合入仓库的提交。

对于目标分支,只需指定短名称即可,例如master,但您也可以指定完全限定的分支名称,就像refs/heads/master这样。

需要审核的推送:

$ git commit
$ git push origin HEAD:refs/for/master

// this is the same as:
$ git commit
$ git push origin HEAD:refs/for/refs/heads/master

绕过审核的推送:

$ git commit
$ git push origin HEAD:master

// this is the same as:
$ git commit
$ git push origin HEAD:refs/heads/master

注意

如果推送到Gerrit失败,请查阅Gerrit文档以了解错误消息。

推送提交进行审查时,Gerrit将其存储在暂存区域中,该暂存区域是特殊refs/changes/名称空间中的一个分支。 更改参考的格式为refs/changes/XX/YYYY/ZZ,其中YYYY是数字更改号,ZZ是补丁集编号,而XX是数字更改号的后两位,例如refs/changes/20/884120/1。使用Gerrit并不需要了解此引用的格式。

获取更新

$ git fetch https://gerrithost/myProject refs/changes/74/67374/2 && git checkout FETCH_HEAD

注意:
可以从你的更新提交界面中直接下载命令复制fetch命令。

refs/for/前缀用于将Gerrit“推送到审核”概念映射到git协议。对于git客户端,似乎每次推送都转到同一个分支,例如refs/for/master,但实际上对于推送到此ref的每个提交,Gerrit都会在refs/changes/名称空间下创建一个新分支。此外,Gerrit还创建了一个开放的change

change包括一个Change-Id,元数据(所有者,项目,目标分支等),一个或多个补丁集,注释和投票。一个补丁集是一次git commitchange中的每个补丁集代表该change的新版本,并替换了先前的补丁集。仅最新的补丁集是相关的。这意味着change的所有失败迭代将永远不会应用于目标分支,而只会集成最后批准的补丁集。

对于Gerrit来说,Change-Id很重要,因为它知道为代码检查而推动的提交是否应该创建新的change,或者是否应该为现有change创建新的补丁集。

Change-Id是SHA-1,其前缀为大写字母I。在提交消息(最后一段)中将其指定为页脚:

Improve foo widget by attaching a bar.

We want a bar, because it improves the foo by providing more
wizbangery to the dowhatimeanery.

Bug: #42
Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
Signed-off-by: A. U. Thor <author@example.com>

如果将提交消息中具有Change-Id的提交推送进行审查,则Gerrit会检查该项目和目标分支是否已存在具有此Change-Idchange,如果是,则Gerrit会为此change创建一个新的补丁集 。 如果不是,则使用给定的Change-Id创建新的change

如果将没有Change-Id的提交推送进行审查,则Gerrit会创建一个新change并为其生成一个Change-Id。 由于在这种情况下,Change-Id不包含在提交消息中,因此在上传新补丁集时必须手动插入它。在推入第一个补丁集时,大多数项目已经需要一个Change-Id。这样可以减少意外创建新change而不是上传新补丁集的风险。 如果没有Change-Id,则任何推送都会失败,因为提交消息页脚中缺少Change-Id

修改并重新确定提交将保留Change-Id,以便在将其提交进行审阅时,新提交将自动成为现有更改的新补丁集。

推送一次新的补丁集:

$ git commit --amend
$ git push origin HEAD:refs/for/master

Change-Ids对于项目的分支是唯一的。例如,在不同分支中解决相同问题的提交应具有相同的Change-Id,如果将提交pick到另一个分支中,则提交会自动发生。这样,您可以使用Gerrit Web UI在所有分支中按Change-Id搜索,找到你的修复代码。

可以通过按照Change-Id文档中的说明安装commit-msg钩子来自动创建Change-Id

您可以将其复制到git模板目录中,而不是为每个git存储库手动安装commit-msg钩子。然后将其自动复制到每个新克隆的存储库中。

审查change

上传更改以供审核后,审阅者可以通过Gerrit Web UI进行检查。审阅者可以查看代码增量,并直接在代码块或代码行中进行注释。他们还可以发布摘要评论并在审核标签上投票。审阅用户UI的文档说明了进行代码审阅的步骤与操作。

有几个选项可控制应如何呈现补丁差异。 用户可以在diff首选项中配置其首选项。

上传一个新的补丁集

如果有来自代码审查的反馈,并且应改进更改,则应上传带有重新编写的代码的新补丁集。

这可以通过修改最后一个补丁集的提交来完成。如果需要,可以通过使用change页面中的fetch命令从Gerrit中获取此提交。

重要的是,提交消息中包含应作为页脚更新的更改的Change-Id(最后一段)。 通常,提交消息已经包含正确的Change-Id,并且在修改提交时保留了Change-Id

推送一次补丁集:

// fetch and checkout the change
// (checkout command copied from change screen)
$ git fetch https://gerrithost/myProject refs/changes/74/67374/2 && git checkout FETCH_HEAD

// rework the change
$ git add <path-of-reworked-file>
...

// amend commit
$ git commit --amend

// push patch set
$ git push origin HEAD:refs/for/master

注意:永远不要修改已经属于中央分支的提交。

推送新补丁集将触发电子邮件通知审阅者。

并行开发多个功能

代码审查需要时间,提交更新的作者可以使用它来实现其他功能。

每个功能都应在其自己的本地功能分支中实现,该分支基于目标分支的当前HEAD。这样,就不必依赖其他尚未审核通过的change,并且可以独立查看和应用新功能。如果需要,也可以将新功能基于其他尚未审核通过的change。这将在Gerrit的change之间创建依赖关系,并且只有同时应用了所有change,才能应用每个changechange之间的依赖关系可以从change页面上的Related Changes选项卡中看到。

查看项目

要了解新的更改,您可以查看您感兴趣的项目。对于查看的项目,Gerrit在上传或修改change后会向您发送电子邮件进行通知。您可以决定要通知哪些事件,也可以使用更改搜索表达式来过滤通知。例如,'branch:master file:^.*\.txt$'将仅向master分支中涉及到"txt"文件的更改发送电子邮件通知。

通常,项目团队的成员查看他们自己的项目,然后选择他们感兴趣的更改进行审查。

项目所有者还可以在项目级别配置通知。

增加新的代码审核者

change页面中,可以将审阅者明确添加到change中。然后,将通过电子邮件通知添加的审阅者进行审阅。

主要是,此功能用于请求对已知是修改后的代码方面的专家或所实现功能的涉众的特定人员进行审阅。通常,不需要显式地为每个更改添加审阅者,而是您需要依靠项目团队来监视他们的项目并根据重要性,兴趣,时间等来处理即将到来的更改。

还有一些插件可以自动添加评论者(例如,通过配置或基于git blame注释)。如果需要此功能,应与项目所有者和Gerrit管理员进行讨论。

仪表板

Gerrit支持多种查询运算符,可以根据不同的条件(例如,根据状态,更改所有者,投票等)来查询更改。

显示更改查询结果的页面的URL中包含了这次查询的条件。这意味着您可以在浏览器中为该URL添加书签以保存更改查询。这样,以后可以很容易地重新执行它。

几个变更查询也可以合并到仪表板中。仪表板是Gerrit中的一个页面,用于显示不同部分中的多个更改查询的结果,每个部分具有描述性标题。

My> Changes提供了默认的仪表板(新UI默认主页就是仪表板)。它可以显示已经完成的审核、需要进行的审核和最近关闭的change

用户还可以定义自定义仪表板。可以在浏览器中为仪表板添加书签,以便以后可以重新执行。

还可以自定义My菜单,并向其中添加自定义查询或仪表板的菜单项。

仪表板对于定义自己的change视图非常有用,例如您可以为不同的项目集使用不同的仪表板。

注意:您可以使用limitage查询运算符来限制仪表板查询结果。单击章节标题将执行不带limitage运算符的更改查询,以便您可以检查整个结果集。

提交change

提交change意味着将当前补丁集的代码修改应用于目标分支。提交需要Submmit权限,并且可以通过单击submmit按钮在更改屏幕上完成。

为了能够提交change,必须首先通过在审阅标签上投票批准change。默认情况下,仅当change在每个审阅标签上具有最高值的投票而没有最低值(否决票)的投票时,才能提交更改。项目可以配置自定义标签和自定义提交规则,以控制更改何时可提交。

提交change时,如何将代码修改应用于目标分支,由可在项目级别配置的提交类型控制。

提交change可能会因冲突而失败。在这种情况下,您需要在本地重新设置change,解决冲突并将具有冲突解决方案的提交上传为新补丁集。

如果由于路径冲突而无法合并change,则会在更改屏幕上以红色粗体Cannot Merge标签突出显示该change

变基change

在检查change时,目标分支的HEAD可能会更新。在这种情况下,change可以重新基于目标分支的新HEAD。如果没有冲突,则可以直接在change页面上进行变基,否则必须在本地完成。

在本地进行变基:

// update the remote tracking branches
$ git fetch

// fetch and checkout the change
// (checkout command copied from change screen)
$ git fetch https://gerrithost/myProject refs/changes/74/67374/2 && git checkout FETCH_HEAD

// do the rebase
$ git rebase origin/master

// resolve conflicts if needed and stage the conflict resolution
...
$ git add <path-of-file-with-conflicts-resolved>

// continue the rebase
$ git rebase --continue

// push the commit with the conflict resolution as new patch set
$ git push origin HEAD:refs/for/master

仅当存在Gerrit无法解决的冲突时,才需要进行手动变基。如果需要手动解决冲突,则还取决于为项目配置的提交类型。

通常,change不应无故变基,因为它会增加补丁集的数量并在发出通知时产生噪音。但是,如果对change进行了长时间审核,则可能需要不时重新设置其基准,以便审核者可以查看目标分支当前HEAD的增量。它还表明对这个change仍然有兴趣。

注意:切勿对已经是中央分支一部分的提交进行变基。

放弃/恢复change

有时,在代码检查期间发现change很不好,应该放弃。在这种情况下,可以放弃change,以使它不再出现在未完成的change列表中。

如果以后需要再次使用,可以恢复被放弃的change

使用主题

change可以按主题分组。 这很有用,因为它使您可以使用主题搜索运算符轻松找到相关的change。此外,在change页面上还会显示具有相同主题的change,以便您可以轻松地在它们之间导航。

通常实现同一个功能或用户需求的change按主题分组。

可以在change页面中为change分配主题。

也可以通过在引用名称后附加%topic=…或通过使用命令行标志--push-option(别名为-o,后面加上topic=…)来设置推送主题。

Gerrit可以配置为一次单击即可提交主题中的所有change,即使主题跨越多个项目也是如此。

通过push来设置主题:

$ git push origin HEAD:refs/for/master%topic=multi-master

// this is the same as:
$ git push origin HEAD:refs/heads/master -o topic=multi-master

使用hashtags

hashtags是与change相关联的自由格式字符串,类似社交媒体平台上的用户标签。 在Gerrit中,您可以使用UI的专用区域将hashtagschange改明确关联。 它们不会从提交消息或注释中解析。

与主题类似,hashtags可用于将相关change分组在一起,并使用hashtag:运算符进行搜索。 与主题不同,change可以具有多个hashtags,并且仅用于信息分组。 具有相同标签的更改不必一起提交。

仅在NoteDb下运行时,hashtags功能才可用。

通过push来设置hashtags:

$ git push origin HEAD:refs/for/master%t=stable-bugfix

// this is the same as:
$ git push origin HEAD:refs/heads/master -o t=stable-bugfix

Work-in-Progresschange

任何人都可以看到进行中的(WIP)change,但不会通知审阅者或要求审阅者采取任何措施。

具体来说,当您将更改标记为"Work-in-Progress"时:

  • 大多数操作都不会通知审阅者,例如添加或删除,发布评论等。有关更多信息,请参见REST API文档表。
  • change不会显示在审阅者的仪表板上。

在以下情况下,WIP更改非常有用:

  • 您仅实现了change的一部分,但是想要在请求审阅者反馈之前将change推送到服务器以运行测试或执行其他操作。
  • 在审阅过程中,您意识到您需要对change进行新的处理,并且您想要在完成更新之前停止将更改通知给审阅者。

要将change的状态设置为"Work-in-Progress",可以使用命令行或用户界面。要使用命令行,请将%wip附加到您的推送请求中。

$ git push origin HEAD:refs/for/master%wip

或者,从change页面中单击WIP

change标记为可供审核,请将%ready附加到您的推送请求中。

$ git push origin HEAD:refs/for/master%ready

或者,从change页面单击Ready

只有change所有者,项目所有者和站点管理员才能将change标记为work-in-progressReady

在新的PolyGerrit用户界面中,您可以通过从More菜单中选择WIP来将更改标记为WIP。 change页面以黄色标题更新,表明change页面处于work-in-progress状态。要将change标记为可以审阅,请单击Start Review

私有change

私有change是只有change所有者、审阅者和拥有全局查看私更改功能的用户才能看到的change。私有change在许多情况下很有用:

  • 您希望一组协作者在正式审核开始之前就审核change。通过创建一个私有change并仅添加选定的少数几个审阅者,您可以控制哪些人可以看到该change并获得第一意见,然后再向所有审阅者开放。
  • 您想要在正式审查开始之前检查change的显示。通过将change标记为私有而没有审阅者,没有人可以过早地评论您的change
  • 您想使用Gerrit在不同设备之间同步数据。通过创建不带审阅者的私有change,您可以从一台设备推送并在另一台设备上获取。
  • 您想要对敏感的change进行代码审查。通过在私有change中查看安全修复程序,外部人员无法在推出安全修复程序之前查看到该修复。即使在合并change后,该审查也可以保持私有。

要创建私有change,请使用private选项进行推送。

推送私有change

$ git commit
$ git push origin HEAD:refs/for/master%private

除非您指定remove-private选项,否则change将在随后的推送中保持私有状态。再者,Web UI提供按钮以再次将change标记为私有和非私有。

当使用由另一个用户提交的commit来推送私有change时,这个用户不会自动被添加为审阅者,而是必须明确添加。

对于必须验证私有change的CI系统,可以授予特殊权限(查看私有change)。在这种情况下,应注意防止CI系统公开秘密细节。

忽略或标记change为“已审阅”

change可以忽略,这意味着它们将不会出现在“即将进行的审阅”(Incoming Reviews)仪表板中,并且任何相关的电子邮件通知都将被取消。当您作为审阅者不想积极参与审阅,但又不想让自己退出该change的审阅时,此功能很有用。

或者,可以将其标记为“已审核”(Reviewed),而不是完全忽略该change。将change标记为“已审阅”意味着在上传新补丁集之前,该change不会在仪表板上突出显示。

内联编辑

可以直接在Web UI中内联编辑change。这对于立即进行小的更正并将其发布为新补丁集很有用。

也可以内联创建新change

项目管理

每个项目都有一个项目所有者来管理该项目。

项目管理包括项目访问权限的配置,但是项目所有者拥有更多的可能性来定制项目的工作流,这在项目所有者指南中进行了描述。

不使用代码审查

使用Gerrit进行代码审查是可选的,您可以不使用代码审查就将Gerrit用作纯Git服务器。
绕过审核的推送:

$ git commit
$ git push origin HEAD:master

// this is the same as:
$ git commit
$ git push origin HEAD:refs/heads/master

在项目访问权限中启用绕过代码检查。项目所有者必须通过在目标分支(refs/heads/<branch-name>)上分配Push权限来允许它。

如果您选择不使用代码审查,请记住这一点。提交代码时,只要目标分支的HEAD已移动,则始终需要手动进行merge/rebase。您认为避免审查工作流程的额外复杂性会让代码提交与合入变得更容易,实际上可能并不是这样。

项目所有者可以设置在推送时自动合并,这样直接推送到存储库时可以在服务器端自动merge/rebase

用户引用

用户配置数据(例如首选项preferences)存储在All-Users项目的每个用户引用下。用户的引用是基于用户的帐户ID(整数)。用户引用由引用名称中的后两位数字(nn)分片,从而导致引用格式为refs/users/nn/accountid

首选项

在Gerrit Web UI里有多个选项可以控制最终的呈现效果。用户可以在Settings> Preferences下配置其首选项。用户的首选项存储All-Users项目的每个用户引用下的preferences.config文件中,该文件样式类似git config

可以配置以下首选项:

  • Display In Review Category:
    此设置控制如何显示change列表和仪表板上的审阅标签的值。
    • None:
      对于每个审阅标签,仅显示投票值。批准显示为绿色复选标记图标,否决显示为红色X图标。
    • Show Name:
      对于每个审阅标签,将显示投票值以及投票用户的全名。
    • Show Email:
      对于每个审阅标签,将显示投票值以及投票用户的电子邮件地址。
    • Show Username:
      对于每个审阅标签,将显示投票值以及投票用户的用户名。
    • Show Abbreviated Name:
      对于每个审阅标签,将显示投票值以及投票用户全名的缩写。
  • Maximum Page Size:
    一页上显示的最大条目数,例如在change,项目,分支或组中进行分页时使用。
  • Date/Time Format:
    用于呈现日期和时间戳的格式。
  • Email Notifications:
    此设置控制电子邮件通知。
    • Enabled:
      电子邮件通知已启用。
    • Every comment:
      电子邮件通知已启用,并且您将在自己撰写的评论上以抄送的形式收到电子邮件通知。
    • Disabled:
      电子邮件通知已停用。
  • Email Format:
    此设置控制Gerrit发送的电子邮件格式。请注意,如果管理员已禁用Gerrit实例的HTML电子邮件,则此设置无效。
    • Plaintext Only:
      电子邮件通知仅包含纯文本内容。
    • HTML and Plaintext:
      电子邮件通知包含HTML和纯文本内容。
  • Default Base For Merges:
    当打开change页面以进行合并提交时,此设置控制应在Diff Against下拉列表中预先选择哪个base。
    • Auto Merge:
      当打开change页面以进行合并提交时,在Diff Against下拉列表中预先选择Auto Merge
    • First Parent:
      当打开change页面以进行合并提交时,在Diff Against下拉列表中预先选择First Parent
  • Diff View:
    单击change页面的文件路径时,应显示Side-by-Side还是Unified差异视图。
  • Show Site Header / Footer:
    是否应显示网站的页眉和页脚。
  • Show Relative Dates In Changes Table:
    更改列表和仪表板中的时间戳是否应显示为相对时间戳,例如“12天前”,而不是绝对时间戳,例如“4月15日”。
  • Show Change Sizes As Colored Bars:
    更改大小是否应显示为彩色条。如果禁用,则添加和删除的行数将显示为文本,例如 ‘+297,-63’。
  • Show Change Number In Changes Table:
    是否应在change列表和仪表板中显示带有数字变更ID的ID列。
  • Mute Common Path Prefixes In File List:
    change页面上文件列表中的公用路径前缀是否应显示为灰色。
  • Insert Signed-off-by Footer For Inline Edit Changes:
    是否应将Signed-off-by页脚自动插入到从web UI创建的更改中(例如,通过project页面上的Create ChangeEdit Config按钮以及change页面上的Follow-Up按钮)。
  • Publish comments on push:
    推送更新到还处于open状态的change时,默认情况下是否发布任何未完成的草稿注释。这个首选项只是设置默认值。仍然可以使用push选项覆盖行为。
  • Use Flash Clipboard Widget:
    是否应使用Flash剪贴板小部件。如果启用了Flash插件并且Flash插件可用,那么Gerrit会在需要频繁复制的ID和命令(例如,更改ID,提交ID和下载命令)旁边提供一个“复制到剪贴板”图标。请注意,仅当Flash插件可用且JavaScript Clipboard API不可用时,才显示此选项。
  • Set new changes work-in-progress:
    默认情况下,是否将新更改作为work-in-progress上传。这个首选项只是设置默认值。仍然可以使用push选项覆盖行为。

另外,可以自定义My菜单的菜单项。这可以用于快速导航到常用页面,例如配置过的仪表板。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最新Gerrit2.16.15版本用户指南-中文文档 的相关文章

  • 【Java】枚举类和注解

    目录 一 枚举类的使用 1 枚举类的说明 xff1a 2 如何自定义枚举类 xff1f 3 JDK 5 0 新增使用enum定义枚举类 二 注解的使用 1 注解的理解 2 注解的使用示例 3 如何自定义注解 4 元注解 xff1a 5 如何
  • 【Java】集合

    目录 一 集合与数组 1 集合与数组存储数据概述 xff1a 2 数组存储的特点 xff1a 3 数组存储的弊端 xff1a 4 集合存储的优点 xff1a 5 集合的分类 6 集合的框架结构 二 Collection接口 1 单列集合框架
  • 【Java】泛型

    目录 一 泛型简介 1 泛型的概念 2 泛型的引入背景 3 引入泛型的目的 二 泛型在集合中的应用 1 在集合中没有使用泛型的例子 2 在集合中使用泛型的例子1 3 在集合中使用泛型例子2 4 集合中使用泛型总结 xff1a 三 自定义泛型
  • 【Java】IO流

    目录 一 File类的使用 1 File类的理解 2 File的实例化 3 File类的常用方法 4 内存解析 5 小练习 二 IO流概述 1 简述 2 流的分类 3 IO流的体系分类 4 输入 输出标准化过程 三 节点流 xff08 文件
  • 【Java】网络编程

    目录 一 概述 二 网络通讯要素 3 通讯要素一 xff1a IP和端口号 4 通信要素二 xff1a 网络通信协议 5 套接字Socket 三 TCP网络编程 1 基于Socke的TCP编程 四 UDP网络编程 1 简述 2 Datagr
  • 【Java】反射

    目录 一 反射的概述 1 反射的简介 2 反射动态性体现 3 反射机制提供的功能 4 相关API 二 Class类 1 Class简述 2 Class类的常用方法 3 获取Class实例的几种方式 xff1a 4 Class实例可以代表的结
  • 【Java】之Java8新特性

    Java 基础系列的笔记终于完成了 x1f389 x1f389 x1f389 目录 一 Lambda 表达式 1 Lamdba 表达式概述 2 使用 Lambda 表达式前后对比 3 怎样使用Lambda表达式 4 Lamdba表达式总结
  • 【Docker】基础使用

    目录 一 Docker简介 二 Docker核心概念 三 Docker安装 四 Docker常用操作 1 镜像操作 2 容器操作 3 安装MySQL 一 Docker简介 Docker 是一个开源的应用容器引擎 xff0c 基于Go 语言并
  • ASP.NET MVC | 简介

    目录 前提 1 教程 2 MVC 编程模式 最后 前提 在学习学过很多课程 xff0c 但是最主要学的还是ASP NET MVC这门课程 xff0c 工作也是用的ASP NET MVC xff0c 所以写一点ASP NET MVC的东西 x
  • ASP.NET MVC | 创建应用程序

    目录 首先 NO 1 No 2 App Data 文件夹 Content 文件夹 Controllers 文件夹 Models 文件夹 Views 文件夹 Scripts 文件夹 最后 首先 一步一步的来 xff0c 电脑上需要安装vs20
  • 关于Docker的Debian和Ubuntu镜像

    Debian和Ubuntu都是目前较为流行的Debian系的服务器操作系统 xff0c 在Docker Hub上都可以直接搜索到官方版本 一 搜索Debian 二 搜索Ubuntu Ubuntu相关镜像很多 xff0c 使用 s 参数 xf
  • ASP.NET MVC | 增删改查小项目-MySQL数据库

    目录 前提 数据库和表 完成展示 主页 xff1a Index 添加商品页面 xff1a Add 修改商品页面 xff1a Edit 删除 xff1a Del 代码 No 1 配置MySQL数据库 No 2 初始化数据 No 3 删除操作
  • 用Navicat Premium连接数据库!

    Navicat Premium介绍 Navicat Premium 是一套数据库开发工具 xff0c 让你从单一应用程序中同时连接 MySQL MariaDB MongoDB SQL Server Oracle PostgreSQL 和 S
  • 介绍一款非常好用的截图软件-《Snipaste》

    目录 Snipaste介绍 Snipaste下载 Snipaste功能介绍 总结 Snipaste介绍 非常好用的截图软件 xff0c 一句话 xff0c 非常非常好用 xff0c 比你用过任何的截图软件都好用 xff0c 不好用你顺着网线
  • 推荐一款卸载软件的小工具-《UninstallToo》

    目录 UninstallToo介绍 UninstallToo下载 UninstallToo使用 总结 UninstallToo介绍 Uninstall Tool 是一款可以用来替代 添加 删除程序 的工具 它允许您显示隐藏的安装程序 xff
  • 【MySQL】下载(超详细教程)

    目录 First 下载 Second 安装 Third 检测是否安装 Last 总结 First 下载 首先 xff0c 我们一步一步跟着我的操作来 xff0c 不能越步骤 xff0c 很容易报错 xff0c 就芭比Q了 第一步直接进入这个
  • 【ASP. Net Mvc】毕设之【在线考试项目】

    前提 这个项目是毕设 xff0c 是用asp net mvc和SQL server数据库完成的 xff0c 分为前端和后台 后台功能 xff1a 老师添加试卷 xff0c 上传试卷 xff0c 审核试卷 xff0c 管理学生 前端功能 xf
  • 继承——Person为父类,Teacher和Student都继承Person

    一 题目 按照要求完成以下操作 创建Person xff0c Teacher xff0c Student类 其中 xff0c Person为父类 xff0c Teacher和Student都继承Person Person中有属性 xff1a
  • c语言求数组中10 个整数中最大值

    c语言求数组中10 个整数中最大值 要求在数组中输入10个整数 xff0c 输出最大值 这里先用一种简单的方法 xff0c 创建一个变量max xff1d 0 xff0c 用max与这10个数依次比较 xff0c 如果比max大就把它的值赋
  • c语言详细解答辗转相除法求两个数的最小公倍数

    C语言详细解答辗转相除法求两个数的最小公倍数 1 辗转相除法的用法 最大公约数 辗转相除法是用一个大的数除以一个小的数 xff0c 如果有余数 xff0c 就用被除数 余数 xff0c 如果还有余数就继续用 xff08 上一个公式的 被除数

随机推荐

  • Linux 嵌入式 笔记 NFS网络文件系统

    文章目录 Linux 嵌入式 笔记 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 文章目录前言一 nfs 相关命令二 原理1 第一点2 第二点 总结 前言 注意 xff1a
  • linux下cpu锁定频率以及频率设置

    linux下cpu锁定频率以及频率设置 环境如下 ubuntu22 04cpu为5700g 前期准备 使用工具为 xff1a cpufrequtils span class token function sudo span span cla
  • CentOS7安装xrdp(windows远程桌面连接linux)

    前提 CentOS安装桌面 xff0c 如果无桌面 xff0c 请执行 xff1a yum y groups install 34 GNOME Desktop 34 startx 方法一 配置源 yum install epel y 安装x
  • Linux CPU超频设置

    查看当前cpu运行频率 xff1a cat proc cpuinfo grep i cpu mhz 开始设置 xff1a cpupower c all frequency set g performance 或者 cpupower freq
  • Ozone调试经验总结

    如何查看内存 view gt memory打开内存窗口即可查看 如何读写内存 Target ReadU32 addr Target WriteU32 addr value 遇到不会的 xff0c 可以使用help命令找找看
  • 元宇宙创作者必备技能TouchDesigner

    元宇宙的资源清单又更新啦 github com shadowcz007 awesome metaverse 感谢ML211 提供线索metaworld app 感谢ML1462 提供线索 The Sims Resource opus Git
  • 栈的入栈和出栈的顺序规律

    栈的入栈和出栈的顺序规律是先进后出 xff0c 所以出栈的可能数目跟入栈的可能排列数目是一致的 a的出入有2中可能 xff0c b的出入有2种可能 xff0c c的出入有2种可能 xff0c d只需要关系入 xff0c 只有一种可能 所以出
  • TCP和UDP协议发送数据包的大小

    在进行UDP编程的时候 我们最容易想到的问题就是 一次发送多少bytes好 当然 这个没有唯一答案 xff0c 相对于不同的系统 不同的要求 其得到的答案是不一样的 这里仅对像ICQ一类的发送聊天消息的情况作分析 xff0c 对于其他情况
  • Nodejs开发:如何让node app的程序一直运行?

    情境 运行nodejs的程序 xff0c 使用命令 xff1a node xxx js xff0c 但是关掉终端 xff0c 程序也关闭了 xff0c 如何让node app的程序一直运行 xff1f 解决 1 安装forever npm
  • Godot基础教程02:全都是节点

    在这里先劝退一波人 xff1a 本教程只会涉及2D内容 xff0c 不会涉及3D内容 创建节点 接上一章 xff0c 在左侧的场景面板中 xff0c 可以看到 xff1a 由于本教程只讲2D内容 xff0c 所以这里我们应该选择2D场景 x
  • docker安装gitlab-ce镜像,使用其他端口,亲测可用

    首先鄙视一下那些直接复制粘贴当自己博文的 xff0c 误导别人 xff0c 害我改了好久T T 安装步骤 xff1a 创建数据目录 mkdir p data gitlab config mkdir p data gitlab logs mk
  • iOS 录音,播放,转码MP3,上传语音文件

    语音文件 AVAudioRecorder recorder NSTimer timer NSString urlPlay BOOL isPlay pragma mark 61 61 61 61 61 61 61 61 61 语音文件 61
  • CentOS使用yum安装MySQL5.7报检索密钥错误解决方法

    在CentOS上使用yum安装MySQL时检索密钥错误的解决方法 参考 使用yum安装MySQL时报错 yum y install mysql mysql server yum y install mysql community serve
  • 安装django

    使用pip安装 pip install django 61 61 span class hljs string 39 1 8 39 span 检查django版本 python c span class hljs string 39 imp
  • python,pycharm报错 ModuleNotFoundError: No module named PIL最简单的解决方法

    python pycharm报错 ModuleNotFoundError No module named 39 PIL 最简单的解决方法 1进入cmd命令 2输入pip install Pillow即可 如图 如果对你有帮助 xff0c 请
  • docker中使用Ubuntu中文乱码问题解决

    一 前言 最近在docker中使用Ubuntu作为编译环境 xff0c 遇到了中文乱码情况 xff0c 分为不同的解决场景 xff0c 下面分别给出解决方法 下面的方法都不是将系统的语言修改为中文 xff0c 而是能够正确显示和输入中文 g
  • 在docker的centos镜像中使用systemctl启动slapd服务报错

    前言 使用docker搭建服务环境 xff0c 拉取了一个Centos7镜像 xff0c 在镜像中使用systemctl命令启动sladpd服务 xff0c 已经使用 privileged 61 true启用特权模式 xff0c 但还是报错
  • 逻辑卷管理器(LVM)

    一 什么是LVM xff1f LVM Logical Volume Manager 逻辑卷管理是在Linux2 4内核以上实现的磁盘管理技术 它是Linux环境下对磁盘分区进行管理的一种机制 现在不仅仅是Linux系统上可以使用LVM这种磁
  • Ubuntu使用Docker搭建编译环境完整教程

    前言 因为只有一台编译服务器 xff0c 但是我们需要在服务器上搭建不同的编译环境 xff0c 不同的编译环境区别巨大 xff0c 甚至可能需要是不同的Ubuntu版本 xff0c 所以我们可以使用Docker xff0c 搭建不同的编译环
  • 最新Gerrit2.16.15版本用户指南-中文文档

    这是为Gerrit最终用户准备的Gerrit指南 它说明了标准的Gerrit工作流程以及指导用户可以根据个人喜好来设置并使用Gerrit 为了更好地理解本指南 xff0c 读者最好了解Git xff0c 并熟悉基本的git命令和工作流程 什