簡體   English   中英

刪除SVN提交的所有跟蹤

[英]Delete all traces of a SVN commit

我們團隊中的某個人意外地將包含密碼的文件提交到我們的存儲庫。 密碼不容易更改。

是否有一種方法,具有完全管理員權限,刪除此提交的所有痕跡? 我不是在談論恢復或刪除,這顯然會將密碼保存在文件歷史記錄中。

是的,但這不適合膽小的人。 您必須使用svnadmin dumpsvnadmin load來重新創建存儲庫。

如果您選擇這樣做,第一步是阻止您的用戶提交 ,並備份您的存儲庫。 我還建議您瀏覽一下存儲庫的副本; 您可以使用rsync將整個存儲庫目錄復制到臨時目錄中,並從那里開始工作。

對於這些說明,我將在臨時目錄中創建一個新的存儲庫:

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

我創建了一個包含四個修訂的文件,其中第三個需要刪除:

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
------------------------------------------------------------------------

有一個巨大的警告:此過程假定由於錯誤提交(即,后繼轉儲僅包含對其他文件的更改),因此沒有對文件進行任何提交。

如果情況並非如此,您仍然可以刪除修訂版,但這項工作要多得多。 您需要創建一個新的簽到,其中包含該文件的干凈副本以及隨之更改的任何其他文件。 然后創建多個dumpfile,排除包含壞文件的任何修訂。

最后:我強烈建議幾次干運行。 從我的例子中的歷史數字中可以看出,我搞砸了幾次。 正如我在開始時所說的,將Subversion存儲庫復制到臨時目錄中很容易。 當你這樣做時,你可以繼續嘗試,直到你做對了,然后只需將固定的存儲庫復制回原位。

請參閱常見問題解答中的答案

在某些特殊情況下,您可能希望銷毀文件或提交的所有證據。 (也許有人意外地提交了一份機密文件。)這並不容易,因為Subversion是故意設計的,永遠不會丟失信息。 修訂是不可變的樹,彼此建立在一起。 從歷史記錄中刪除修訂版會導致多米諾骨牌效應,在所有后續修訂版中產生混亂,並可能使所有工作副本無效。

然而,該項目計划有一天實施一個svnadmin obliterate命令,該命令將完成永久刪除信息的任務。 (見問題516.)

與此同時,您唯一的辦法是svnadmin轉儲您的存儲庫,然后通過svndumpfilter(不包括壞路徑)將轉儲文件傳輸到svnadmin load命令中。 有關詳細信息,請參閱Subversion書的第5章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM