7

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

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

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

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

4

4 回答 4

5

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

  1. 并非程序员所做的所有修改都旨在或适合提交给开源项目。
  2. 即使是这样,如果在您处理代码时存储库有更新,您通常希望将这些更改合并到您的工作副本中。

好消息是,由于您使用的是体面的版本控制软件,因此通常不会那么难做您需要的事情。我是一个颠覆者(由于公司政策),所以我并不特别了解 GIT,但在阅读了这篇 wiki 文章之后,它似乎几乎是一样的交易。只要您将文件放在本地存储库中,您就不必再次应用补丁。您可以使用已应用的补丁更新本地副本!

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

您可以使用您最喜欢的文本编辑器,但实际上在这种情况下使用 3 路合并工具非常方便。 Meld就是这样一种适用于 Linux 的工具,但我敢肯定那里有很多。

于 2013-07-15T07:23:17.397 回答
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

参考:

于 2015-11-25T04:21:08.257 回答
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
于 2013-07-13T16:56:20.250 回答
-1

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

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

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

  1. 分布式工作流
  2. 为项目做贡献

如果您有兴趣,还可以阅读有关GitHub 如何使用拉取请求的信息。

于 2013-07-13T19:49:18.993 回答