2014-11-03 45 views
26

我们遇到了从hg切换到git(业务需求)时的一些工作流问题。在hg中,我们通过创建具有特定权限设置的subrepos来限制外包工作室访问专有代码。然后,我们的主要hg回购将有分支指向适当的Source或DLL subrepos,以便它们可以轻松地在两者之间切换。从Hg切换到Git的Subrepo工作流问题

我们遇到的问题是,在git中模拟这种设置似乎是不可能的。将分支转换为不包含特定子模块的分支不会在本地删除该子模块的文件(预期的git行为)。这造成了一个单调乏味的手动删除步骤,如果我们将其推广到办公室技术较差的人员,可能会导致问题。我们需要一个系统,人们可以从历史记录中的任何其他提交中检出提示,并保证有一个工作项目,如果在当前系统中未删除子模块内容,则该项目不会发生。

git中有没有其他的选择,我们正在尝试做什么?

+0

我们正在考虑在SourceTree中添加一个自定义动作,它调用git clean -ffd,它允许我们使用旧的工作流,但是在我们团队的进程中增加了一个额外的步骤 – Konstantin 2014-11-03 16:23:38

+0

[push a git repo到一个新的远程(github),隐藏其历史](http://stackoverflow.com/questions/4020553/push-a-branch-of-a-git-repo-to-a-new-remote-github-hiding -its-history) – 2014-11-11 23:10:47

+0

这篇文章有点相关。我们都有着相同的目标,但从完全不同的角度来看待它。可能有一个解决方案可以为我们两个人工作,但我不确定。 – Konstantin 2014-11-13 15:47:22

回答

1

您可以使用post-checkout客户端挂钩。基本上,当您将分支切换到使用其他子模块的分支时,将运行post-checkout挂钩。在该钩子中,您可以简单地添加代码以删除当前分支未使用的所有子模块。

由于挂钩在远程和本地回购之间未同步,因此您可以按照this的建议获取将克隆存储库的人员的挂钩。