git子模块是在工作副本中安全使用的唯一方式吗?

18
在我的场景中,我有一个分析数据输入文件并生成其他数据输出文件的程序。我想要对程序进行版本控制,并且想要对数据文件进行版本控制,出于个人偏好,我希望工作副本中包含数据文件的工作副本。 我希望对程序和数据进行单独的版本控制以减少"噪音"。该程序不依赖于数据文件。
如果我使用git子模块,则当数据目录内发生更改时(我认为是提交的更新),程序的版本控制会注意到子模块有更新,这如果程序依赖于数据将会很有用,但它并没有。
在这种情况下,是否可能在另一个工作副本中具有工作副本而不使用git子模块?
2个回答

25

在Git中,可以简单地“嵌套”工作副本。因此,如果您克隆了程序存储库,然后在其中克隆数据文件的副本,则可以独立处理它们。当Git执行文件操作时,它会向上搜索目录树以查找.git目录,因此在数据存储库中执行的Git操作不会影响程序存储库。如果这样做,您可能需要将数据目录的名称添加到.gitignore中,以减少程序存储库中的噪音。


喜欢听到这个。这种方法有什么可能出错的地方吗?还是就能正常工作? - Chris Calo
3
@ChristopherJamesCalo说:我不知道会发生什么具体的问题。我唯一能想到需要注意的是,如果在程序目录中运行git clean -f -x,那么即使数据目录出现在.gitignore中,它也会被删除。 - Greg Hewgill
1
非常好。今天我一直在使用它,看起来完美无缺。谢谢! - Chris Calo
使用这种方法的唯一缺点是,与子模块等其他方法相比,许多CI工具仅支持一个存储库(可选包括子模块),因此与这些工具的集成会更加复杂。 - ubuntudroid

2
这也是一种有用的解决方法,适用于在使用Heroku和Rails时需要对插件进行版本控制的情况。目前,Heroku不支持git子模块,因此嵌套工作副本似乎是最佳解决方案。在这种情况下,您不希望将插件目录添加到.gitignore中,否则在推送到Heroku时会上传失败,但也无可奈何。希望Heroku最终会支持git子模块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接