我应该在为apache kafka创建PR时创建fork的分支吗?

时间:2018-01-25 03:05:28

标签: git github apache-kafka

我打算为Kafka开源做贡献。我将Kafka分叉到我的git hub帐户中。 然后我在当地克隆了它。现在,我应该在master中进行更改还是应该创建一个以本地票证命名的分支?

1 个答案:

答案 0 :(得分:1)

创建一个分支来实现该功能或bugfix,将你的分支推送到你自己的存储库(你的分支),然后打开一个pull-request来将你的分支与你的分支合并到主分支(通常是master )在官方Kafka存储库中。

以下是对GitHub上的项目做出贡献时标准工作流程的更详细说明:

  

GitHub Standard Fork&拉取请求工作流程   https://gist.github.com/caioproiete/256b560d008d39afc0814a19f41a1d49

无论您是尝试回馈开源社区还是在自己的项目上进行协作,了解如何正确分叉和生成拉取请求至关重要。不幸的是,当你最初学习这个过程时,很容易犯错或不知道你应该做些什么。我知道我当然遇到了相当大的麻烦,我发现很多关于GitHub和互联网的信息都是零碎和不完整的 - 这里描述的过程的一部分,另一个,在不同的地方常见的挂断,等等。

为了尝试为自己和他人提供这些信息,我发现这个简短的教程是创建fork,执行工作,发出pull请求以及合并pull请求的相当标准的过程。回到原来的项目。

创建一个分支

只需转到GitHub页面,然后点击" Fork"按钮。就这么简单。完成后,您可以使用自己喜欢的git客户端克隆您的仓库或直接进入命令行:

# Clone your fork to your local machine
git clone git@github.com:USERNAME/FORKED-PROJECT.git

保持你的叉子最新

虽然这不是一个绝对必要的步骤,但如果您计划做的不仅仅是一个小小的快速修复,那么您将要确保通过跟踪原始& #34;上游"你分叉的回购。为此,您需要添加遥控器:

# Add 'upstream' repo to list of remotes
git remote add upstream https://github.com/UPSTREAM-USER/ORIGINAL-PROJECT.git

# Verify the new remote named 'upstream'
git remote -v

每当您想要使用最新的上游更改来更新fork时,您需要首先获取上游repo的分支和最新提交以将它们带入您的存储库:

# Fetch from upstream remote
git fetch upstream

# View all branches, including those from upstream
git branch -va

现在,签出你自己的主分支并合并上游repo的主分支:

# Checkout your master branch and merge upstream
git checkout master
git merge upstream/master

如果本地主分支上没有唯一的提交,git将只执行快进。但是,如果您一直在对主人进行更改(在绝大多数情况下您可能不应该 - 请参阅下一部分,您可能需要处理冲突。在这样做时,请小心尊重所做的更改上游。

现在,您的本地主分支是最新的,上游修改了所有内容。

做你的工作

创建分支

每当您开始处理新功能或错误修复时,创建新分支都很重要。它不仅适用于git工作流程,而且还可以使您的更改保持整齐,并与主分支分开,以便您可以轻松地为您完成的每项任务提交和管理多个拉取请求。

创建一个新分支并开始处理它:

# Checkout the master branch - you want your new branch to come from master
git checkout master

# Create a new branch named newfeature (give your branch its own simple informative name)
git branch newfeature

# Switch to your new branch
git checkout newfeature

现在,去镇上躲避并做出你想做的任何改变。

提交提款请求

清理工作

在提交您的请求之前,您可能需要做一些事情来清理您的分支,并使原始repo的维护者尽可能简单地测试,接受和合并您的工作。< / p>

如果对上游主分支进行了任何提交,您应该重新设置开发分支,以便合并它将是一个简单的快进,不需要任何冲突解决工作。

# Fetch upstream master and merge with your repo's master branch
git fetch upstream
git checkout master
git merge upstream/master

# If there were any new commits, rebase your development branch
git checkout newfeature
git rebase master

现在,可能需要将一些较小的提交压缩为少量更大,更具粘性的提交。您可以使用交互式rebase执行此操作:

# Rebase all commits on your development branch
git checkout 
git rebase -i master

这将打开一个文本编辑器,您可以在其中指定要压缩的提交。

提交

一旦您提交并将所有更改推送到GitHub,请转到GitHub上的fork页面,选择您的开发分支,然后单击拉取请求按钮。如果您需要对pull请求进行任何调整,只需将更新推送到GitHub即可。您的请求将自动跟踪开发分支上的更改并进行更新。

接受并合并拉取请求

请注意,与从创建fork并生成pull请求的人的角度编写的前面部分不同,本节是从处理传入pull请求的原始存储库所有者的角度编写的。因此,&#34; forker&#34;将原始存储库称为upstream,我们现在将其视为该原始存储库和标准origin遥控器的所有者。

签出并测试拉取请求

打开.git/config文件,在[remote "origin"]下添加一个新行:

fetch = +refs/pull/*/head:refs/pull/origin/*

现在您可以获取并检出任何拉取请求,以便您可以测试它们:

# Fetch all pull request branches
git fetch origin

# Checkout out a given pull request branch based on its number
git checkout -b 999 pull/origin/999

请注意,这些分支机构将是只读的,您无法推送任何更改。

自动合并拉取请求

如果合并是简单的快进,只需单击GitHub上拉取请求页面上的按钮即可自动完成合并。

手动合并拉取请求

要手动进行合并,您需要签出源仓库中的目标分支,直接从分支中提取,然后合并并推送。

# Checkout the branch you're merging to in the target repo
git checkout master

# Pull the development branch from the fork repo where the pull request development was done.
git pull https://github.com/forkuser/forkedrepo.git newfeature

# Merge the development branch
git merge newfeature

# Push master with the new feature merged into it
git push origin master

现在您已经完成了开发分支,您可以自由删除它。

git branch -d newfeature

<强>版权

2017年版权所有,Chase Pettit

麻省理工学院执照,http://www.opensource.org/licenses/mit-license.php

补充阅读

<强>来源