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

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

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

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

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

Пользователь 'oefe' написал в этой теме, что это возможно, но так и не показал, как: https://stackoverflow.com/a/2171973/2339326


person R. Hoek    schedule 24.02.2014    source источник


Ответы (2)


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

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

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

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

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

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

person David W.    schedule 24.02.2014

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

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

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

person alroc    schedule 24.02.2014