我试图从我们的SVN存储库中删除大文件,因为我们的非开发人员用户非常酷,为什么5GB文件不会进入源代码管理?
我已经读过,显然这对于SVN来说不是一件容易的事,但是可以使用svndumpfilter
进行攻击,以便我正在做的事情。为了测试我尝试过滤的内容,我创建了一个空的测试存储库,其中包含以下内容:
我已使用此命令转储该存储库:
sudo svnadmin dump /path/to/repo > my.dmp
我可以毫无问题地重新加载它:
sudo svnadmin load /path/to/repo < my.dmp
对于我的测试,我尝试使用此命令过滤掉.sql
文件:
svndumpfilter exclude --pattern '*.sql' < my.dmp > my.dmp.filtered
输出就是这个,正如所料:
bitnami@linux:~/working$ svndumpfilter exclude --pattern '*.sql' < my.dmp > my.dmp.filtered
Excluding prefix patterns:
'/*.sql'
Revision 0 committed as 0.
Revision 1 committed as 1.
Revision 2 committed as 2.
Revision 3 committed as 3.
Revision 4 committed as 4.
Revision 5 committed as 5.
Dropped 2 nodes:
'/NewFolder/09_Script_Migrate_Data_From_dbo.SalesNormalTable_To_dbo.SalesPartitionTable.sql'
'/Test/AllSql.sql'
之后我通过删除文件并重新初始化repo来清理存储库:
sudo rm -r /path/to/repo
sudo mkdir /path/to/repo
sudo chown -R daemon:subversion /path/to/repo
sudo svnadmin create /path/to/repo
一切都很好,我的档案不见了。我将过滤后的repo转储加载到存储库中:
sudo svnadmin load /path/to/repo < my.dmp.filtered
按预期输出(所有SQL文件都消失了):
bitnami@linux:~/working$ sudo svnadmin load /opt/bitnami/repository/RedMineProduction/ < my.dmp.filtered
<<< Started new transaction, based on original revision 1
* adding path : Test ... done.
------- Committed revision 1 >>>
<<< Started new transaction, based on original revision 2
* adding path : NewFolder ... done.
------- Committed revision 2 >>>
<<< Started new transaction, based on original revision 3
* adding path : Test/.NET String Formats.pdf ... done.
------- Committed revision 3 >>>
<<< Started new transaction, based on original revision 4
------- Committed revision 4 >>>
<<< Started new transaction, based on original revision 5
------- Committed revision 5 >>>
但在此之后,当我浏览存储库时,我仍然可以看到TortoiseSVN中的文件。我尝试在Tortoise中清理我的缓存存储库,但这并没有帮助。我想也许这是Tortoise的一个错误,所以我回到我的服务器并将存储库检出到本地目录:
bitnami@linux:~/working$ svn co file:///opt/bitnami/repository/RedMineProduction/
A RedMineProduction/NewFolder
A RedMineProduction/Test
A RedMineProduction/Test/.NET String Formats.pdf
Checked out revision 5.
我查看了目录以确保文件存在:
bitnami@linux:~/working$ ls -lash RedMineProduction/*
RedMineProduction/NewFolder:
total 8.0K
4.0K drwxrwxr-x 2 bitnami bitnami 4.0K Mar 11 15:35 .
4.0K drwxrwxr-x 5 bitnami bitnami 4.0K Mar 11 15:35 ..
RedMineProduction/Test:
total 148K
4.0K drwxrwxr-x 2 bitnami bitnami 4.0K Mar 11 15:35 .
4.0K drwxrwxr-x 5 bitnami bitnami 4.0K Mar 11 15:35 ..
140K -rw-rw-r-- 1 bitnami bitnami 138K Mar 11 15:35 .NET String Formats.pdf
如何让Tortoise刷新到存储库的实际状态?这是一个5版本的回购......它将在我们的20k +修订版存储库中下载......
更多信息:
当我在浏览器中查看存储库时,我过滤掉的文件仍然可见。它们已经损坏了,我无法下载它们,但它们的文件名和相关的目录结构仍然存在。
我查看了my.dmp.filtered
文件,看看旧结构中是否有任何痕迹,并且没有。结构和文件将具有&#34的提交编号;这是填充的空修订版&#34;消息。