我有一个相当大的svn存储库,我使用git进行访问。到目前为止一切工作正常。现在有人不小心将一些大块的二进制数据添加到svn存储库中。 (几百MB!) 当然git也吸入这些块(使用git-svn)。从svn同步git存储库中删除数据
有没有办法来选择性地从混帐删除一些文件,而不干扰与svn库同步?
我有一个相当大的svn存储库,我使用git进行访问。到目前为止一切工作正常。现在有人不小心将一些大块的二进制数据添加到svn存储库中。 (几百MB!) 当然git也吸入这些块(使用git-svn)。从svn同步git存储库中删除数据
有没有办法来选择性地从混帐删除一些文件,而不干扰与svn库同步?
差点忘了这个...对不起。
因为事实证明,我没有简单的解决我所描述的问题。我尝试了几种选择,但是每个人都有缺点......不过,也许是有益的,如果任何人有同样的问题:
从git的历史
git filter-branch --tree-filter "[ -f hugefile.bin ] && rm hugefile.bin" -f
优点删除不需要的文件/文件夹:
ç删除该文件ons:
git gc --prune=now
或只克隆你的仓库(在默认情况下无法克隆你的远程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 svn的'忽略路径'来指定已添加的二进制文件的名称。您可能需要执行'svn reset'以回到添加它们的时间点,然后过滤路径以删除这些文件。
我认为使用git filter-branch --tree-filter "rm -rf unwanted_dir"
重写git历史记录不会影响同步 - 据我所知,git-svn
只取决于提交消息中的git-svn-id,它应该保持不变。虽然我没有尝试过。 ☺
听起来有点可怕...但仍然合理。我会试一试克隆回购:) 感谢您的提示 – oliver 2009-10-07 08:26:36
NB,这将有来自SVN的角度改变历史的影响提交开始,所以其他的Git用户将需要重订关闭它在你做完这些之后。 – AlBlue 2009-10-05 18:53:39
不幸的是,这不是一个选项,因为我不能改变svn历史了 – oliver 2009-10-07 08:24:52