Maven Git 约定
本文档描述了开发人员应该如何使用 Git。
Git 配置
对于不是提交者的贡献者
Apache git 存储库位于<<git://git.apache.org >>。但是,ASF 使用 github.com 上的克隆来使人们更容易通过拉取请求来贡献更改。
要贡献在 git 中维护的 Maven 组件,请按照以下步骤操作:
- 为您希望处理的错误或改进创建一个 JIRA。Maven 项目使用 JIRA 来组织和跟踪我们的工作,特别是跟踪哪些更改包含在哪些版本中。
- 从 github.com 创建一个官方 ASF 克隆的分支。例如,
https://github.com/apache/maven-scm
。 - 创建一个以您的 JIRA 票命名的分支。这不是必需的,但它使 Maven 提交者更容易跟踪您的贡献。
- 进行更改。与往常一样,单元或集成测试使我们更容易接受您的更改。
- 发出拉取请求以将您的更改拉取到官方克隆。将您的拉取请求链接添加到 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