SVN: способ определения версии путем сравнения файла или содержимого файла

У меня есть сценарий, где у меня есть файл, и мне нужно знать, какая версия исходного кода это файл.

У меня может быть сотни ревизий в конкретном файле и файл, который соответствует одной или нескольким ревизиям. Есть ли способ в черепахе, Cornerstone или через командную строку, чтобы сделать это?

Извиняюсь, если вопрос не самый ясный. Если честно, я не уверен, как сформулировать то, что я ищу.

Я нашел похожий вопрос о мерзавце здесь;

GIT: определить ревизию на основе файла

2 ответа

Решение

Немного отрываясь от этого ответа, вот быстрый и грязный пакетный файл, который выполнит эту работу, предполагая, что входной файл уже находится под контролем версий.

@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%
)

Это получает журнал для данного имени файла, и для каждой ревизии делает следующее:

  • выдает версию файла с этой ревизией во временный файл на диске
  • сравнивает сброшенную ревизию с входным файлом
  • если они эквивалентны, fc наборы errorlevel до 0, так что проверьте это и выведите Matches revision r###
  • удаляет временный файл

Если вам нужно использовать какой-либо контент за пределами VCS и определить соответствующие разрешения и не добавлять эти данные в файл (текстовый файл) или в хранилище (двоичные файлы) - это ваш провал (Git-boys должны страдать и мучиться, потому что они не ключевые слова напрямую / но имеют пятна | чистые фильтры / и свойства ревизии /?/, но в SVN у вас есть такие возможности). Переосмыслите свой рабочий процесс и начните использовать Power!

В вашем текущем состоянии (без ключевых слов, без метаданных) вы можете (для каждого файла)

  • вычислить любой доступный хеш для неверсионного файла
  • рассчитать тот же хеш для этого файла для всех рассматриваемых ревизий в репо
  • сравнить хэши и найти совпадение (я)
Другие вопросы по тегам