我们有一个相当庞大的svn存储库,我可以使用git访问。到目前为止一切正常。现在有人意外地将一些巨大的二进制数据块添加到svn存储库中。 (几百MB!) 当然git也在那些块中吮吸(使用git-svn)。
有没有办法有选择地从git 删除某些文件,而不会干扰与svn存储库的同步?
答案 0 :(得分:1)
我认为使用git filter-branch --tree-filter "rm -rf unwanted_dir"
重写git历史记录不会干扰同步 - 据我所知,git-svn
仅依赖于提交消息中的git-svn-id,这应该保持不变相同。不过我还没试过。 ☺
答案 1 :(得分:0)
您可以尝试使用git svn的'ignore path'来指定添加的二进制文件的名称。您可能需要执行'svn reset'以返回添加它们的时间点,然后过滤路径以删除这些文件。
答案 2 :(得分:0)
差点忘了这件事......抱歉。
事实证明,我所描述的问题没有简单的解决办法。我尝试了几个选项,但每个选项都有缺点......但是,如果其他人有同样的问题,也许它会有所帮助:
从git历史记录中删除不需要的文件/文件夹
git filter-branch --tree-filter "[ -f hugefile.bin ] && rm hugefile.bin" -f
优点:
缺点:
git gc --prune=now
或者只是克隆你的存储库(默认情况下不会克隆你的远程svn分支)git svn fetch
git仍将获取未更改的历史记录在最初克隆时切断svn的历史
git svn clone -r N http://yoursvnaddress myPartlyClonedRepo.git
其中N将是同步的最早修订号
优点:
缺点:
稀疏结帐
这是git 1.7中最近添加的内容,允许您有选择地修改工作目录
git config core.sparsecheckout true
echo "*" > .git/info/sparse-checkout
echo '!path-to-huge-unwanted-dir/' >> .git/info/sparse-checkout
git read-tree -m -u HEAD
赞成
缺点