【问题标题】:Git: How to share only selected folders and files from a repository to allow 2 teams to collaborate on it, but not share the whole code base?Git:如何仅共享存储库中选定的文件夹和文件以允许 2 个团队协作,但不共享整个代码库?
【发布时间】:2015-10-01 05:53:12
【问题描述】:

假设有一个团队使用分支模型在主 Git 存储库上工作。现在第二个团队加入并开始工作项目的一个子集。作为起点,他们需要在存储库中的一个文件夹上进行协作。他们不允许查看代码库的其余部分。实现这一目标的最佳方法是什么?

展望未来,他们需要能够将他们的更改合并到主代码库中,并在此过程中也从该文件夹中获取任何更新。

这一切都基于 Windows 操作系统,内部网络上有 Atlassian Stash 和 Git。

【问题讨论】:

  • 您确定要让他们无法阅读吗?这意味着它不能是同一个仓库(包括fork),你必须重写它或重新启动目录历史。

标签: windows git


【解决方案1】:

这意味着一个文件夹必须是its own repo

  • 在主 Git 存储库中添加为 submodule (tracking a branch)
  • forked 由第二个团队,供他们推送到 fork 并从原始文件夹 git repo 进行 PR 或同步。

【讨论】:

  • 感谢您的回复和链接。我看到子模块被认为是一个有点复杂的解决方案,我想知道是否还有其他简单的选项?我读过一些关于人们迁移到 Subtree 的帖子。想知道它是否合适,例如能够提供访问权限和优点/缺点的分离。另外,我在 fork 时迷路了,它不是存储库的完整副本吗?
  • @Rod 子模块最近有所改进。并且 fork 是一种确保第二个团队在没有第一个团队的审查和批准的情况下不能在该子模块上推送/合并任何内容的方法:stackoverflow.com/a/6286877/6309
  • 由于您使用的是 Stash 或者他们现在将其命名,请注意它不支持子模块的服务器端合并和 Atlassian refused to fix it ,因此您需要合并子模块的任何并发更新本地。不过,我在回答中建议的单独项目也不支持无缝合并的并发更新。
  • @VonC 我相信分叉对于写访问受限的公共存储库是有益的。在这种情况下,分支模型正在使用中,这意味着更改是通过拉取请求集成的,因此不需要分叉。但是我对子模块有所了解,感谢您的建议,您在类似情况下成功使用过它们吗?
  • @Rod 我以前在非公共环境中使用过 fork。结合子模块,它们提供了非常好的隔离。
【解决方案2】:

我建议将子集分成一个子项目,并在构建主项目期间使用特定于语言的方式来交付它。例如,如果您使用 MS Visual Studio,您可以将其转换为库或模块,并在构建主项目期间使用 nuget 交付它。

根据我的经验,在合并方面,它似乎比使用子模块方便得多。

这样做的另一个原因 - 也许更重要的一个 - 另一个团队能够将项目作为一个可编译和可测试的单元来处理,而不是一堆源文件。

【讨论】:

  • 那么带有代码的文件夹将移动到 git 中完全独立的存储库?或者,如果不是,访问分离将如何工作?
  • 是的。完全独立的项目和完全独立的存储库。
猜你喜欢
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2023-03-07
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多