2009-10-05 149 views
1

我有一个相当大的svn存储库,我使用git进行访问。到目前为止一切工作正常。现在有人不小心将一些大块的二进制数据添加到svn存储库中。 (几百MB!) 当然git也吸入这些块(使用git-svn)。从svn同步git存储库中删除数据

有没有办法来选择性地从混帐删除一些文件,而不干扰与svn库同步?

回答

0

差点忘了这个...对不起。

因为事实证明,我没有简单的解决我所描述的问题。我尝试了几种选择,但是每个人都有缺点......不过,也许是有益的,如果任何人有同样的问题:

从git的历史

git filter-branch --tree-filter "[ -f hugefile.bin ] && rm hugefile.bin" -f 

优点删除不需要的文件/文件夹:

  • 有效地从你的资料库

ç删除该文件ons:

  • 你将不得不清理你的仓库(摆脱旧的提交,因为他们仍然在git仓库中)。或者s.th.沿着git gc --prune=now或只克隆你的仓库(在默认情况下无法克隆你的远程SVN分支)
  • 分支你不会SVN再同步(如果你做的是另git svn fetch混帐仍将获取不变的历史

切SVN的历史当最初克隆

git svn clone -r N http://yoursvnaddress myPartlyClonedRepo.git 

其中N将是最早的版本号即同步的

优点:

  • 使你保持你的仓库小的尺寸(我首先想)

缺点:

  • 更早的历史“丢失“

稀疏结账

这已经是最近才加入的混帐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的)
0

你可以尝试使用git svn的'忽略路径'来指定已添加的二进制文件的名称。您可能需要执行'svn reset'以回到添加它们的时间点,然后过滤路径以删除这些文件。

+0

NB,这将有来自SVN的角度改变历史的影响提交开始,所以其他的Git用户将需要重订关闭它在你做完这些之后。 – AlBlue 2009-10-05 18:53:39

+0

不幸的是,这不是一个选项,因为我不能改变svn历史了 – oliver 2009-10-07 08:24:52

1

我认为使用git filter-branch --tree-filter "rm -rf unwanted_dir"重写git历史记录不会影响同步 - 据我所知,git-svn只取决于提交消息中的git-svn-id,它应该保持不变。虽然我没有尝试过。 ☺

+0

听起来有点可怕...但仍然合理。我会试一试克隆回购:) 感谢您的提示 – oliver 2009-10-07 08:26:36