我正在为一个托管在Github上的相对较小的开源项目做出贡献。为了让其他人能够利用我的工作,我在Github上创建了自己的分支(fork)。尽管Github选择的术语是这样,但我不希望完全脱离主要项目。然而,我不希望或期望我的所有工作都被接受到主代码库中。其中的一些已经合并到主代码库中,我希望这种情况可以继续下去。我遇到的问题是如何最好地保持我们两个代码树的状态,以便可以轻松地共享代码。
我可能会遇到的一些情况包括:
- 我提交的代码最终被接受到主代码库中,当我将来从该代码库pull时,在我的代码库中会重复出现这个提交。
- 我提交的代码永远不会被接受到主代码库中,当我将来从该代码库pull时,两个代码树会分叉,并且很难解决。
- 其他人来参与工作,并在我的代码库基础上开始工作。因此,如果可能的话,我应该尽量避免更改我已经push过的提交,例如使用git rebase。
- 我希望向主代码库提交代码。理想情况下,我的更改应该很容易转换成补丁(最好使用git format-patch),并直接、干净地应用到主代码库中。
据我所知,有两种或可能三种处理这个问题的方法,但都不太理想:
- 经常运行git rebase以保持我的更改基于上游代码库的head。通过这种方式,我可以消除重复的提交,但通常必须重写历史记录,这会给那些想从我的工作中派生出工作的人带来问题。
- 经常将上游代码库的更改合并到我的代码库中。这在我的一端可以正常工作,但似乎不容易将我的代码提交到上游代码库。
- 使用这些方法的组合,可能包括git cherry-pick,以保持一切井然有序。
在这种情况下其他人都做了什么?我知道我的情况类似于各种内核贡献者和Linus的主要存储库之间的关系,因此希望有好的处理方法。虽然我对Git还比较新,但我还没有掌握所有它的细节。最后,特别是由于Github,我的术语可能不是完全一致或正确的。请随意纠正我。