Maven Git 约定

本文档描述了开发人员应该如何使用 Git。

Git 配置

对于不是提交者的贡献者

Apache git 存储库位于<<git://git.apache.org >>。但是,ASF 使用 github.com 上的克隆来使人们更容易通过拉取请求来贡献更改。

要贡献在 git 中维护的 Maven 组件,请按照以下步骤操作:

  1. 为您希望处理的错误或改进创建一个 JIRA。Maven 项目使用 JIRA 来组织和跟踪我们的工作,特别是跟踪哪些更改包含在哪些版本中。
  2. 从 github.com 创建一个官方 ASF 克隆的分支。例如,https://github.com/apache/maven-scm
  3. 创建一个以您的 JIRA 票命名的分支。这不是必需的,但它使 Maven 提交者更容易跟踪您的贡献。
  4. 进行更改。与往常一样,单元或集成测试使我们更容易接受您的更改。
  5. 发出拉取请求以将您的更改拉取到官方克隆。将您的拉取请求链接添加到 JIRA。提交者将从这里获取它。

对于提交者

当然,提交者可以直接提交到 ASF 存储库。对于复杂的更改,您可能会发现在 github 上提出拉取请求以更轻松地与他人协作是很有价值的。

提交消息模板

提交应该一次集中在一个问题上,因为这使得其他人更容易审查提交。

提交消息应使用此模板:

[ISSUE-1] <<Summary field from JIRA>>
Submitted by: <<Name of non-committer>>

o Comments

在哪里:

  • 如果没有相关的 JIRA 问题,则可以省略ISSUE-1 ,但强烈建议您创建一个以进行重大更改。
  • 仅在为非提交者申请补丁时才需要指定提交者。
  • 评论一些关于解决方案的可选词。

例如:

[MNG-1456] Added the foo to the bar
Submitted by: Baz Bazman

o Applied without change

应用用户补丁

为了保持贡献的历史清晰,提交者通常应该在没有任何重大修改的情况下应用补丁,然后创建他或她自己的提交以进行进一步的修改。但是,提交者永远不应该将代码提交到不适合发布的实时分支。如果贡献需要大量工作才能使其有用,请将其提交到分支,修复并合并分支。

如果用户创建了拉取请求,则提交者负责关闭该拉取请求。您可以通过在提交消息中添加注释来做到这一点:

  Closes #NNN.

其中 NNN 是拉取请求的编号。

编辑提交消息

编辑最后提交评论:

$ git commit --amend -m "new comment"

工作流程

svn 人的工作流程是这样的:

 $ git pull
 $ hack hack hack
 $ git push
 // fails, because someone else has already pushed to master
 $ git pull
 // this creates some merges
 $ git push

更安静的工作流程:

$ git pull
$ hack hack hack
$ git push
// fails, because someone else has already pushed to master
$ git fetch
// this moves 'origin/master'
$ git rebase origin/master
// this reapplies your local changes on top of origin/master
$ git push

开发时其他有用的 Git 命令

如果您已经完成了大量工作,并且想放弃更改并从头开始,请使用此命令恢复到原始结帐:

$ git checkout .

待办事项.gitignore

强大的 git 结帐

这种结帐对于经验丰富的 git 用户来说是典型的,并且可以作为其他人的灵感;像往常一样,最好的学习方式是边做边学。为 maven-surefire 显示的示例

转到 https://github.com/apache/maven-surefire 并将 surefire 分叉到您自己的 github 帐户。

从零开始(没有现有的克隆)

git clone https://github.com/<youraccount>/maven-surefire.git
git remote add apache https://git-wip-us.apache.org/repos/asf/maven-surefire.git
git remote add asfgithub https://github.com/apache/maven-surefire.git
git config --add remote.asfgithub.fetch "+refs/pull/*/head:refs/remotes/asfgithub/pr/*"
git fetch --all

(您可以考虑在上面的 git config 语句中添加 --global 以始终获取任何名为“asfgithub”的远程的拉取请求)

在此设置中,运行“git push”通常会推送到您的个人 github 帐户。此外,来自 github 的所有拉取请求也会被提取到您的本地克隆,使用

gitk --all

试图弄明白这一切。这是要理解的重要命令!(可能需要另外安装gitk)

gitk 还有一个非常出色的上下文菜单,它比大多数人在第一印象中意识到的上下文敏感得多。右键单击 github pull-request 中的提交将允许您直接在 gui 中挑选。

如果你在 master 分支上工作,你可以做这样的事情:

git push # your github account
git push apache # the authoritative apache repo

如果您在多台计算机之间切换,使用您的 github 帐户作为半成品的存储非常好,请始终在离开当前计算机之前推送到 github,然后从拉下一台计算机开始。

合并拉取请求

git merge pr/10 # merge pull request number 10 from asf@github into master
git push apache # upload to apache

或者,如果您对变基感到满意;

git checkout pr/10
git rebase apache/master
git push apache