代码之家  ›  专栏  ›  技术社区  ›  Mus mzuba

我怎么能和别人分享我存储库的一小部分?

  •  2
  • Mus mzuba  · 技术社区  · 6 年前

    我的同事将在我度假期间为我做一些项目,所以我很自然地与他共享了我的存储库,让他可以访问我的代码库。

    然而,有几十个文件夹在那里,并不是每个文件夹在存储库是相关的他。

    如何才能仅共享存储库中的相关文件夹?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Mark Adelsberger    6 年前

    要做到这一点绝非易事。在git中,提交表示repo内容的完整快照。要创建仅包含特定文件夹的repo版本,您必须创建一组仅包含这些文件夹的新提交集,即单独的历史记录。那么,将很难将回购工作整合回原始回购中。

    这就是为什么每个项目都应该有自己的回购协议的原因之一。这里的术语“每个项目”有点模糊,但重点是回购应该包含通常一起处理/更改的资产组。习惯于TFVC之类的东西的人主张所谓的“monorepo”结构;如果你使用这样的结构,你就是在反对git。

    如果你有一组相关的项目,你可以把它们放在各自的repo中,或者(1)使用构建工具来记录依赖项并根据需要组装它们(这是我的建议),或者(2)使用子模块。

        2
  •  0
  •   ElpieKay    6 年前

    假设您的存储库有4个子文件夹( foo1 foo2 foo3 foo4 )你想分享其中的两个( foo2 and foo4 )你的同事,你的分部 master .

    存储库的树:

    .
    ├── foo1
    ├── foo2
    ├── foo3
    └── foo4
    

    如果您不熟悉git,可以在执行以下步骤之前创建一个新的克隆。即使不成功,你原来的回购也不会搞砸。

    1) 做一个没有 foo1 foo3 :

    git checkout -b base master
    git rm -rf foo1 foo3
    git commit -m 'base for colleague'
    

    2) 使用初始分支创建绑定 colleague base 对于您的同事:

    git checkout --orphan colleague base
    git commit -m 'init colleague'
    git bundle create colleague.bundle colleague
    

    3) 共享文件 colleague.bundle 给你的同事。它可以用作只读远程存储库。

    4) 您的同事从捆绑包中克隆并创建他/她自己的回购 myrepo

    git clone <path to colleague.bundle> -- myrepo
    cd myrepo
    git checkout -b master origin/colleague
    #in the repo, there are only foo2 and foo4
    #make his/her changes to foo2 and foo4, and commit them
    

    5) 您的同事向您提供他/她的新承诺,然后您应用它们。以下是一种可能的方法:

    #your colleague creates a bundle 'return.bundle' and send it to you
    git bundle create return.bundle master
    
    #you fetch his/her 'master' from the bundle and apply the new commits to your own 'master'
    git fetch <path to return.bundle> master:from_my_colleague
    git checkout master
    git cherry-pick colleague..from_my_colleague
    
    #after all is done, you could delete those branches
    git branch -D base colleague from_my_colleague
    

    这些新提交的提交者将是您,它们的作者是您的同事。一开始,你也可以简单地推动你的分支 同事 主人 从它。但它可能涉及到存储库管理,如创建存储库和访问控制,而捆绑包则更简单。最后,你的同事也可以简单地推他/她 主人 到真正的远程存储库,然后将其提取到存储库并将新提交应用到 主人 .