gpt4 book ai didi

svn - 删除 SVN 提交的所有痕迹

转载 作者:行者123 更新时间:2023-12-03 10:57:55 26 4
gpt4 key购买 nike

我们团队中的某个人不小心将包含密码的文件提交到了我们的存储库。密码不能轻易更改。

有没有一种方法,具有完全管理员权限,删除此提交的所有痕迹?我不是在谈论恢复或删除,这显然会将密码保留在文件历史记录中。

最佳答案

是的,但它不适合胆小的人。您必须使用 svnadmin dumpsvnadmin load重新创建您的存储库。

如果您选择这样做,第一步是阻止您的用户提交 ,并备份您的存储库。我还建议您完成存储库副本上的步骤;您可以使用 rsync将整个存储库目录复制到一个临时目录中,然后从那里开始工作。

对于这些说明,我将在临时目录中创建一个新存储库:

tmp, 502> svnadmin create example.repo
tmp, 503> svn co file://`pwd`/example.repo example
Checked out revision 0.

我创建了一个包含四个修订版的文件,其中第 3 个需要删除:
example, 536> svn log test.txt 
------------------------------------------------------------------------
r4 | kgregory | 2011-04-06 08:46:59 -0400 (Wed, 06 Apr 2011) | 1 line

post-bad commit
------------------------------------------------------------------------
r3 | kgregory | 2011-04-06 08:46:42 -0400 (Wed, 06 Apr 2011) | 1 line

bad revision
------------------------------------------------------------------------
r2 | kgregory | 2011-04-06 08:46:28 -0400 (Wed, 06 Apr 2011) | 1 line

good revision
------------------------------------------------------------------------
r1 | kgregory | 2011-04-06 08:46:02 -0400 (Wed, 06 Apr 2011) | 1 line

initial revision
------------------------------------------------------------------------

因此,我们需要使用 -r 转储错误之前和之后的修订。用于指定修订范围的标志。 --incremental第二个转储上的标志很重要,因为它会告诉 load 命令不要创建新文件。

请注意,我从保存存储库的同一目录中运行这些命令。
svnadmin dump -r 1:2 example.repo/ > pred.svndump
* Dumped revision 1.
* Dumped revision 2.
tmp, 552> svnadmin dump -r 4:4 --incremental example.repo/ > succ.svndump
* Dumped revision 4.

现在将原始存储库移开,并创建一个同名的空存储库:
tmp, 540> mv example.repo example.repo.bak
tmp, 541> svnadmin create example.repo

并导入转储文件的内容。
tmp, 569> svnadmin --quiet load example.repo < pred.svndump 
tmp, 570> svnadmin --quiet --ignore-uuid load example.repo < succ.svndump

现在告诉每个人删除他们的工作目录并检查新的。您应该会看到以下日志:
example, 574> svn log test.txt 
------------------------------------------------------------------------
r3 | kgregory | 2011-04-06 08:46:59 -0400 (Wed, 06 Apr 2011) | 1 line

post-bad commit
------------------------------------------------------------------------
r2 | kgregory | 2011-04-06 08:46:28 -0400 (Wed, 06 Apr 2011) | 1 line

good revision
------------------------------------------------------------------------
r1 | kgregory | 2011-04-06 08:46:02 -0400 (Wed, 06 Apr 2011) | 1 line

initial revision
------------------------------------------------------------------------

有一个巨大的警告:此过程假定自错误提交以来没有对文件进行任何提交(即,后继转储仅包含对其他文件的更改)。

如果不是这种情况,您仍然可以删除修订版,但这需要做更多的工作。您需要创建一个新的 checkin ,其中包含文件的干净副本以及在损坏时随它更改的任何其他文件。然后创建多个转储文件,排除包含错误文件的任何修订。

最后:我强烈建议几次试运行。正如你在我的例子中的历史数据中看到的那样,我搞砸了几次。正如我在开头所说的,将 Subversion 存储库复制到临时目录中很容易。当你这样做时,你可以继续尝试直到你做对了,然后只需将固定存储库复制回原位。

关于svn - 删除 SVN 提交的所有痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5566327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com