簡體   English   中英

SVN:查找更新為不存在的文件

[英]SVN: find files updated to nonexistence

我正在編寫一個Shell腳本,該腳本可以存儲SVN工作副本的實際狀態,並在以后完全恢復它的狀態。 目前,我對文件和目錄的修訂的特定的,罕見的組合存在問題,這似乎是無法檢測到的。

假設有一個帶有兩個修訂版的存儲庫。 有兩種情況:

  1. 假設foo是僅存在於修訂版2中的文件(或目錄)。首先,整個工作副本位於修訂版2中。然后, foo (且僅foo )更新為修訂版1。

  2. 假設bar是僅存在於修訂版1中的文件(或目錄)。首先,整個工作副本位於修訂版1中。然后, bar (僅bar )更新為修訂版2。

兩種情況都非常相似,但似乎有不同的解決方案。 在這兩種情況下,文件(或目錄)都將消失。 但是,命令svn status輸出不包含有關此信息。

如何通過Shell腳本創建此類文件和目錄的列表?


有一個簡單但不好的解決方案。 可以使用svn list命令獲取當前版本中應該存在的文件列表,並將其與實際存在的文件列表進行比較。

該解決方案是不可接受的,因為它要花費大量時間,並且會給服務器帶來大量流量。


我發布了我能想到的最佳答案。 盡管如此,它僅適用於第一種情況,並且具有假陽性。

我曾經嘗試做與您正在做的相同的事情,但是我遇到了很多極端的情況,最終我轉向了完全不同的方向。 我沒有使用腳本,而是使用了本地git存儲庫。

從Subversion存儲庫中簽出工作副本,然后使用git init在該文件夾中創建本地git存儲庫。 使用git addgit commit將Subversion工作副本的全部內容添加到git存儲庫- 包括 .svn元數據目錄。 Git現在跟蹤您的工作副本以及與其相關聯的所有Subversion元數據。 我當前的git存儲庫具有5個不同的分支,每個分支基於不同的Subversion版本,並且包含尚未提交到Subversion存儲庫的不同更改集。 git存儲庫使它們之間的來回切換變得容易,並且Subversion就像它們都是單獨的工作副本一樣工作。 即使對於大型工作副本,git也可以有效地存儲內容並在分支之間快速切換。

請注意,這與git svn命令不同,后者是git直接與Subversion存儲庫接口的方法。 我發現git svn的使用更復雜,更容易出錯。 將普通的Subversion工作副本包裝在git存儲庫中,使我仍然可以使用Subversion執行所有存儲庫操作,並且只需要我學習一些基本的git命令( addcommitbranchcheckout等)。 對於有Subversion經驗和git新手的人來說,這要容易一些。 git svn更適合於對git有經驗並且受Subversion存儲庫困擾的人。

我發現第一種情況的部分解決方案。

svn status -u | grep '^........\*........ ' | cut -c 22-

此代碼顯示了頭部修訂版中存在的所有文件,而當前版本中不存在。 這將從第一種情況中查找文件和目錄。 但是,當將父目錄(仍然存在)更新為較低版本時刪除文件時,它將生成假陽性。

暫無
暫無

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

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