簡體   English   中英

從SVN恢復已刪除的文件夾

[英]Restore Deleted folder from SVN

在我的SVN文件夾中,有人刪除了我們的項目源代碼。 使用SVN歷史記錄,我們無法識別刪除那些文件的人。 項目與歷史記錄下未顯示的活動無關。

  1. 有什么選項可以從SVN中刪除文件夾而無需登錄歷史記錄?
  2. SVN服務器下是否有恢復這些文件的選項?

謝謝

除非倉庫遭到嚴重破壞,否則所有刪除內容都會顯示在日志中。 我的猜測是,您正在查詢錯誤的路徑,可能是通過從工作副本中發出svn log 該子命令接受一個URL,因此您可以簡單地:

svn log https://example.com/svn/project/

代替

svn log 

... 要么:

svn log https://example.com/svn/project/trunk/

當然,如果您知道目錄路徑並知道它仍然存在的修訂版本號,則只需:

svn log https://example.com/svn/project/trunk/foo/bar@314 --revision 314:HEAD

更新:盡管Lazy Badger提出了令人驚訝的聲明,但是修訂歷史記錄是Subversion的核心功能,並且不依賴於存儲庫訪問方法:

E:\test>svnadmin create myrepo

E:\test>svn checkout file:///E:/test/myrepo mywc
Checked out revision 0.

E:\test>svn mkdir mywc\mydirectory
A         mywc\mydirectory

E:\test>svn commit -m "Add a directory" mywc
Adding         mywc\mydirectory

Committed revision 1.

E:\test>svn delete mywc\mydirectory
D         mywc\mydirectory

E:\test>svn commit -m "Remove the directory" mywc
Deleting       mywc\mydirectory

Committed revision 2.

E:\test>svn log -r2 -v file:///E:/test/myrepo/
------------------------------------------------------------------------
r2 | ALVARO.GONZALEZ | 2012-04-03 17:00:34 +0200 (mar, 03 abr 2012) | 1 line
Changed paths:
   D /mydirectory

Remove the directory
------------------------------------------------------------------------

E:\test>

這是有道理的:無法跟蹤更改會使Subversion完全無法用作版本控制工具。 評論者可能會將svn log與Apache維護的訪問日志相混淆,這是完全不同的事情,即使通過Subversion命令也無法讀取。

不論提交的方式如何,提交到存儲庫的任何刪除都將顯示在修訂日志中,除非(我已經指出)存儲庫本身已損壞。

如果刪除發生在SVN服務的背后(例如有人登錄到服務器並從命令外殼中刪除了文件/目錄),那么我可以想到的是從SVN中刪除而不將其顯示在日志中的唯一方法。

在這種情況下,您可以從服務器上進行的備份中還原文件/目錄-假設已備份服務器。 請注意,在這種情況下,您很可能可以訪問源的早期版本(進行備份時),具體取決於人們對該目錄的承諾時間。

當然,如果刪除是如上所述發生的,則很可能會弄亂SVN簿記,因此您提交時可能會遇到麻煩...

  1. 不,沒有刪除文件夾的方法,除非它反映在SVN日志中。 有權訪問SVN服務器的管理員可以執行SVNADMIN DUMP / SVNADMIN LOAD並使用SVNDUMPFILTER刪除變更集,但我不認為這是您要的...或者可能是這樣嗎?

  2. SVN存儲庫可以回滾到任何以前的版本,因此沒有無法撤消的更改。 如果您確定某個文件夾已刪除而沒有在SVN日志中反映出來,那么也許有人的工作副本仍然包含該文件夾-您可以從那里獲取它。

我的2美分:

  1. 沒有。
  2. 只需在刪除之前將狀態復制回存儲庫即可。 因此,請看下面的示例。 如果執行以下命令,則應該還原已刪除的文件夾/trunk/src/my/proj/clientsvn copy http://my.company.com/svn/repo/trunk/src/my/proj/client@4710 http://my.company.com/svn/repo/trunk/src/my/proj/

具有文件結構的示例存儲庫:

    Repo: http://my.company.com/svn/repo/
    /trunk
      /src
         /my
           /proj
               /server
               /client (is deleted on revision 4711)

您可以檢查svn日志,以查看svn repo上其他人的活動。

如果從服務器本身中刪除了某個存儲庫,那么您就被搞砸了,應該在某個程序上對該存儲庫進行備份。 沒問題,在您的團隊中,有些人不會從服務器進行更新,因此他/她可能正在刪除該文件。

你可以恢復

svn up -r <with-older-version>.

我個人討厭CVCS系統,我更喜歡使用DVCS。

但是在我的組織中,我被迫使用CVCS。 :(

有什么選項可以從SVN中刪除文件夾而無需登錄歷史記錄?

遺憾的是,是的-使用file:///協議無需任何身份驗證即可訪問回購協議

SVN服務器下是否有恢復這些文件的選項?

是。 您可以使用任何可訪問的svn工具查找最新修訂版本,該文件夾仍存在 ,並且僅將本地工作副本中的該問題文件夾更新為該修訂版本 (結果將得到“稀疏工作副本”)。 將WC的這種狀態提交為新修訂版,並且在此之后必須全部修復(而下次事件將不再發生)

注意: svn copy解決方案也是可行的

暫無
暫無

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

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