我想派生一个巨大的存储库(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解决方案,但是错误仍然存在。
是否有办法派生特定目录并减小总回购规模以使其更易于管理?
答案 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和文件名);该文件列表被放回索引中。
无论如何,正如我在评论中指出的那样,由于提交现在不同,您将无法简单地将其合并。