有人将所有二进制文件提交到我们的集市主干,我想摆脱它。`bzr del file' 只从当前版本中删除文件,而不是文件的历史记录。
有没有办法我们可以删除文件历史记录,这样我们就不必下载数百 MB 的数据?
有人将所有二进制文件提交到我们的集市主干,我想摆脱它。`bzr del file' 只从当前版本中删除文件,而不是文件的历史记录。
有没有办法我们可以删除文件历史记录,这样我们就不必下载数百 MB 的数据?
有2种方式。但是您需要准备好重新创建部分(甚至全部)分支历史记录,因此在删除文件后,您当前的(本地)分支将与新分支不兼容。
1)手动方式。您可以在添加大文件之前创建分支的副本以进行修订。然后您需要半手动重新提交您的进一步修订并排除大文件。使用replay
来自 bzr-rewrite 插件(以前的 bzr-rebase)的命令来重播那些没有对大文件进行更改的修订。并merge -cN
用于存在大文件更改的修订,手动删除这些文件并提交。因此,您将保持大部分历史记录完好无损,并将为您的分支的其他文件保留唯一的文件 ID。
2)使用插件将您的历史记录导出为带有命令bzr-fastimport
的快速导入流。然后用命令bzr fast-export
过滤掉大文件。bzr fast-import-filter -x FILE
最后用命令重新创建没有大文件的新分支bzr fast-import
。这种方法会破坏你所有的历史,你所有的文件都会得到新的文件ID,所以你的新分支将与旧分支完全不兼容。
在任何情况下,如果您的共享存储库中包含大文件历史记录,则需要创建新的空共享存储库并将新过滤的分支放在那里。
如果二进制文件是在上次提交中添加的,您可以取消提交。
bzr uncommit
这将使您的工作树保持在您编写“bzr commit”之前的状态。然后删除文件并重新提交。
查看关于撤消错误的集市文档以获取更多详细信息。
您可以使用 -r 选项在一个操作中撤消多个提交:bzr uncommit -r -4
其他选项,如果您不关心修订历史:
您可以导出您的分支 ( bzr export DESTINATION
),然后创建一个新的主干。
导出命令将简单地导出头存储库,没有任何历史记录。
我一直在寻找一种方法来摆脱 CVS/ 目录,这使它成为我所有 bzr 提交的方式。我是 bzr 的新手,所以当时我还不确定我将如何处理它们。(在工作中,中央仓库是 CVS,但我在本地使用 bzr 来帮助我)。这是我为摆脱项目中的一些 CVS 目录所做的一个示例,它并不是完美的,而是一个快速的 hack :)
您在 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
现在目录“new.import”将包含除您过滤掉的内容之外的所有内容。
运行以下脚本以查看新导入的整个修订历史记录,以查找可能仍然存在、您不想要的内容,您应该在 Script_1 中添加另一个 -x 值(然后我将重新运行,直到我满意为止)
在 ~/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,您可以看到搜索找到的内容,然后将它们添加到之前的脚本中,直到您满意为止。
所以,本质上,我会重做几次,直到我满意为止;