簡體   English   中英

SVN:如何知道文件在哪個版本中被刪除?

[英]SVN: How to know in which revision a file was deleted?

鑒於我在 Windows 上使用 svn 命令行,如何找到已刪除文件的修訂號? 在 Windows 上,沒有像 grep 這樣的花哨的東西,我只嘗試使用命令行,沒有 TortoiseSVN。 提前致謝!

編輯:

  • 我看到了一些帖子,例如檢查已刪除文件的歷史記錄,但它沒有回答我的問題。
  • 除了 svn log -v url > log.out 並使用記事本搜索之外,還有其他方法嗎?

安裝 Cygwin。

我用這個:

svn log -v --limit <nr> -v | grep -E '<fileName>|^r' | grep -B 1 <fileName>

在哪里

fileName - the name of the file or any pattern which matches it
nr - the number of latest revisions in which I want to look for

這將為您提供有關文件的所有操作(添加、刪除、刪除、修改)的修訂,但通過grep的簡單調整,您可以獲得僅用於刪除的修訂。

(顯然,--limit 是可選的,但是您通常可以大致了解需要多深的搜索才能獲得一些性能。)

日志是查看的地方。 我知道你不想聽到那個答案,但那是你需要在 SVN 中查找已刪除文件的地方。

原因很簡單,刪除的文件在刪除后不可見。 唯一能找到它存在的地方是在日志中,或者在它被刪除之前取出一個較早的版本。

我知道處理這個問題的最簡單的方法是離開命令行,並使用一個 GUI 工具,比如TortoiseSVN

TortoiseSVN 將自身鏈接到標准的 Windows 文件資源管理器,因此非常易於使用。 在回答這個問題的情況下,您仍然會使用它來查看日志,但它會變得更快:

瀏覽到您要檢查的 SVN 文件夾。 然后右鍵單擊文件夾圖標和 select TortoiseSVN -> 從上下文菜單中查看日志

您現在將獲得一個 window 顯示在該文件夾中所做的所有修訂。 特別是,很容易看出哪些修訂有增刪改查,因為該列表包含每個修訂的一組操作圖標。 您可以雙擊修訂以獲取已更改文件的列表(如果僅更改一個文件,則可以直接進入差異視圖)

因此,您可以輕松查看哪些修訂被刪除,並且您可以快速單擊它們以找出涉及哪些文件。 它真的很容易。

我知道你問的是命令行,但對於這樣的管理任務,GUI 瀏覽器確實很有意義。 與嘗試通讀神秘文本頁面相比(無論您閱讀該文本多么精通),它可以更快地查看正在發生的事情。

這個問題是不久前發布並回答的。 在這個答案中,我將嘗試展示一種靈活的方式來獲取所詢問的信息並對其進行擴展。

在cygwin中,結合awk使用svn log

REPO_URL=https://<hostname>/path/to/repo
FILENAME=/path/to/file

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [D] ${FILENAME}$" \
    '/^r[0-9]+/{rev=$1}; \
    $0 ~ var {print rev $0}'
  • svn log ${REPO_URL} -v --search "${FILENAME}"向 svn 日志詢問包含 ${FILENAME} 的詳細日志。 這減少了數據傳輸。
  • 結果通過管道傳送到awk awk獲得${FILENAME}通過 var var中的-v以及搜索模式var="^ [D] ${FILENAME}$"傳遞
  • awk程序中/^r[0-9]+/ {rev=$1}如果行匹配/^r[0-9]+/ ,則將修訂號分配給rev
  • 對於匹配的每一行^ [D] ${FILENAME}$ awk 打印存儲的修訂號rev和行: $0 ~ var {print rev $0}

如果您不僅對刪除文件感興趣,而且對創建、修改、替換感興趣,請將 var="^ [ D var="^ [D] ${FILENAME}$"中的 D 更改為DAMR

以下將為您提供所有更改:

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [DAMR] ${FILENAME}$" \
    '/^r[0-9]+/ {rev=$1}; \
    $0 ~ var {print rev $0}'

如果您對用戶名、日期和時間感興趣:

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [DAMR] ${FILENAME}$" \
    '/^r[0-9]+/ {rev=$1;user=$3;date=$5;time=$6}; \
    $0 ~ var {print rev " | " user " | " date " | " time " | " $0}'

暫無
暫無

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

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