我有一个git项目,我用于最近发表的科学论文。在项目中,我有子目录doc
(拆分为doc/paper
doc/talks
)results
src
和更多。git中签出子文件夹
现在我想发布我的源代码(但不是我的演示文稿幻灯片等)。让人们只访问src
子目录的最佳方式是什么?我会发布一个zip文件,拍摄当前src目录的快照,但我希望人们可以轻松获取更新。
非常感谢。 Oliver
我有一个git项目,我用于最近发表的科学论文。在项目中,我有子目录doc
(拆分为doc/paper
doc/talks
)results
src
和更多。git中签出子文件夹
现在我想发布我的源代码(但不是我的演示文稿幻灯片等)。让人们只访问src
子目录的最佳方式是什么?我会发布一个zip文件,拍摄当前src目录的快照,但我希望人们可以轻松获取更新。
非常感谢。 Oliver
短版:
您需要使用每个顶层文件夹,你想给访问到一个单独的回购协议。 有关如何执行此操作的更多信息,请参见submodules。
“sparse”checkouts可以工作,但我认为这不能强制用户,他们必须将整个存储库克隆到本地,然后才能获得部分工作目录。
(您也可以设置一个单独的repo,它会自动更新并推送更改,但您失去了从用户库合并叉子和修复程序的机会,这是我想的那点。)
加长版: 禾 “新”分布式版本控制系统(GIT,水银,集市等)不以同样的方式为SVN和CVS围绕每个文件夹结账建。使分支树与目录树分离可以简化在修订图中处理分支和合并的操作,因为它们比集中式VC:es更多。 (SVN,IMO,处理分支&合并就像一个大锤处理打开一罐垃圾邮件,这很大程度上是由于层次结构中的任何目录可以分支/合并)。
部分结账功能很容易在不分支/合并的集中式场景中提供,因此在时间曙光时很受欢迎。你不再那么做了,可能会因为没有它而学会感恩。 :)
因此,重要的东西有几个subrepos/submodules更容易。尽管分支顶级回购协议稍微复杂一点,但您需要考虑如何设置,以便您轻松处理。 (也许发布演示幻灯片并不是那么糟糕:) :)
+1好的,谢谢你的帮忙! – user 2012-03-27 21:44:04
...“不允许像SVN和CVS这样的每个文件夹结帐”......似乎不再是真实的。 http://stackoverflow.com/questions/180052/checkout-subdirectories-in-git。仍然不同意“这大大简化了......”。 Git是非常简单的。 – AlexeiOst 2014-12-01 14:51:02
@AlexeiOst:好吧,无论如何,你会得到整个回购克隆。另外,Git并不简单,但我更喜欢Mercurial(更好的UI,更多或更少的相同概念)。最后,与Git/Mercurial和其他DVCS相比,合并SVN/CVS中的历史跟踪更加困难。 – Macke 2014-12-02 07:06:40
没有办法使用git
只检出版本库的子文件夹。
您可以使子文件夹成为自己的存储库,或者按照您的建议分发tarball/zip文件。
从git 1.7开始,支持“稀疏检出” - 请参阅here - 但这只是工作副本很稀疏;你仍然必须让用户能够克隆整个存储库。
看看这个问题,它显示了如何提取一个git子目录,并从中创建一个子模块:http://stackoverflow.com/questions/920165/howto-extract-a-git-subdirectory-and-make-a -submodule-out-of-it – 2012-02-21 16:17:53