Могу ли я задним числом создать тег на основе даты? - PullRequest
2 голосов
/ 24 января 2012

Например, я бы хотел сделать следующее ...

$ git tag -a v1.0 [-d 2012-01-01] -m 'the demo version from January 1, 2011'

... и тег должен отражать хранилище для всех коммитов в эту дату.

Ответы [ 2 ]

3 голосов
/ 24 января 2012

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

git log --format=%H --before='2011-01-01' -1 | xargs git tag v1.0

Знак -1 указывает наодин коммит.

2 голосов
/ 24 января 2012

Обратите внимание, что вы на самом деле просите что-то хитрое.Предположим, что B представляет коммит, сделанный до указанной даты, а A представляет коммит, сделанный после него, и ваша история выглядит следующим образом:

- B - B - B - A - A - A - A
   \             /
    B - B - A - A

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

Конечно, если ваша история линейна, и вы не беспокоитесь о том, когда что-то случитсябыли опубликованы, будет легко найти коммит, который вы можете получить с помощью:

git rev-list --before='2012-01-01' -n 1 <branch>

(Там также --after, чтобы найти все коммиты после указанной даты.)

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

Если вы все еще хотите попытаться создать ретроактивные теги на основе дат, а ваша история не проста, совет Адама - самый близкий к вам.Скорее всего, получится, но обратите внимание на предостережения, которые я описал в комментариях.Обратите внимание, что для того, чтобы это действительно имело смысл, вам нужно знать, что имелось в этот день центральное хранилище, а не локальное.По умолчанию рефлоги не включены в пустых репозиториях, но если вы их там включили, вы можете получить соответствующий коммит, перейдя в этот пустой репозиторий и запустив git rev-parse master@{2012-01-01}.В противном случае следующая лучшая вещь в вашем локальном репозитории будет git tag v1.0 origin/master@{2012-01-01} - давая вам позицию вашей ветви отслеживания на эту дату.

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