我正在分叉一个闭源项目的一部分(但不是全部(来制作一个开源项目。到目前为止,我已经创建了一个分支("开放"(,我已经从中删除了我们不打算开源的功能。
现在我可以在这一点上导出"open"分支并将其签入到一个新的空存储库中,该存储库将成为开源版本。
但是,我想保持同步开放源代码和闭源版本之间更改的能力:即,如果我们稍后修复了闭源中的错误,那么也将修复程序同步到开源版本(反之亦然,如果贡献者同意(。
有没有办法在不公开"开放"分支(即封闭分支(的历史的情况下实现这一目标?
当 git 存储提交为更改集时,您可以轻松地将一个存储库的更改挑选到另一个存储库(当然,如果存在相同的更改文件并且它们没有太大差异(。
实现此目的的一种方法是将两个"源"作为远程添加到单个存储库克隆。然后从两个远程获取所有提交(以便您有可用的提交哈希(。然后,您可以签出一个远程的分支,并像任何其他单远程
存储库一样挑选另一个远程存储库的提交。在一个解释非常糟糕的例子中是这样的:
git clone git://blablabla.git mydoublerepo
cd mydoublerepo
git remote add other git://other.git
git fetch other
git checkout -b other_master -t other/master
git cherry-pick origin/master # cherry-picks the top commit off of the other remote's master branch
请注意,无需为此创建单独的克隆,可以将任何存储库作为远程添加到任何其他克隆存储库。