SVN: способ определения версии путем сравнения файла или содержимого файла
У меня есть сценарий, где у меня есть файл, и мне нужно знать, какая версия исходного кода это файл.
У меня может быть сотни ревизий в конкретном файле и файл, который соответствует одной или нескольким ревизиям. Есть ли способ в черепахе, Cornerstone или через командную строку, чтобы сделать это?
Извиняюсь, если вопрос не самый ясный. Если честно, я не уверен, как сформулировать то, что я ищу.
Я нашел похожий вопрос о мерзавце здесь;
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!
В вашем текущем состоянии (без ключевых слов, без метаданных) вы можете (для каждого файла)
- вычислить любой доступный хеш для неверсионного файла
- рассчитать тот же хеш для этого файла для всех рассматриваемых ревизий в репо
- сравнить хэши и найти совпадение (я)