如何管理无法推送到上游的开源项目补丁?

时间:2013-07-13 14:14:08

标签: git open-source linux-kernel kernel patch

我正在开发一个开源项目。现在我完成了几个与公司业务相关的补丁,我无法将这些补丁推送到上游。

所以我必须将这些补丁保存在我的本地git存储库中。我必须从上游提取新补丁并解决与补丁的冲突。

任何人都有类似的经历以及如何舒适地使用它?

更新: 就像我有几个补丁一样,Linux内核无法接受,因为这些补丁对内核不友好。我必须每天进行内核构建,我不想每天手工打字。是否有任何工具可以帮助我?

4 个答案:

答案 0 :(得分:5)

到目前为止,答案似乎没有考虑到两件事,我感到有点惊讶:

  1. 并非所有程序员完成的修改都适用于或适合提交给开源项目。
  2. 即使是这样,如果在处理代码时存储库有更新,您通常也希望将这些更改合并到工作副本中。
  3. 好处是,因为你正在使用一个不错的版本控制软件通常不是很难做你需要的。我是一个颠覆家伙(由于公司政策),所以我不是特别了解GIT,但在阅读this wiki article之后,看起来几乎是同样的交易。只要适合本地存储库中的文件,就不必再次应用修补程序。您可以使用已应用的修补程序更新本地副本!

    您的自定义代码可能只涉及存储库代码的一小部分。存储库中的大多数更改可能不会触及您触及的相同代码。您只需使用git pull命令下载所有更新的代码。当您触摸的部分在存储库中更改时,git将最好合并这些更改。你必须手动编辑文件的唯一一次是git检测到无法解决的冲突。我之前提到过的文章,早些时候谈到了这一点。

    您可以使用自己喜欢的文本编辑器,但实际上在这种情况下使用3向合并工具非常方便。 Meld是Linux的一个这样的工具,但我确信那里有很多。

答案 1 :(得分:2)

这是一个可能的工作流程。

初始设置

git clone --origin 'upstream' http://example.com/project.git
cd project
git checkout master
git checkout -b patched
# make changes
git add --all
git commit -m 'internal patches'

新的上游更改

git checkout master
git pull upstream
git checkout patched
git rebase master

<强>参考文献:

答案 2 :(得分:1)

首先在更改项目之前 -

  1. create a branch
  2. Change to that branch for any changes you make
  3. To pull the new patches from the upstream revert back to the master branch and then git pull.

创建分支和更改的命令如下

1. $ git branch <branch name>           // To create a new branch
2. $ git checkout <branch name>         // To change to the branch
3. $ git checkout master                // To change to the master branch

答案 3 :(得分:-1)

  

我正在开发一个开源项目。现在我完成了几个与公司业务相关的补丁,我无法将这些补丁推送到上游。

如果你正在Git上合作一个项目,特别是如果它是开源的,那么人们可能不会让你只想把你想要的东西推到上游回购。您可能要么在拉取请求中提交更改,要么将补丁通过电子邮件发送给其中一个项目经理。

您可以从以下Pro Git章节中了解有关与Git中其他人协作的更多信息:

  1. Distributed Workflows
  2. Contributing to a Project
  3. 如果您有兴趣,还可以阅读how GitHub uses pull requests