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

求教:在同一台电脑上如何做到开发一个项目的两个分支?

  •  
  •   linuxzpf · 2016-10-25 18:05:27 +08:00 · 6733 次点击
    这是一个创建于 2981 天前的主题,其中的信息可能已经有所发展或是发生改变。

    电脑: MBP

    项目: xxx(仅此 1 个项目)

    版本控制: git

    需求:同时在做 2 个 task ,需要从 master 上拉出 2 个分支 dev_1 和 dev_2 同时开发; 但是我打开两个 iTerm2 ,两个 iTerm2 中项目中分支总是保持一致:即我在一个 iTerm2 窗口中切换分支后,另外一个会同步切换;

    我需要的是: 2 个 iTerm 窗口一个进行 dev_1 的开发,另一个进行 dev_2 的开发;

    怎么能做到? 求指教。

    22 条回复    2016-10-26 11:53:05 +08:00
    mikicomo
        1
    mikicomo  
       2016-10-25 18:07:39 +08:00
    本地 git clone 两个 repo ?
    yidinghe
        2
    yidinghe  
       2016-10-25 18:08:12 +08:00 via Android
    拷贝两份,分别开发,然后提交到同一个远程库
    shoaly
        3
    shoaly  
       2016-10-25 18:09:33 +08:00
    mkdir branch2
    cd branch2
    git init
    git fetch ../branch1 branch2:branch2
    git checkout branch2
    愉快的在 branch2 开发
    whalesay
        4
    whalesay  
       2016-10-25 18:12:33 +08:00
    git checkout -b newbranch
    git branch -vv
    linuxzpf
        5
    linuxzpf  
    OP
       2016-10-25 18:18:02 +08:00
    @whalesay 这是什么意思?
    linuxzpf
        6
    linuxzpf  
    OP
       2016-10-25 18:18:54 +08:00
    @mikicomo 这个不可行
    DualWield
        7
    DualWield  
       2016-10-25 18:23:52 +08:00
    为什么不能做到本地两个项目,在两个分支上面开发?
    Lonely
        8
    Lonely  
       2016-10-25 18:28:34 +08:00 via iPhone
    同一个目录,难道还能同时处于两个分支?
    xiaozhaoz
        9
    xiaozhaoz  
       2016-10-25 18:29:41 +08:00
    去理解 git 的 workdir 功能, git 源码中一个创建 workdir 的脚本。
    创建两个 workdir ,每个开发不同分支,但 git local repo 是一个。
    linuxzpf
        10
    linuxzpf  
    OP
       2016-10-25 18:32:48 +08:00
    @yidinghe
    @DualWield 拷贝两份(其中一个重命名),在两个里面分别开发,然后提交到同一个远程库,是这个意思吧?
    DualWield
        11
    DualWield  
       2016-10-25 18:35:38 +08:00
    @linuxzpf 是的
    tairan2006
        12
    tairan2006  
       2016-10-25 18:37:14 +08:00 via Android
    AB 问题 没听说必须要在两个分支一起开发的,你直接开两个项目不行么
    whalesay
        13
    whalesay  
       2016-10-25 18:38:48 +08:00
    @linuxzpf 第一句是建立并切换到新分支 newbranch ,第二句是看分支状态。另外用 git checkout branchname 随时可切到另一个分支
    ratazzi
        14
    ratazzi  
       2016-10-25 18:46:54 +08:00
    qwer1234asdf
        15
    qwer1234asdf  
       2016-10-25 19:28:56 +08:00 via iPhone
    hg
    linuxzpf
        16
    linuxzpf  
    OP
       2016-10-25 19:33:47 +08:00 via Android
    @whalesay 你说的这个基本用法都知道,关键是我有其他需求如题
    linuxzpf
        17
    linuxzpf  
    OP
       2016-10-25 19:34:55 +08:00 via Android
    @tairan2006 没说必须要一起,但是时常会同时做两个 task ,有这个需求呀
    xiaozhaoz
        18
    xiaozhaoz  
       2016-10-25 20:12:21 +08:00
    上面已经有几个同学说了。

    git workdir ,新版本叫 git worktree, 自己查一下就知道了。
    一个 worktree 对应一个 branch ,每个 worktree 下面的.git 是指向同一个地方。

    所以你的开发模式就是,多个 worktree , 每个 worktree 对应一个 branch ,两个 iterm 中使用不同的 worktree ,所有 worktree 指向同一个 git repo. 不要用 clone 多分 repo 的方法,避免重复和各种同步问题。
    int64ago
        19
    int64ago  
       2016-10-25 21:19:22 +08:00 via Android
    来回切呗,会有什么影响吗?

    你担心临时更改?!

    git stash 即可
    linuxzpf
        20
    linuxzpf  
    OP
       2016-10-25 21:57:36 +08:00
    @xiaozhaoz 谢谢,我好好研究下 git worktree 是怎么工作的。
    SpicyCat
        21
    SpicyCat  
       2016-10-26 11:45:09 +08:00
    没弄过 git worktree, 但是楼主你这个需求明明分别在两个文件夹下 git clone 你的工程就能满足啊。
    想象下现在有两个人分别在 dev1 和 dev2 上工作,他们肯定是在各自的电脑上 git clone 工程啊。
    你现在是一个人,那就 clone 两份呗,反正都是 push 到一个 remote repo 上。
    SpicyCat
        22
    SpicyCat  
       2016-10-26 11:53:05 +08:00
    刚才大致看了下 git worktree ,可以说理论上 git worktree 能做的事情,多次 git clone 都能做到,但是 git worktree 有自己的优势,比如如果 repo 很大,那么多次 clone 就很花时间,而且也占用硬盘空间,还有就是多个 clone 的项目管理起来不如 git worktree 方便。
    http://stackoverflow.com/questions/31935776/what-would-i-use-git-worktree-for
    此贴值得一读。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:55 · PVG 02:55 · LAX 10:55 · JFK 13:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.