Сохранить временную метку файла в репозитории SVN

Первое: я знаю, что SVN НЕ хранит фактическую временную метку файла, а только время последнего коммита.

Второе: при проверке файлов обычно отметка времени файла устанавливается на время фактической проверки. На это можно повлиять, используя такие параметры, как use-commit-times = yes в файле конфигурации Subversion и Set file dates to the 'last commit time' в черепахе SVN или используйте команду svn checkout --config-option config:miscellany:use-commit-times=yes

Но я хочу сохранить отметку времени проверяемого файла И иметь возможность применить его к проверяемым файлам снова!

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

Пользователь oefe разместил в этой теме, что это возможно, но так и не показал как: /questions/2951248/kak-sohranit-vremennuyu-metku-ishodnogo-fajla-commit-v-subversion/2951260#2951260

2 ответа

Решение

С помощью Subversion вы можете изменить временную метку коммита, изменив свойство svn:data revision. Теперь это можно сделать во время самого коммита.

К сожалению, основные хуки, которые можно использовать, запускаются на сервере, а не на клиенте. Тем не менее, Tortoise предоставляет клиентские хуки. Вы можете использовать одну из них, чтобы установить метку времени фиксации на метку времени файла, или (возможно, лучше) установить специальное свойство с этой датой.

Вы должны быть осторожны, потому что это потребует от всех ваших пользователей использования TortoiseSVN в качестве их клиента и настройки этих хуков на их компьютере.

Другая возможность - не хранить эти сторонние библиотеки в Subversion. Существует длительный спор о том, является ли хорошая идея поместить большие двоичные файлы в Subversion. Вы не говорите, что это за библиотеки третьей части. Если вы магазин по разработке на Java, то это сторонние банки. В этом случае используйте Maven или добавьте Ivy в вашу текущую систему сборки и используйте хранилище jar, например Nexus или Artifactory, для хранения этих jar.

Если это среда.NET, взгляните на NuGet. Если это сборка C++, вы можете хранить библиотеки на сервере релизов и, как часть процесса сборки, сделать так, чтобы репозиторий загружал файлы jar в ваш рабочий каталог. В некоторых местах даже использовали Maven для этой части сборки.

Вы должны быть осторожны с метками времени в процессе сборки. Временные метки используются, чтобы сообщить сборке, нужно ли обновлять определенную часть сборки. Игра с временными метками может привести к тому, что сборка не перестроит компонент, требующий перекомпоновки.

Ответ oefe правильный. Единственный способ сделать это - сохранить временную метку в качестве свойства каждого версионного элемента. Чтобы получить полное поведение, которое вы ищете, вам нужно написать свой собственный клиент для обработки установки / обновления свойства и работы с метками времени локальной файловой системы. Или напишите обертку вокруг клиента SVN, чтобы сделать то же самое.

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

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

Другие вопросы по тегам