如何与某人共享存储库的一小部分?

时间:2018-08-10 12:54:24

标签: git bitbucket

我在休假期间,我的同事将为我工作一些项目,所以自然地我与他共享了我的存储库,以便他访问我的代码库。

但是,其中有数十个文件夹,并且存储库中并非每个文件夹都与他相关。

我只是最近才开始使用git,还没有在线发现任何暗示可以实现的东西。

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

2 个答案:

答案 0 :(得分:2)

没有简单的方法可以做到这一点。在git中,提交代表回购内容的完整快照。要创建仅包含某些文件夹的回购版本,您必须创建仅包含这些文件夹的一组新提交-即单独的历史记录。然后,很难将在该存储库上完成的工作重新整合到原始存储库中。

这是每个项目都有自己的仓库的原因之一。这里的“每个项目”一词有点含糊,但要点是回购应包含通常一起使用/更改的资产组。习惯了TFVC等的人主张使用所谓的“ monorepo”结构。如果您使用这样的结构,则说明您正在使用git的纹理。

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

答案 1 :(得分:0)

这是一个例子。

假设您的存储库有4个子文件夹(foo1 foo2 foo3 foo4),并且您想与同事共享2个子文件夹(foo2 and foo4),而您的分支机构是master

您的存储库树:

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

如果您不熟悉git,则可以在执行以下步骤之前进行新的克隆。即使不成功,您的原始存储库也不会混乱。

1)建立不包含foo1foo3的分支:

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

这些新提交的提交者将是您,而他们的作者是您的同事。首先,您还可以简单地将分支机构colleague推送到真正的远程存储库,并要求您的同事提取它并从中创建master。但这可能涉及存储库管理,例如存储库创建和访问控制,而捆绑包则更为简单。最后,您的同事还可以将他/她的master推送到一个真正的远程存储库,然后将其提取到您的存储库中,并将新提交应用于您的master

相关问题