
开源项目可以 Fork 成私有库吗?然后私有库可以提交 PR 吗?
假设有一个开源项目
我想用这个开源项目开发产品(私有不开源),但同时还想给这个项目贡献代码(提交 PR )。
如上需求最专业且简单的做法是怎样的?
1 Howlaind Jul 16, 2020 via Android 看协议嘛,像 GPL 肯定就不能闭源,而 Apache 协议就可以 |
3 mercury233 Jul 16, 2020 clone 上游到本地,在自己账号新建一个空私有库,remote add 并 push 需要 PR 的,再 fork 一个,然后把对应的分支推上去 |
4 tlerbao OP @mercury233 没太明白呢? |
5 passerbytiny Jul 16, 2020 via Android fork 跟开源协议没关系,跟 github/gitlab 的用户协议有关。按照 github 的用户协议,公开库不管任何协议,都允许被 fork,这样明显是不允许 fork 后变成私有库的(不然被 fork 的库就成袁大头了)。 fork 不是 PR 的充分条件,任何库都可以提 PR 的,不一定非要 fork 。然而你这私有库给公有库提交 PR,公开库那边只能看到 PR 却无法追踪源分支,大概率不被接受,可能还要挨骂。 |
6 mercury233 Jul 16, 2020 @tlerbao 就是不 fork 而直接新建一个私有库 |
你要私有开发,大概率要添加敏感内容,这样你的分支也不可能原封不动的合并回去。你可以搞两个库,一个是 clone 的私有库,一个是 fork 的公开库,前者搞开发,后者搞贡献,两者之间搞脱敏合并(手动合并,或者自动合并后再 rebase -i )。 |
8 otakustay Jul 16, 2020 fork 本来就只是一个标准的 git 操作(外加给你标一个 forked from xxx 的标记),不要那个标记的话自己 git 操作就行了 |
9 tlerbao OP @passerbytiny 不 fork 发起 pr 的时候没办法选择目标仓库的吧 |
10 tlerbao OP @passerbytiny 我本来就是想搞两个,私有库自建,贡献代码库 fork,然后主在私有库工作开发,当发现有代码比较合适贡献,手动覆盖到 fork 的库然后 push 提交 pr 觉得麻烦所以来问问 |
11 joesonw Jul 16, 2020 fork 到公开库 forked-public, upstream 是原有库 fork forked-public 到 forked-private, upstream 是 forked-public. 然后要 PR 的 cherrypick 出来 push 到 upstream forked-public. 然后在 forked-public 上面开 PR |
13 passerbytiny Jul 16, 2020 via Android @tlerbao 如果你的私有代码跟贡献代码差别多的话,那就没有比现在更省事的方式了。这种方式虽然麻烦,但是是有好处的,私有代码转换到公开代码的过程是很宝贵的经验。 PR 那一块,你可以尝试在目标分支选择源分支来发起 PR,再不行还可以发 git 补丁。 |
14 jatai Jul 16, 2020 我看着你们 满怀羡慕 你们拥有了我们曾经梦寐以求的权利 复制粘贴的权利 向你们的专业致敬 你们正在把开源的变成自己的 把自己的变成祖传的 |
15 CRVV Jul 16, 2020 到 GitHub 的仓库设置里面,如果是一个 fork 来的仓库,会显示 "You cannot change the visibility of a fork. Please duplicate the repository." 所以,开源项目不可以 Fork 成私有库,也没有然后了。 顺便一说,开源项目在闭源项目里用是允许的,包括 GPL 。到 redistribution 也就是再发布软件的时候才有侵权的问题。比如,在不以 GPL 重新发行新代码的情况下,一家公司可以拿 Linux 内核改一改用在自家内部的机器上,但不能拿 Linux 内核改一改然后拿去重新发布(比如拿去卖,比如把代码公开了但是不用 GPL 授权)。 |
17 tlerbao OP @joesonw 开源库 到 forked-public,然后没办法从 forked-public 到 forked-private ; forked-private 只能是把 forked-public 克隆到本地,然后把 private 的 remote 地址填进去。 |
18 RedBeanIce Aug 3, 2020 git 的问题,码云开两个账号玩一下,比在这里问强。 |
19 tlerbao OP @RedBeanIce 当你下次想在 V2EX 问问题的时候,先用你这句话问下自己,自己玩不玩的通。 |
20 RedBeanIce Aug 4, 2020 @tlerbao 抱歉,是我菜了。 |