从庞大的存储库中分叉特定目录

时间:2019-04-10 12:39:16

标签: git github

我想派生一个巨大的存储库(10GB),将其过滤到特定目录,然后将过滤后的版本推送到新的Github存储库。

我已经使用these指令来提取和过滤到我的目录,该目录有效。但是,当我尝试将过滤后的存储库推回Github时,出现此错误:

$ git push origin master --force
Enumerating objects: 2292154, done.
Counting objects: 100% (2292154/2292154), done.
Delta compression using up to 8 threads
Compressing objects: 100% (562030/562030), done.
error: RPC failed; curl 55 SSL_write() returned SYSCALL, errno = 32
fatal: the remote end hung up unexpectedly
Writing objects: 100% (2292154/2292154), 7.03 GiB | 40.92 MiB/s, done.
Total 2292154 (delta 1726549), reused 2292154 (delta 1726549)
fatal: the remote end hung up unexpectedly
Everything up-to-date

我已经尝试过建议的here解决方案,但是错误仍然存​​在。

是否有办法派生特定目录并减小总回购规模以使其更易于管理?

1 个答案:

答案 0 :(得分:1)

鉴于您提供的链接,问题可能与提交的大小有关。也许只将您的存储库过滤到该目录,但保持与之相关的提交会有所帮助。

摘自git filter-branch手册:

  

要重写存储库,使其看起来好像foodir /是其项目根目录,并丢弃所有其他历史记录:

     

git filter-branch --subdirectory-filter foodir -- --all

希望它可以提供帮助。

要仅保留此目录(并将其保留在结构中),则稍微复杂一些。

根据git-filter-branch手册中的示例判断,应该可以解决问题:

git filter-branch --index-filter \
   'git ls-files -s foodir/ |
       GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
       git update-index --index-info &&
       mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
   ' -- --all

简而言之:git ls-files -s foodir/的输出仅显示foodir /中文件的索引内容(blobtree和文件名);该文件列表被放回索引中。

无论如何,正如我在评论中指出的那样,由于提交现在不同,您将无法简单地将其合并。