【问题标题】:How to fetch just a folder from a remote branch in GIT如何从 GIT 中的远程分支中仅获取一个文件夹
【发布时间】:2011-10-28 01:37:04
【问题描述】:

我在 github 和几个分支上有一个存储库。整个 repo 大约 2 gigs。在迁移到 git 之前,我有一个 ant 脚本,它可以从 svn 存储库中检出一个文件夹,构建二进制文件,然后提交回存储库。

不幸的是,在切换到 git 之后,我找不到一个简单的方法来做到这一点。每次我的 ant 脚本运行时,我希望它从远程分支获取文件夹的新副本,并在完成一些工作后提交回它。我不想每次运行 ant 脚本时都下载整个存储库(2 GB 的数据)。

这是我的 ant 脚本在 SVN 中的外观示例

使用 GIT 的工作流程看起来像

  • GIT 初始化
  • GIT 克隆 http://project.branch15 ( 2 GB )
  • 修改 /subfolder/subfolder/subfolder 中的一些内容
  • 提交分支 15

【问题讨论】:

  • 您是否考虑过将二进制文件存储在您的源存储库之外的地方?
  • 是的,将文件拆分在不同的子存储库中使得恢复到一个版本非常困难,因为源文件和构建文件将具有不同的版本号并单独维护。所以你不能说恢复到版本 13(对于源文件和二进制文件
  • 不要克隆每次,只做一次!从本地仓库中提取目录

标签: git


【解决方案1】:

这听起来你在一个存储库中有太多东西。您应该重构它以使用子模块。 *如果有一个文件夹不能独立于他们的祖先或兄弟姐妹,那么它是一个很好的子模块候选者。

Git 子模块本身就是 git 存储库,因此可以独立于父存储库进行克隆、签出、修改和推送。

您还可以拥有子模块的层次结构。因此,在您的示例中,每个子文件夹都可以是一个子模块。 (但你应该注意上面的 *)。

这种方法的另一个优点是您可以克隆主存储库(可能是 2GB),并假设它由一些子模块(比如 ~200MB 中的 10 个)组成,而不会占用全部 2GB。然后你可以为你想要的 repos 运行子模块检查。

这是一个例子:

文件结构

  /MainApp/           
       /Utils    200MB
       /Lib    
^        /OSX    200MB
^        /WIN32  200MB
^        /WIN64  200MB  
^        /NIX    200MB 
       /Source   150MB 
                 =====
                 1.15GB

如果 ^ 文件夹都是一个子模块,您可以执行以下操作

$ git clone MainApp
  # Downloads the 200MB for Utils and the 150MB for Source (plus git files)
$ cd MainApp
$ git submodule update /Lib/OSX
  # Downloads the 200MB OSX folder

【讨论】:

  • 似乎实现我对 SVN 所做的唯一方法是重构现有结构(如上一个答案中所建议的),这有点痛苦。我已接受您的评论作为答案,因为您提供了一个有用的示例。
【解决方案2】:

你不能这样做,这不是 Git 的工作方式。将存储库克隆到您的计算机,进行更改、暂存和提交,然后将其推送回另一个存储库。

如果您的项目位于支持编辑站点文件的 GitHub 等服务上,那么您无需执行任何操作。在网站上修改文件会非常简单。

您是否考虑过将该存储库拆分为许多不同的子存储库,而不是拥有这么大的一个?

【讨论】:

  • 一定有办法的。我对我可以做的任何黑客攻击感兴趣。下载 2 GB 不需要的数据根本没有效率。
  • 是的,将文件拆分在不同的子存储库中使得恢复到一个版本非常困难,因为源文件和构建文件将具有不同的版本号并单独维护。所以你不能说恢复到版本 13(对于源文件和二进制文件)
  • 此外,使用子模块也很容易恢复。您只需还原父存储库,然后执行 git submodule update ,它将还原其子存储库。子子模块的版本存储在主存储库中。
  • @Will 你能告诉我一个描述如何恢复子模块以及版本号如何存储在主存储库中的资源吗?
  • 版本号实际上是 sha 号,并存储在 repo 根目录下名为 .gitmodules 的文件中。一个好的资源是book.git-scm.com/5_submodules.htmlstackoverflow.com/questions/7882603/…
猜你喜欢
  • 2020-07-12
  • 2012-03-21
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多