开源项目可以 Fork 成私有库吗?然后私有库可以提交 PR 吗?

2020-07-16 08:50:59 +08:00
 tlerbao

开源项目可以 Fork 成私有库吗?然后私有库可以提交 PR 吗?

假设有一个开源项目

我想用这个开源项目开发产品(私有不开源),但同时还想给这个项目贡献代码(提交 PR )。

如上需求最专业且简单的做法是怎样的?

9028 次点击
所在节点    git
20 条回复
Howlaind
2020-07-16 08:59:32 +08:00
看协议嘛,像 GPL 肯定就不能闭源,而 Apache 协议就可以
tlerbao
2020-07-16 09:04:01 +08:00
@Howlaind 哦,并没有担心协议,来问就是肯定行的,我是想问技术上能不能实现,毕竟 fork 过来的库是共有的。
mercury233
2020-07-16 09:12:21 +08:00
clone 上游到本地,在自己账号新建一个空私有库,remote add 并 push
需要 PR 的,再 fork 一个,然后把对应的分支推上去
tlerbao
2020-07-16 09:17:32 +08:00
@mercury233 没太明白呢?
passerbytiny
2020-07-16 09:39:23 +08:00
fork 跟开源协议没关系,跟 github/gitlab 的用户协议有关。按照 github 的用户协议,公开库不管任何协议,都允许被 fork,这样明显是不允许 fork 后变成私有库的(不然被 fork 的库就成袁大头了)。

fork 不是 PR 的充分条件,任何库都可以提 PR 的,不一定非要 fork 。然而你这私有库给公有库提交 PR,公开库那边只能看到 PR 却无法追踪源分支,大概率不被接受,可能还要挨骂。
mercury233
2020-07-16 09:40:07 +08:00
@tlerbao 就是不 fork 而直接新建一个私有库
passerbytiny
2020-07-16 09:47:45 +08:00
你要私有开发,大概率要添加敏感内容,这样你的分支也不可能原封不动的合并回去。你可以搞两个库,一个是 clone 的私有库,一个是 fork 的公开库,前者搞开发,后者搞贡献,两者之间搞脱敏合并(手动合并,或者自动合并后再 rebase -i )。
otakustay
2020-07-16 09:48:48 +08:00
fork 本来就只是一个标准的 git 操作(外加给你标一个 forked from xxx 的标记),不要那个标记的话自己 git 操作就行了
tlerbao
2020-07-16 10:59:27 +08:00
@passerbytiny 不 fork 发起 pr 的时候没办法选择目标仓库的吧
tlerbao
2020-07-16 11:00:45 +08:00
@passerbytiny 我本来就是想搞两个,私有库自建,贡献代码库 fork,然后主在私有库工作开发,当发现有代码比较合适贡献,手动覆盖到 fork 的库然后 push 提交 pr

觉得麻烦所以来问问
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
tlerbao
2020-07-16 11:33:14 +08:00
@joesonw 好简练专业,我要消化一下。
passerbytiny
2020-07-16 11:58:57 +08:00
@tlerbao 如果你的私有代码跟贡献代码差别多的话,那就没有比现在更省事的方式了。这种方式虽然麻烦,但是是有好处的,私有代码转换到公开代码的过程是很宝贵的经验。

PR 那一块,你可以尝试在目标分支选择源分支来发起 PR,再不行还可以发 git 补丁。
jatai
2020-07-16 12:06:44 +08:00
我看着你们

满怀羡慕

你们拥有了我们曾经梦寐以求的权利

复制粘贴的权利


向你们的专业致敬

你们正在把开源的变成自己的

把自己的变成祖传的
CRVV
2020-07-16 12:25:44 +08:00
到 GitHub 的仓库设置里面,如果是一个 fork 来的仓库,会显示 "You cannot change the visibility of a fork. Please duplicate the repository."

所以,开源项目不可以 Fork 成私有库,也没有然后了。

顺便一说,开源项目在闭源项目里用是允许的,包括 GPL 。到 redistribution 也就是再发布软件的时候才有侵权的问题。比如,在不以 GPL 重新发行新代码的情况下,一家公司可以拿 Linux 内核改一改用在自家内部的机器上,但不能拿 Linux 内核改一改然后拿去重新发布(比如拿去卖,比如把代码公开了但是不用 GPL 授权)。
tlerbao
2020-07-16 20:09:29 +08:00
@jatai 这位朋友是来灌水的吗?
tlerbao
2020-07-17 16:16:30 +08:00
@joesonw 开源库 到 forked-public,然后没办法从 forked-public 到 forked-private ; forked-private 只能是把 forked-public 克隆到本地,然后把 private 的 remote 地址填进去。
RedBeanIce
2020-08-03 09:37:54 +08:00
git 的问题,码云开两个账号玩一下,比在这里问强。
tlerbao
2020-08-04 21:30:46 +08:00
@RedBeanIce 当你下次想在 V2EX 问问题的时候,先用你这句话问下自己,自己玩不玩的通。
RedBeanIce
2020-08-04 23:40:28 +08:00
@tlerbao 抱歉,是我菜了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX