开源项目可以 Fork 成私有库吗?然后私有库可以提交 PR 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
tlerbao
V2EX    git

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

  •  
  •   tlerbao Jul 16, 2020 10741 views
    This topic created in 2115 days ao, the information mentioned may be changed or developed.

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

    假设有一个开源项目

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

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

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

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

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

    PR 那一块,你可以尝试在目标分支选择源分支来发起 PR,再不行还可以发 git 补丁。
    jatai
        14
    jatai  
       Jul 16, 2020
    我看着你们

    满怀羡慕

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

    复制粘贴的权利


    向你们的专业致敬

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

    把自己的变成祖传的
    CRVV
        15
    CRVV  
       Jul 16, 2020   1
    到 GitHub 的仓库设置里面,如果是一个 fork 来的仓库,会显示 "You cannot change the visibility of a fork. Please duplicate the repository."

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

    顺便一说,开源项目在闭源项目里用是允许的,包括 GPL 。到 redistribution 也就是再发布软件的时候才有侵权的问题。比如,在不以 GPL 重新发行新代码的情况下,一家公司可以拿 Linux 内核改一改用在自家内部的机器上,但不能拿 Linux 内核改一改然后拿去重新发布(比如拿去卖,比如把代码公开了但是不用 GPL 授权)。
    tlerbao
        16
    tlerbao  
    OP
       Jul 16, 2020
    @jatai 这位朋友是来灌水的吗?
    tlerbao
        17
    tlerbao  
    OP
       Jul 17, 2020
    @joesonw 开源库 到 forked-public,然后没办法从 forked-public 到 forked-private ; forked-private 只能是把 forked-public 克隆到本地,然后把 private 的 remote 地址填进去。
    RedBeanIce
        18
    RedBeanIce  
       Aug 3, 2020
    git 的问题,码云开两个账号玩一下,比在这里问强。
    tlerbao
        19
    tlerbao  
    OP
       Aug 4, 2020
    @RedBeanIce 当你下次想在 V2EX 问问题的时候,先用你这句话问下自己,自己玩不玩的通。
    RedBeanIce
        20
    RedBeanIce  
       Aug 4, 2020
    @tlerbao 抱歉,是我菜了。
    About     Help     Advertise     Blog     API     FAQ     Solana     2381 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 62ms UTC 01:53 PVG 09:53 LAX 18:53 JFK 21:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86