2012-02-21 45 views
4

我有一个git项目,我用于最近发表的科学论文。在项目中,我有子目录doc(拆分为doc/paperdoc/talksresultssrc和更多。git中签出子文件夹

现在我想发布我的源代码(但不是我的演示文稿幻灯片等)。让人们只访问src子目录的最佳方式是什么?我会发布一个zip文件,拍摄当前src目录的快照,但我希望人们可以轻松获取更新。

非常感谢。 Oliver

+0

看看这个问题,它显示了如何提取一个git子目录,并从中创建一个子模块:http://stackoverflow.com/questions/920165/howto-extract-a-git-subdirectory-and-make-a -submodule-out-of-it – 2012-02-21 16:17:53

回答

6

短版:

您需要使用每个顶层文件夹,你想给访问到一个单独的回购协议。 有关如何执行此操作的更多信息,请参见submodules

“sparse”checkouts可以工作,但我认为这不能强制用户,他们必须将整个存储库克隆到本地,然后才能获得部分工作目录。

(您也可以设置一个单独的repo,它会自动更新并推送更改,但您失去了从用户库合并叉子和修复程序的机会,这是我想的那点。)

加长版: 禾 “新”分布式版本控制系统(GIT,水银,集市等)不以同样的方式为SVN和CVS围绕每个文件夹结账建。使分支树与目录树分离可以简化在修​​订图中处理分支和合并的操作,因为它们比集中式VC:es更多。 (SVN,IMO,处理分支&合并就像一个大锤处理打开一罐垃圾邮件,这很大程度上是由于层次结构中的任何目录可以分支/合并)。

部分结账功能很容易在不分支/合并的集中式场景中提供,因此在时间曙光时很受欢迎。你不再那么做了,可能会因为没有它而学会感恩。 :)

因此,重要的东西有几个subrepos/submodules更容易。尽管分支顶级回购协议稍微复杂一点,但您需要考虑如何设置,以便您轻松处理。 (也许发布演示幻灯片并不是那么糟糕:) :)

+0

+1好的,谢谢你的帮忙! – user 2012-03-27 21:44:04

+1

...“不允许像SVN和CVS这样的每个文件夹结帐”......似乎不再是真实的。 http://stackoverflow.com/questions/180052/checkout-subdirectories-in-git。仍然不同意“这大大简化了......”。 Git是非常简单的。 – AlexeiOst 2014-12-01 14:51:02

+0

@AlexeiOst:好吧,无论如何,你会得到整个回购克隆。另外,Git并不简单,但我更喜欢Mercurial(更好的UI,更多或更少的相同概念)。最后,与Git/Mercurial和其他DVCS相比,合并SVN/CVS中的历史跟踪更加困难。 – Macke 2014-12-02 07:06:40

4

没有办法使用git只检出版本库的子文件夹。

您可以使子文件夹成为自己的存储库,或者按照您的建议分发tarball/zip文件。

从git 1.7开始,支持“稀疏检出” - 请参阅here - 但这只是工作副本很稀疏;你仍然必须让用户能够克隆整个存储库。

2

正如Git Book子模块章节中所述,Git不允许部分结帐

您可能只是保持私有存储库,并将src /的开发移到新的公共目录。也许在github,它有一些社区功能 - 例如错误跟踪,跟踪 - 这将简化你的追随者的事情。