Переместить все коммиты из репозитория на несколько месяцев в будущем - PullRequest
0 голосов
/ 05 сентября 2018

Я искал способы перенести все предыдущие коммиты в репо на более позднюю дату. Что я нашел до сих пор, это

`git filter-branch --env-filter 
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
         export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
     fi'`

Но это хорошо, если я делаю коммит коммитом. Но есть ли способ выполнить все коммиты в репо и переместить их год спустя автоматически вместо того, чтобы вручную перемещать тонны коммитов? Спасибо.

РЕДАКТИРОВАТЬ: Просто, чтобы люди не голосовали против, потому что это плохая практика и т. Д., Поэтому я делаю это, чтобы экспериментировать с графиком / графиком вклада github. Это личный репозиторий с одним пользователем и без других участников.

1 Ответ

0 голосов
/ 05 сентября 2018

Здесь действуют обычные предупреждения о переписывании истории Git - ваша история больше не будет совпадать с другими копиями хранилища, вы должны принудительно нажимать, но принудительное нажатие опасно, поэтому вы должны вместо этого --force-push-with-lease и т. Д. Я не буду подвергать сомнению Ваши мотивы здесь, так как я думаю, что должно быть хорошо известно, что неподписанная история Git от стороннего производителя легко подделывается - вы можете также легко добавить любого автора, которого пожелаете, в свою историю Git. Что касается меня, я немного недоволен тем, что мои личные привычки и цикл бодрствования / сна могут быть удалены из моей учетной записи GitHub, поэтому я могу понять желание очистить эти данные.

Как это сделать

Трудная часть заключается в корректной обработке даты внутри скрипта оболочки. Даты в фильтре будут заданы в формате, заданном date +'@%s %z', например, @1536176083 -0400 может быть одним из значений. Проблема заключается в том, что такая календарная арифметика, как «четыре месяца спустя», на самом деле даже не возможна в этот момент, потому что, не зная, что такое исходный часовой пояс, мы не можем знать, будет ли правильное смещение часового пояса через четыре месяца. Другими словами, Git просто не хранит часовой пояс , поэтому, если вы хотите сохранить часовой пояс, вы должны восстановить его, что сложно.

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

git filter-branch --env-filter '
set $GIT_COMMITTER_DATE
GIT_COMMITTER_DATE=@$((${1#@} + 24*60*60))
set $GIT_AUTHOR_DATE
GIT_AUTHOR_DATE=@$((${1#@} + 24*60*60))
'

Это будет перезаписывать коммиты через 1 день после исходного значения (24*60*60 - это день). Часовой пояс будет местным часовым поясом для всего. Если вы хотите сохранить часовые пояса исходных коммитов, это становится более сложной проблемой, которая, вероятно, потребует большего ручного вмешательства.

Если вы хотите выбрать определенный часовой пояс, вы можете установить переменную окружения TZ при запуске Git.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...