Git - 带子模块的项目

时间:2015-09-24 06:37:30

标签: git workflow

我是自由职业者,为我的客户编码。我有自己的代码库(我在项目中重用的代码),这是我一直开发的。我使用git进行代码版本控制。

我自己的代码库由几个git存储库(.NET库,C ++库等)组成。

当我为客户设置一个新项目时,我为它创建了新的git存储库,并将我的代码库中的库作为git子模块添加到项目存储库中。

它对我有用,但当我必须与客户分享我的代码时会出现问题。我想简单地向他发送该项目的git存储库,但我不想与他分享我的整个代码库(例如我在项目存储库中作为git子模块包含的所有.NET库)。只应共享项目中真正使用的代码。

我可以考虑将代码库划分为更小的部分(不是一个包含所有.NET库的git存储库,将其划分为更小的块)。但是我不确定它真的是一个解决方案。

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是(从项目创建开始):

  1. 克隆原始代码库并将其设置为上游。
  2. 在克隆仓库中创建一个新分支。删除本地'master'分支。即作为子模块的主要部分。
  3. 截断新分支中当前项目的所有冗余内容。您必须事先计划存储库结构,以避免繁琐冗长的选择所需的库/模块。 How to clean up git commit history. How to cherry-pick added modules/libs from the child repo to main
  4. 工作。
  5. 将代码发送给客户。客户的上游项目应该是您工作的项目,而不是主要主模块。
  6. 当一切都完成后 - 将主分支获取到克隆(子)repo和樱桃挑选应该添加到代码库中的东西,甚至更好 - 将它们合并到主子模块仓库中。
  7. 在维护/支持/生命周期完成时删除/存档孙子仓库(您的客户)的支持(上游)。
  8. 不知道是否有更简单的方法来实现这一点,但如果有任何方法可以为分支设置获取权限 - 那将是完美的。

    设置魔兽世界的另一个更好的方法是使用gerrit。它支持setup access特定分支,并允许良好的集成过程。比GIT好得多。