svnversion
, кажется, самый чистый способ сделать это:
svnversion -c /path/to/your-projects-local-working-copy/. | sed -e 's/[MS]//g' -e 's/^[[:digit:]]*://'
Приведенная выше команда удалит все буквы M и S (указывающие на локальные модификации или коммутацию) из выходных данных, а также меньший номер редакции в случае, если svnversion
возвращает диапазон вместо одного номера редакции (см. документы для получения дополнительной информации). Если вы не хотите фильтровать вывод, извлеките канал и часть sed
этой команды.
Если вы хотите использовать svn info
, вам нужно использовать аргумент «рекурсивный» (-R
), чтобы получить информацию также из всех подкаталогов. Поскольку выходные данные становятся длинным списком, вам нужно выполнить некоторую фильтрацию, чтобы получить последний измененный номер ревизии из всех самых высоких:
svn info -R /path/to/your-projects-local-working-copy/. | awk '/^Last Changed Rev:/ {print $NF}' | sort -n | tail -n 1
Что делает эта команда, так это то, что она берет все строки, включающие строку "Last Changed Rev"
, затем удаляет все из каждой из этих строк, кроме последнего поля (то есть номера ревизии), затем сортирует эти строки численно и удаляет все но последняя строка, в результате чего просто самый высокий номер ревизии. Если вы используете Windows, я уверен, что вы можете сделать это довольно легко, например, в PowerShell.
Просто чтобы прояснить: вышеприведенные подходы дают вам рекурсивный последний измененный номер ревизии только пути в репо, который представляет ваша локальная рабочая копия, для этой локальной рабочей копии, без попадания на сервер. Поэтому, если кто-то обновил что-то по этому пути на сервере хранилища после вашего последнего svn update
, это не будет отражено в этом выводе.
Если то, что вы хотите, является последней измененной версией этого пути на сервере , вы можете сделать:
svn info /path/to/your-projects-local-working-copy/.@HEAD | awk '/^Last Changed Rev:/ {print $NF}'