【问题标题】:Checkout subfolder in gitgit中的结帐子文件夹
【发布时间】:2012-02-21 15:59:15
【问题描述】:

我有一个 git 项目,用于最近发表的一篇科学论文。在项目中,我有子目录doc(拆分为doc/paperdoc/talksresultssrc 等等。

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

非常感谢。 奥利弗

【问题讨论】:

标签: git subdirectory


【解决方案1】:

短版:

您需要为每个要授予访问权限的顶级文件夹使用单独的存储库。 请参阅submodules 了解有关如何执行此操作的更多信息。

“稀疏”签出可以工作,但我相信这不能强加给您的用户,他们必须将整个存储库克隆到本地,然后只获取部分工作目录。

(您也可以设置一个单独的 repo,它会自动更新并推送更改,但您失去了从用户群合并分支和修复的机会,我猜这就是重点。)

加长版: 禾 “新的”分布式版本控制系统(Git、Mercurial、Bazaar 等)不像 SVN 和 CVS 那样围绕每个文件夹签出构建。将分支树与目录树分开可以简化版本图中的分支和合并处理,因为它们比集中式 VC:es 的数量更多。 (SVN、IMO 处理分支和合并就像大锤处理打开一罐垃圾邮件一样,这在很大程度上是因为层次结构中的任何目录都可以分支/合并)。

部分结账功能在您不进行分支/合并的集中式场景中很容易提供,因此在早期很流行。你不再得到它,并且可能会学会为没有它而感恩。 :)

因此,拥有一些重要内容的子存储库/子模块会更容易。不过,分支顶级 repo 稍微复杂一些,因此您需要考虑如何设置以使您更容易使用。 (也许发布演示幻灯片并没有那么糟糕?:)

【讨论】:

  • ..." 不允许像 SVN 和 CVS 那样按文件夹签出"... 似乎不再正确。 stackoverflow.com/questions/180052/…。仍然不同意“这大大简化了......”。 Git 绝非简单。
  • @AlexeiOst:好吧,无论如何你都会得到整个 repo 克隆。此外,Git 并不简单,但我更喜欢 Mercurial(更好的 UI,或多或少相同的概念)。最后,与 Git/Mercurial 和其他 DVCS 相比,SVN/CVS 中的合并历史跟踪要困难得多。
【解决方案2】:

无法使用git 仅签出存储库的子文件夹。

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

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

【讨论】:

    【解决方案3】:

    正如子模块一章下的Git Book 中所述,Git 不允许部分签出

    您可以将您的存储库保持为私有,并将 src/ 的开发转移到一个新的公共存储库。也许在github,它有一些社区功能——例如。错误跟踪,关注——这将为您的关注者简化事情。

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2016-07-28
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多