V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
tlerbao
V2EX  ›  git

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

  •  
  •   tlerbao · 2020-07-16 08:50:59 +08:00 · 9472 次点击
    这是一个创建于 1577 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    假设有一个开源项目

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

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

    20 条回复    2020-08-04 23:40:28 +08:00
    Howlaind
        1
    Howlaind  
       2020-07-16 08:59:32 +08:00 via Android
    看协议嘛,像 GPL 肯定就不能闭源,而 Apache 协议就可以
    tlerbao
        2
    tlerbao  
    OP
       2020-07-16 09:04:01 +08:00
    @Howlaind 哦,并没有担心协议,来问就是肯定行的,我是想问技术上能不能实现,毕竟 fork 过来的库是共有的。
    mercury233
        3
    mercury233  
       2020-07-16 09:12:21 +08:00
    clone 上游到本地,在自己账号新建一个空私有库,remote add 并 push
    需要 PR 的,再 fork 一个,然后把对应的分支推上去
    tlerbao
        4
    tlerbao  
    OP
       2020-07-16 09:17:32 +08:00
    @mercury233 没太明白呢?
    passerbytiny
        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 却无法追踪源分支,大概率不被接受,可能还要挨骂。
    mercury233
        6
    mercury233  
       2020-07-16 09:40:07 +08:00
    @tlerbao 就是不 fork 而直接新建一个私有库
    passerbytiny
        7
    passerbytiny  
       2020-07-16 09:47:45 +08:00 via Android
    你要私有开发,大概率要添加敏感内容,这样你的分支也不可能原封不动的合并回去。你可以搞两个库,一个是 clone 的私有库,一个是 fork 的公开库,前者搞开发,后者搞贡献,两者之间搞脱敏合并(手动合并,或者自动合并后再 rebase -i )。
    otakustay
        8
    otakustay  
       2020-07-16 09:48:48 +08:00
    fork 本来就只是一个标准的 git 操作(外加给你标一个 forked from xxx 的标记),不要那个标记的话自己 git 操作就行了
    tlerbao
        9
    tlerbao  
    OP
       2020-07-16 10:59:27 +08:00
    @passerbytiny 不 fork 发起 pr 的时候没办法选择目标仓库的吧
    tlerbao
        10
    tlerbao  
    OP
       2020-07-16 11:00:45 +08:00
    @passerbytiny 我本来就是想搞两个,私有库自建,贡献代码库 fork,然后主在私有库工作开发,当发现有代码比较合适贡献,手动覆盖到 fork 的库然后 push 提交 pr

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

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

    满怀羡慕

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

    复制粘贴的权利


    向你们的专业致敬

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

    把自己的变成祖传的
    CRVV
        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 授权)。
    tlerbao
        16
    tlerbao  
    OP
       2020-07-16 20:09:29 +08:00
    @jatai 这位朋友是来灌水的吗?
    tlerbao
        17
    tlerbao  
    OP
       2020-07-17 16:16:30 +08:00
    @joesonw 开源库 到 forked-public,然后没办法从 forked-public 到 forked-private ; forked-private 只能是把 forked-public 克隆到本地,然后把 private 的 remote 地址填进去。
    RedBeanIce
        18
    RedBeanIce  
       2020-08-03 09:37:54 +08:00
    git 的问题,码云开两个账号玩一下,比在这里问强。
    tlerbao
        19
    tlerbao  
    OP
       2020-08-04 21:30:46 +08:00
    @RedBeanIce 当你下次想在 V2EX 问问题的时候,先用你这句话问下自己,自己玩不玩的通。
    RedBeanIce
        20
    RedBeanIce  
       2020-08-04 23:40:28 +08:00
    @tlerbao 抱歉,是我菜了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 01:36 · PVG 09:36 · LAX 17:36 · JFK 20:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.