Я конвертирую очень старый и огромный репозиторий CVS в Git, используя cvs2git через Cygwin. Он отлично работает, и я начал тестировать новый репозиторий. Я не обнаружил больших особенностей. Но мне интересно, как определяются временные метки набора фиксации/изменения.Каковы временные метки фиксации, сгенерированные в cvs2git/cvs2svn?
До сих пор я определял, что временные метки между некоторыми версиями CVS отличаются на 1 или 2 часа плюс x, где x - это время от нескольких секунд или минут (в большинстве случаев) до двух 15 минут. Многие временные метки отличаются только целыми часами (x = 0).
Я предполагаю, что это должно что-то сделать с «коррекцией ошибок времени». Я нашел функцию cvs2svn (http://www.mcs.anl.gov/~jacob/cvs2svn/features.html). Возможно, это тоже связано с часовыми поясами.
Результаты моих тестов показывают, что все транзакции с одним файлом в наборе изменений различаются целыми часами. Это поддерживает мою «гипотезу часового пояса». Но это также приводит меня к вопросу о том, как определяется временная метка изменений множеств с несколькими файлами.
Я попытался пройти через код и узнал (с помощью Google), что в config.py cvs2svn_lib есть «COMMIT_THRESHOLD». Думаю, он используется для разбиения файлов на основе CVS вместе. Несмотря на то, что код выглядит хорошо, мой недостаток технического понимания хранилищ CVS, SVN и Git не позволяет мне понять.
Поэтому я был бы признателен, если кто-то может ответить на следующие вопросы:
- Как cvs2svn/cvs2git определяет фиксацию метки времени наборов изменений с несколькими файлами?
- Как работает «коррекция ошибок времени» cvs2svn/cvs2git? (Для меня функциональный фон является более важным, чем технический.)
Сердечные приветы
Edit:
Как кто-то рассматривал этот вопрос, как «слишком широка», я боюсь, что я не сделал моя точка достаточно ясна. Поэтому я хотел бы привести конкретный (пока вымышленный) пример:
cvs2git нашел 3 изменения файла для одного набора изменений. Они совершили в тот же день (скажем, 30 февраля 2016 года). Но их время отличается:
- Файл 1: 12:34:56
- Файл 2: 12:35:38
- Файл 3: 12:36:09
Если бы это было только файл 1, я думаю, что cvs2git использует 2016-02-30T12: 34: 56 как временную метку для Git commit. Но какая временная метка выбрана, когда коммиты для всех 3 файлов принадлежат одному набору изменений?
В связи с этим, когда мой репозиторий конвертируется, время, похоже, настраивается ровно на 1 или 2 часа. Это также происходит, когда в наборе изменений есть только один файл. Наверное, это какая-то настройка часового пояса. Поэтому я хотел бы знать, почему «коррекция ошибок времени» изменила мои временные метки, чтобы проверить, принимаю ли я эти изменения или нет. Я сделал некоторые статистические данные о преобразованном репозитории Git, и время фиксации кажется мне в порядке; но этого недостаточно для меня.
Я вижу, что кто-то проголосовал, чтобы закрыть это как «слишком широкий» (что, вероятно, так). Я не знаю подробностей внутренних функций cvs2 (git/svn) и не могу ответить, но стоит упомянуть, что CVS представляет собой файлоориентированную систему централизованного сервера, в то время как SVN и Git ориентированы на фиксацию (и централизуются и распределены соответственно). Ориентация файла означает, что выполнение хорошей работы по преобразованию требует сопоставления отдельных ревизий файлов (экземпляров cvs ci) в одном единственном коммитах, и для этого потребуется некоторая гибкость timestamp. – torek
Благодарим за комментирование. Я добавил пример, чтобы понять, что я имею в виду. Кстати: я знаю об основных отличиях CVS и Git, особенно о файле и принципах фиксации. Вот почему я хотел бы переключиться на Git. Хотя, я не знаю, как функции реализованы в CVS или Git или cvs2git. Для меня это разница между функциональным и техническим пониманием. Может быть, это немного похоже на то, что я не понимаю, как работают CVS и Git, потому что английский это не мой первый язык. – nemo
I _think_ CVS хранит временные метки в UTC. Когда вы говорите, что временная метка git составляет 1-2 часа, это также в UTC, поэтому ошибка является абсолютной или git отображает время в часовом поясе? (Ваш вопрос кажется хорошо сформулированным и исследованным, поэтому я не хочу оскорблять/раздражать вас здесь, но я просто хотел проверить.) Что касается того, какая из трех временных меток была выбрана, когда git commit изготовлен из нескольких записей cvs : это имеет значение? Я знаю, я знаю, я тоже точно инженер, и я хочу знать, как это работает, но если это не влияет на что-то, возможно, проще всего просто знать, что он делает, это reasonab – Mort