2011-10-28 59 views
0

我在github和几个分支有一个存储库。整个回购是约2演出。在转移到git之前,我有一个ant脚本,它将从svn仓库检出一个文件夹,构建二进制文件,然后提交回存储库。如何从GIT中的远程分支获取文件夹

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

这里是我的Ant脚本SVN如何看待

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

  • GIT INIT
  • GIT CLONE http://project.branch15(2 GB)
  • 修改/子文件夹/子文件夹中的一些东西/子目录
  • 凯明分支15
+1

你有没有考虑什么地方存储二进制文件*其他比*你的源代码库? –

+0

是的,拆分不同子库中的文件使得真正难以恢复到版本,因为源文件和构建文件将具有不同的版本号并单独维护。所以你不能说恢复到版本13(对于源文件和二进制文件 – freakyshaggy

+2

不要每次都克隆**,只做一次!从本地回购提取目录 –

回答

2

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

Git子模块本身就是git存储库,因此可以克隆,检出,修改并推送到独立于父存储库的位置。

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

这种方法的另一个优点是你可以克隆主repo(可能是2GB),并假设它是由一些子模块(比如〜10MB〜200MB)组成的,而不占用整个2GB。然后,您可以运行您需要的回购的子模块结账。

下面是一个例子:

文件结构

/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 
+0

似乎是唯一的方法来实现我用SVN做的是重构现有结构(如前面的答案中所建议的那样),这有点痛苦。我已经接受你的评论作为你提供了一个有用的例子的答案。 – freakyshaggy

0

你不能做到这一点,这不是多么的Git作品。将存储库克隆到您的计算机上,进行更改,阶段&提交它,然后将其推回到另一个存储库。

如果你的项目是像GitHub这样的服务,它支持编辑站点上的文件,那么你就不需要做任何这样的事情。在网站上修改文件将非常简单。

您是否曾考虑将该存储库拆分为多个不同的子存储库,而不是拥有如此庞大的存储库?

+0

必须有一种方法,我对任何黑客感兴趣下载2 GB的不必要的数据效率不高 – freakyshaggy

+0

是的,在不同的子库中分割文件使得真正难以恢复到版本,因为源文件和构建文件会有不同的版本版本号和单独维护所以你不能说恢复到版本13(对于源文件和二进制文件) – freakyshaggy

+0

也很容易还原子模块,你只需恢复父库,然后做一个git子模块更新和它将会恢复它的子项子子模块的版本存储在主要的仓库中 – Will