在Git中检出子文件夹

4
我有一个git项目,用于最近发表的科学论文。在项目中,我有子目录doc(分为doc/paperdoc/talksresults src等等。
现在,我想发布我的源代码(但不包括演示幻灯片等)。最好的方法是什么,可以让人们只访问src子目录?我将发布一个zip文件,其中包含当前src目录的快照,但我希望人们可以轻松获取更新。
非常感谢。 Oliver

请查看这个问题,它展示了如何从Git子目录中提取并创建一个子模块:https://dev59.com/cXNA5IYBdhLWcg3wjOhS - Colin O'Dell
3个回答

6

简短版本:

您需要针对每个您想授予访问权限的顶层文件夹使用单独的存储库。有关如何执行此操作的更多信息,请参见子模块

“稀疏”检出可能有效,但我认为不能强制用户这样做,因为他们必须先将整个存储库克隆到本地,然后才能获取部分工作目录。

(您还可以设置一个单独的存储库,该存储库将自动更新并推送更改,但您将失去合并来自用户基础的分支和修复程序的机会,这也是重点所在,我想。)

较长版本:

“新”的分布式版本控制系统(Git、Mercurial、Bazaar等)与 SVN 和 CVS 不同,不是围绕每个文件夹的检出构建的。将分支树与目录树分开简化了修订图中的分支和合并处理,因为这些要比集中式 VC 更多。 (我认为 SVN 处理分支和合并的方式就像大锤打开罐头一样粗暴,这很大程度上是由于层次结构中的任何目录都可以分支/合并。)

部分检出功能在您不进行分支/合并的集中式场景中很容易实现,并且因此在早期非常流行。但是,您不再这样做,并且可能会学会感激没有它。 :)

因此,拥有一些重要内容的子存储库/子模块更容易。尽管分支顶级存储库略微复杂,但您需要考虑如何设置才能轻松处理事务。 (也许发布演示文稿并不那么糟糕? :))


1
“不允许像 SVN 和 CVS 那样进行每个文件夹的签出”的说法似乎已经不再正确。https://dev59.com/M3VC5IYBdhLWcg3wz0h9。仍然不同意“这大大简化了...”Git 没有简单到哪里去。” - AlexeiOst
@AlexeiOst:嗯,无论如何你都会得到整个仓库的克隆。此外,Git并不简单,但我更喜欢Mercurial(更好的用户界面,几乎相同的概念)。最后,在SVN/CVS中进行合并历史跟踪比起Git/Mercurial和其他分布式版本控制系统要困难得多。 - Macke

4

使用git没有办法仅检出存储库的子文件夹。

您可以将子文件夹作为自己的存储库,或者像您建议的那样分发tarballs/zipfiles。

从git 1.7开始,支持“稀疏检出”-请参见此处 -但这只是工作副本是稀疏的;您仍然必须给用户克隆整个存储库的能力。


2
Git Book的子模块章节所述,Git不允许部分检出
你可以将你的仓库保持为私有,并将src/的开发移动到一个新的公共仓库。也许在github上有一些社区功能--例如bug跟踪、关注--这会为你的关注者简化事情。

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