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

前端 未结 3 1265
死守一世寂寞
死守一世寂寞 2021-02-03 23:54

Given that I\'m using svn command line on Windows, how to find the revision number, in which a file was deleted? On Windows, there are no fancy stuff like grep and I attempting

相关标签:
3条回答
  • 2021-02-04 00:23

    The log is the place to look. I know you don't want to hear that answer, but that is where you need to look for deleted files in SVN.

    The reason for this is simply that a deleted file is not visible after it's been deleted. The only place to find out about its existence at all is either in the logs, or by fetching out an earlier revision prior to it being deleted.

    The easiest way I know of to deal with this problem is to move away from the the command line, and use a GUI tool such as TortoiseSVN.

    TortoiseSVN links itself into the standard Windows file Explorer, so it's very easy to use. In the context of answering this question, you would still use it to look at the logs, but it becomes a much quicker excersise:

    Browser to the SVN folder you want to examine. Then right-click on the folder icon and select TortoiseSVN -> View Logs from the context menu.

    You'll now get a window showing all the revisions made in that folder. In particular, it is easy to see which revisions have had additions and deletions, because the list includes a set of Action icons for each revision. You can double-click on a revision to get a list of files that were changed (or straight into a diff view if only one file was changed)

    So you can easily see which revisions have had deletions, and you can quickly click them to find out which files were involved. It really is that easy.

    I know you're asking about the command-line, but for administrative tasks like this, a GUI browser really does make sense. It makes it much quicker to see what's happening compared with trying to read through pages of cryptic text (no matter how well versed you are at reading that text).

    0 讨论(0)
  • 2021-02-04 00:25

    Install Cygwin.

    I use this:

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

    where

    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
    

    This will give you the revisions for all the actions (add, delete, remove, modify) concerning the file, but with a simple tweak with grep you can get the revisions only for deletion.

    (Obviously, --limit is optional, however you usually have an overview about how deep you need to search which gains you some performance.)

    0 讨论(0)
  • 2021-02-04 00:30

    This question was posted and answered some time ago. In this answer I'll try to show a flexible way to get the informations asked and extend it.

    In cygwin, use svn log in combination with awk

    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}" asks svn log for a verbose log containing ${FILENAME}. This reduces the data transfer.
    • The result is piped to awk. awk gets ${FILENAME} passed via -v in the var vartogether with search pattern var="^ [D] ${FILENAME}$"
    • In the awk program /^r[0-9]+/ {rev=$1} assigns the revision number to rev if line matches /^r[0-9]+/.
    • For every line matching ^ [D] ${FILENAME}$ awk prints the stored revision number rev and the line: $0 ~ var {print rev $0}

    if you're interested not only in the deletion of the file but also creation, modification, replacing, change Din var="^ [D] ${FILENAME}$"to DAMR.

    The following will give you all the changes:

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

    And if you're interested in username, date and time:

    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}'
    
    0 讨论(0)
提交回复
热议问题