有人把所有二进制文件都交给我们的集市主干,我想摆脱它。 `bzr del file'只删除当前版本的文件,但不删除文件的历史记录。
我们是否有办法删除文件历史记录,以便我们不必全部下载数百MB的数据?
答案 0 :(得分:6)
有两种方法。但是您需要准备好重新创建分支历史记录的一部分(甚至是完整的),这样在删除文件后,当前(本地)分支将与新分支不兼容。
1)手动方式。您可以在添加大文件之前创建分支的副本以进行修订。然后,您需要半手动重新提交进一步的修订并排除大文件。使用bzr-rewrite插件(以前的bzr-rebase)中的replay
命令重放那些不存在大文件更改的修订版。并使用merge -cN
进行对大文件更改的修订,手动删除这些文件并提交。因此,您将保留大部分历史记录,并为分支的其他文件保留唯一的文件ID。
2)使用bzr-fastimport
插件将历史记录导出为bzr fast-export
命令的快速导入流。然后使用bzr fast-import-filter -x FILE
命令过滤掉大文件。最后,使用bzr fast-import
命令重新创建没有大文件的新分支。这个方法会破坏你的所有历史记录,你的所有文件都会获得新的文件ID,所以你的新分支将与旧分支完全不兼容。
在任何情况下,如果您拥有包含大文件历史记录的共享存储库,则需要创建新的空共享存储库并将新的过滤分支放在那里。
答案 1 :(得分:3)
如果在上次提交中添加了二进制文件,则可以取消提交。
bzr uncommit
这将使您的工作树处于您编写“bzr commit”之前的状态。然后删除文件并重新提交。
查看undoing mistakes上的集市文档了解更多详情。
您可以使用-r选项在一个操作中撤消多个提交:bzr uncommit -r -4
其他选项,如果您不关心修订历史:
您可以导出分支(bzr export DESTINATION
),然后创建新的主干
export命令将只导出头部存储库,没有任何历史记录。
答案 2 :(得分:0)
我一直在寻找一种摆脱CVS / dirs的方法,这使得它进入我所有的bzr提交。我是bzr的新手,所以当时我还不确定如何处理它们。 (在工作中,中央回购是CVS,但我在本地使用bzr来帮助我)。 这是我在我的项目中摆脱一些CVS dirs所做的一个例子,它不是完美的,而是一个快速的黑客:)
您在dir / home / user / dev
中有一个名为'projAAA'的项目cd /home/user/dev
bzr fast-export --no-plain projAAA export.gz
cp export.gz ~/tmp/rewrite/
cd ~/tmp/rewrite
此脚本将导出并过滤您提供的所有内容-x
不幸的是-x似乎不适用于通配符,因此您必须提供准确的值/路径/文件
它在〜/ tmp / rewrite
#!/bin/bash
rm -r new.import/ out.filtered
bzr fast-import-filter -x gradle/wrapper/CVS -x gradle/CVS -x .cvsignore* -x .cvsignore -x ChangeFile -x src/main/groovy/cvs/util/CVS -x src/main/groovy/cvs/CVS -x src/main/groovy/CVS -x src/main/java/cvs/util/CVS -x src/main/java/cvs/CVS -x src/main/java/CVS -x src/main/resources/CVS -x src/main/CVS -x src/test/groovy/cvs/util/CVS -x src/test/groovy/cvs/CVS -x src/test/groovy/CVS -x src/test/resources/CVS -x src/test/CVS -x src/CVS -x CVS export.gz > out.filtered
bzr fast-import out.filtered new.import
现在dir“new.import”将包含你过滤掉的所有内容 运行以下脚本来查看新导入的整个修订历史记录,查找可能仍然存在的内容,您不想要的内容,您应该在Script_1中添加另一个-x值(我将重新运行直到我开心)< / p>
在〜/ tmp / rewrite中运行:
#!/bin/bash
THISDIR=$(pwd)
pushd new.import/trunk/
#clean file
echo `date` > $THISDIR/search.out
# I manually enter the revisions that exist here, if you only have 1 to 19, change this accordingly:
for i in `seq 1 70`;
do
echo $i
printf "\n============== rev $i =================\n" >> $THISDIR/search.out
bzr revert -r$i
# Change this find to look for things you want to filter out
find . -name CVS -type d >> $THISDIR/search.out 2>&1
done
popd
如果您现在查看search.out内部,您可以看到搜索找到的内容,然后将其添加到上一个脚本中,直到您满意为止。
所以,从本质上讲,我重复这几次,直到我开心为止;