SVN: Way to determine revision by comparing file or file content

前端 未结 2 1001
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-24 04:35

I have a scenario where I have a file and I need to know what revision in source this file is.

I may have hundreds of revisions on a particular file and have a file that

相关标签:
2条回答
  • 2021-01-24 05:08

    Cribbing a bit off of this answer, here's a quick and dirty batch file that will do the job, assuming the input file is already under version control.

    @echo off
    
    set file=%1
    set temp_file="temp.file"
    
    if [%file%] == [] (
      echo Usage: "%0 <file>"
      exit /b
    )
    
    for /F "tokens=1 delims=-r " %%R in ('"svn log -q %file%"') do (
      svn cat -r %%R %file% > %temp_file%
      fc %temp_file% %file% > nul
      if errorlevel 0 if not errorlevel 1 echo Matches revision r%%R
      del /Q %temp_file%
    )
    

    This gets the log for the filename given, and for each revision does the following:

    • dumps the version of the file at that revision to a temporary file on disk
    • compares the dumped revision with the input file
    • if they're equivalent, fc sets errorlevel to 0, so check for that and output Matches revision r###
    • removes the temporary file
    0 讨论(0)
  • 2021-01-24 05:15

    If you have to use any content outside VCS and identify corresponding resisions and don't add this data to file (text file) or repository (binaries) - it's your fail (Git-boys must suffer and be excruciated, because they haven't keywords directly /but have smudge|clean filters/ and revision properties /?/, but in SVN you have these possibilities). Re-think about your workflow and start using Power!

    In your current state (no keywords, no metadata) you can (for each file)

    • calculate any available hash for unversioned file
    • calculate the same hash for this file for all revisions in question in repo
    • compare hashes and find a match(es)
    0 讨论(0)
提交回复
热议问题