V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lalalakakaka
V2EX  ›  问与答

Github 如何 fork 一个项目两次?

  •  
  •   lalalakakaka · 2014-10-17 14:02:35 +08:00 · 9399 次点击
    这是一个创建于 3471 天前的主题,其中的信息可能已经有所发展或是发生改变。
    github苦手一枚~无奈来提问了。
    情况是这样的:
    原始项目演进是:ver0 ver1 ver2 ver3 ver4 ver5 ver6
    项目B是原始项目的一个fork。假设从 ver2 开始的。
    而我从ver4开始fork了这个原始项目。
    现在我想fork项目B,在gitub网页上操作的,结果总是会弹到我自己最早的fork版本上,也就是说项目B我始终不能fork。。为什么?如何解决?
    9 条回复    2014-10-20 10:20:42 +08:00
    veiz
        1
    veiz  
       2014-10-17 14:07:23 +08:00   ❤️ 1
    目测有两个解决办法:
    1,删除原始项目的那个fork,重新fork项目B
    2,基于原始项目的fork,开始拉项目B的更新,直到你自己那个版本库跟项目B的版本库一致。(merge的工作量可大可小,你要是fork的linux kernel....)
    clino
        2
    clino  
       2014-10-17 14:13:39 +08:00   ❤️ 1
    为什么要folk两个?1个完全够了

    有新的需求创建新的分支来做不就行了
    lalalakakaka
        3
    lalalakakaka  
    OP
       2014-10-17 14:15:37 +08:00
    @veiz 刚才没说明白,两个项目我都要保留。
    那么我能不能开一个分支,分支1对应一个项目(原始),分支2对应另一个(项目B)?
    lalalakakaka
        4
    lalalakakaka  
    OP
       2014-10-17 14:20:20 +08:00
    @clino 现在有点纠结~
    因为我自己的做的是小改动,那两个项目分别对应windows版本和linux版本,绝对是大改~
    如果是从我自己的项目分支出来的话:1.肯定合并出来的版本不能用;2.会让人家误以为我做的工作很多。
    所以最理想的情况是,我fork这两个项目,然后将我的改动merge进去,这样逻辑上说得通,而且merge成功率会高一些。
    AstroProfundis
        5
    AstroProfundis  
       2014-10-17 14:30:59 +08:00   ❤️ 1
    用多个分支,然后设置多个 remote, 每个分支可以绑定到不同的 remote/branch
    relaxyy
        6
    relaxyy  
       2014-10-17 15:18:02 +08:00   ❤️ 1
    新建一个repo,然后在项目上设置个新的remote,push --force应该可以。

    注意:没有测试过
    Akagi201
        7
    Akagi201  
       2014-10-17 18:36:07 +08:00
    建立一个org账号, 然后就可以fork到那里了.
    lalalakakaka
        8
    lalalakakaka  
    OP
       2014-10-17 23:26:25 +08:00
    @relaxyy 这个办法可行。
    最后,我似乎找到办法。我应该先添加一个远程仓库,即将项目B添加进我的新建分支,然后rebase一下,这样就可以得到项目B的代码了,而且从历史纪录也能清晰的看到我的新建分支来自项目B,而不是我的老分支。
    rrrrutdk
        9
    rrrrutdk  
       2014-10-20 10:20:42 +08:00
    设置两个remote:

    git remote add fork-a A_REPO_URL
    git remote add fork-b B_REPO_URL

    这样的话,你的本地就有三个remote

    origin(如果默认的话)
    fork-a
    fork-b

    想切哪切哪:

    git checkout fork-a/master master-a
    git checkout fork-b/master master-b

    想提交到哪就到哪:

    git push fork-a master-a:master
    git push origin master
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4052 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:21 · PVG 13:21 · LAX 22:21 · JFK 01:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.