Какой VCS способен сохранять временные метки файлов? - PullRequest
8 голосов
/ 30 июля 2011

У меня есть коллекция файлов, представляющих «проект» (txt, cfg, отредактированный вручную бинарный файл, скрипты и т. Д.), Которыми я бы хотел управлять в репозитории. Я хотел бы разместить репозиторий и сервер (при необходимости) на своем домашнем компьютере с Windows и иметь доступ к нему удаленно и локально.

У меня настроен сервер VisualSVN и клиент TortiseSVN, и все работает отлично, за исключением одного серьезного зависания; временные метки файлов. Когда я добавляю файл в репозиторий, SVN стирает дату последнего изменения и изменяет ее на дату, когда он был зафиксирован.

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

Итак, мой вопрос: существует ли БЕСПЛАТНАЯ VCS, которая позволяет сохранять исходные метки времени файла и соответствует ли другим моим критериям общего использования? Я посмотрел на GIT, но, похоже, он не был, и я не был уверен в CVS.

Спасибо за любую помощь,

Rob

Ответы [ 8 ]

4 голосов
/ 17 ноября 2011

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

  1. Скачать и установить расширение.

  2. Инициализировать хранилище, где выхотите сохранить метки времени, добавить файлы, но пока не фиксировать.

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

    hg timestamp_mod -s
    
  4. Сделайте первоначальный коммит, чтобы сохранить файлы вхранилище с соответствующими временными метками.

3 голосов
/ 30 июля 2011

Действительно сохранение временной метки каждого файла не является подходом, который хорошо масштабируется.
Я должен знать, что CVCS (Централизованная VCS), которая делает это ... ClearCase !(см. checkin -ptime вариант )
И это sloooooow:)
Плюс, как manojlds упоминает , есть это Вопреки этой идее для Git .

Тем не менее, для SVN было проведено исследование по сохранению временных меток:
Сборка с контрольным журналом контроля версий из Алек Клюс , с примером в github / svnbuilding .
И было подобное исследование с github / gitbuilding .
В обоих случаях речь идет озапись информации в отдельный файл, и даже это не касалось восстановления даты и времени ...

Так что, если вам нужна эта информация:

a / лучше для все файлы, которые вы помещаете в VCS (особенно бесплатную или любую DVCS)
b / вы могли бы, с помощью Git:

  • сделать ваш коммит
  • затем для соответствующих файлов добавьте информацию о временных метках с помощью git notes (которая может добавлять любые метаданные, которые вы хотите добавить поверхny commit, без изменения SHA1s)
2 голосов
/ 05 августа 2011

Это, вероятно, не поможет, но RCS делает это.

При регистрации в файле ci -d устанавливает дату и время регистрации в рабочее время файла последнего изменения.

При извлечении файла, co -M устанавливает время модификации нового рабочего файла в качестве даты полученной ревизии.ПРИМЕЧАНИЕ. На справочной странице co(1) написано

Используйте эту опцию с осторожностью;это может сбить с толку make (1).

Конечно, RCS, вероятно, не хватает многих других функций, которые вам понадобятся, таких как удаленный доступ.

2 голосов
/ 30 июля 2011

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

Из любопытства, зачем тебе это делать? Я думаю, что объяснение проблемы, с которой вы столкнулись, и поиск решения приведут к лучшим результатам, чем вопрос о том, как реализовать одно решение, которое вы использовали.

1 голос
/ 30 июля 2011

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

Вы можете добавить это в конфигурацию svn, и она должна использовать время фиксации:

[miscellany]
use-commit-times = yes

Это может вызвать некоторые проблемы / путаницу, когда отметка времени изменяется на более старую дату, поэтому используйте ее, зная, каковы последствия.

Это то же самое или хуже в DVCS, таких как Git.Линус отвечает в ветке на отметку времени:

Извините.Если вы не видите, как НЕПРАВИЛЬНО устанавливать метку даты обратно на что-то, что приведет к простой «компиляции» неправильной компиляции дерева исходных текстов, я не знаю, о каком определении «неправильно» вы говорите.Это не правильно.Это глупо.И это абсолютно НЕОБХОДИМО для реализации.

http://kerneltrap.org/mailarchive/git/2007/3/1/240167

0 голосов
/ 02 февраля 2019

Это работает в TortoiseSVN для сохранения оригинальных временных меток.После создания нового проекта и после первой проверки a) С помощью такого инструмента, как TotalCommander, установите или исправьте временные метки вручную или лучше. B) Просто скопируйте / замените все файлы из исходного местоположения на оригинальные временные метки в рабочую копию вашей проверки TortoiseSVN.Заменить все файлы.Теперь у них снова есть оригинальная метка времени.TortoiseSVN обнаруживает, что файлы не изменились, и оставляет их в покое.

Внимание: работает только для личного / однопользовательского варианта использования.Если вы извлечете файлы, TortoiseSVN снова будет использовать commit или current timestamp.Но пока вы используете SVN только для регистрации в однопользовательском сценарии, все будет хорошо.

0 голосов
/ 27 марта 2013

CVS может это сделать. Сначала необходимо добавить файлы с помощью cvs import -d ... После этого при первоначальной проверке будут созданы файлы с исходной отметкой времени. Последующие обновления любого рода изменят временную метку в рабочей копии на текущее время, чтобы не перепутать make или аналогичные инструменты. Только первоначальный заказ даст вам исходное время. Мне очень нравится это поведение, так как оно позволяет точно записывать историю.

В настоящее время я сам смотрю, как это сделать с помощью git, но, похоже, это не так.

0 голосов
/ 09 августа 2011

Я выяснил Временное решение

Спасибо всем за ваш вклад.Я нашел обходной путь, который позволяет мне продолжать использовать мою текущую настройку SVN.Я просто архивирую ранее существующие файлы и папки, которые я хочу сохранить оригинальные даты.В самом архиве дата была изменена на текущую при первом коммите, но файлы в архиве при расширении сохраняют свои первоначальные даты.Затем, когда / если они будут обновлены, я удаляю их из архива и добавляю их непосредственно в хранилище.

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

...