从svn synchronized git存储库中删除数据

时间:2009-10-05 09:58:02

标签: svn git git-svn

我们有一个相当庞大的svn存储库,我可以使用git访问。到目前为止一切正常。现在有人意外地将一些巨大的二进制数据块添加到svn存储库中。 (几百MB!) 当然git也在那些块中吮吸(使用git-svn)。

有没有办法有选择地从git 删除某些文件,而不会干扰与svn存储库的同步?

3 个答案:

答案 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 repo中)。要么s.th.沿着git gc --prune=now或者只是克隆你的存储库(默认情况下不会克隆你的远程svn分支)
  • 您获得的分支将不再与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

赞成

  • 轻松设置

缺点

  • 不会影响数据库的大小(.git)