开源项目可以 Fork 成私有库吗?然后私有库可以提交 PR 吗?
假设有一个开源项目
我想用这个开源项目开发产品(私有不开源),但同时还想给这个项目贡献代码(提交 PR )。
如上需求最专业且简单的做法是怎样的?
1
Howlaind 2020-07-16 08:59:32 +08:00 via Android
看协议嘛,像 GPL 肯定就不能闭源,而 Apache 协议就可以
|
3
mercury233 2020-07-16 09:12:21 +08:00
clone 上游到本地,在自己账号新建一个空私有库,remote add 并 push
需要 PR 的,再 fork 一个,然后把对应的分支推上去 |
4
tlerbao OP @mercury233 没太明白呢?
|
5
passerbytiny 2020-07-16 09:39:23 +08:00 via Android 1
fork 跟开源协议没关系,跟 github/gitlab 的用户协议有关。按照 github 的用户协议,公开库不管任何协议,都允许被 fork,这样明显是不允许 fork 后变成私有库的(不然被 fork 的库就成袁大头了)。
fork 不是 PR 的充分条件,任何库都可以提 PR 的,不一定非要 fork 。然而你这私有库给公有库提交 PR,公开库那边只能看到 PR 却无法追踪源分支,大概率不被接受,可能还要挨骂。 |
6
mercury233 2020-07-16 09:40:07 +08:00
@tlerbao 就是不 fork 而直接新建一个私有库
|
7
passerbytiny 2020-07-16 09:47:45 +08:00 via Android
你要私有开发,大概率要添加敏感内容,这样你的分支也不可能原封不动的合并回去。你可以搞两个库,一个是 clone 的私有库,一个是 fork 的公开库,前者搞开发,后者搞贡献,两者之间搞脱敏合并(手动合并,或者自动合并后再 rebase -i )。
|
8
otakustay 2020-07-16 09:48:48 +08:00
fork 本来就只是一个标准的 git 操作(外加给你标一个 forked from xxx 的标记),不要那个标记的话自己 git 操作就行了
|
9
tlerbao OP @passerbytiny 不 fork 发起 pr 的时候没办法选择目标仓库的吧
|
10
tlerbao OP @passerbytiny 我本来就是想搞两个,私有库自建,贡献代码库 fork,然后主在私有库工作开发,当发现有代码比较合适贡献,手动覆盖到 fork 的库然后 push 提交 pr
觉得麻烦所以来问问 |
11
joesonw 2020-07-16 11:14:01 +08:00
fork 到公开库 forked-public, upstream 是原有库
fork forked-public 到 forked-private, upstream 是 forked-public. 然后要 PR 的 cherrypick 出来 push 到 upstream forked-public. 然后在 forked-public 上面开 PR |
13
passerbytiny 2020-07-16 11:58:57 +08:00 via Android
@tlerbao 如果你的私有代码跟贡献代码差别多的话,那就没有比现在更省事的方式了。这种方式虽然麻烦,但是是有好处的,私有代码转换到公开代码的过程是很宝贵的经验。
PR 那一块,你可以尝试在目标分支选择源分支来发起 PR,再不行还可以发 git 补丁。 |
14
jatai 2020-07-16 12:06:44 +08:00
我看着你们
满怀羡慕 你们拥有了我们曾经梦寐以求的权利 复制粘贴的权利 向你们的专业致敬 你们正在把开源的变成自己的 把自己的变成祖传的 |
15
CRVV 2020-07-16 12:25:44 +08:00 1
到 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 2020-08-03 09:37:54 +08:00
git 的问题,码云开两个账号玩一下,比在这里问强。
|
19
tlerbao OP @RedBeanIce 当你下次想在 V2EX 问问题的时候,先用你这句话问下自己,自己玩不玩的通。
|
20
RedBeanIce 2020-08-04 23:40:28 +08:00
@tlerbao 抱歉,是我菜了。
|