[英]Restore Deleted folder from SVN
在我的SVN文件夾中,有人刪除了我們的項目源代碼。 使用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簿記,因此您提交時可能會遇到麻煩...
不,沒有刪除文件夾的方法,除非它反映在SVN日志中。 有權訪問SVN服務器的管理員可以執行SVNADMIN DUMP
/ SVNADMIN LOAD
並使用SVNDUMPFILTER
刪除變更集,但我不認為這是您要的...或者可能是這樣嗎?
SVN存儲庫可以回滾到任何以前的版本,因此沒有無法撤消的更改。 如果您確定某個文件夾已刪除而沒有在SVN日志中反映出來,那么也許有人的工作副本仍然包含該文件夾-您可以從那里獲取它。
我的2美分:
/trunk/src/my/proj/client
: svn 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.