обновлять версию каждый раз, когда делается git push? - PullRequest
10 голосов
/ 26 декабря 2010

как нам нравится менять версию (каждый +1), используя git при каждом нажатии?

пример у меня есть 2 php файла

libs/lib1.php
libs/lib2.php

в каждом заголовке обычно есть некоторая информация, такая как

/**
 * LIB1.PHP
 * this libs does something like this
 * and that this is a doc for you
 * @version 145
 * @todo something todo
 * @author DAMS
 */

/**
 * LIB2.PHP
 * this libs does something like this
 * and that this is a doc for you
 * @version 445
 * @todo something todo
 * @author DAMS
 */

можем ли мы искать и добавлять +1 делать версию каждый раз, когда мы нажимаем?

1 Ответ

13 голосов
/ 26 декабря 2010

То, что вы запрашиваете, - это расширение ключевых слов. Для начала взгляните на вопрос часто задаваемых вопросов по Git " Есть ли в git расширение ключевых слов? ". Там написано:

Расширение ключевого слова не рекомендуется. Расширение ключевого слова вызывает всевозможные странные проблемы и не очень полезно в любом случае, особенно в контексте SCM. Вы можете выполнить расширение ключевых слов вне git, используя собственный скрипт. Сценарий экспорта ядра Linux делает это для установки переменной EXTRA_VERSION в Makefile.

См. gitattributes (5) , если вы действительно хотите это сделать. Если ваш перевод необратим (например, расширение ключевого слова SCCS), это может быть проблематично. (Подсказка: поставляемое $Id$-expansion puts the 40-character hexadecimal blob object name into the id; you can figure out which commits include this blob by using a script like this .)

См. Здесь here for a discussion, and о том, как GIT может помочь в любом случае .

Так что у git есть что-то вроде расширения ключевых слов, хотя это не рекомендуется. Git также не имеет понятия «ревизия файла» (каково, по-видимому, ваше @version число), так что это не сможет дать вам именно то, о чем вы просите.

Вы могли бы альтернативно создать хук (возможно, хук предварительного получения?), Который увеличит версию для вас. Это просто исполняемый файл (так что это может быть сценарий оболочки / Python / Perl / Ruby / все, что вам удобно), который будет выполняться автоматически при нажатии. См. Справочную страницу githooks .

Ваш скрипт-хук будет:

  • Определение файлов, которые будут изменены.
  • Из них найти те, которые содержат шаблон @version \d+
  • Увеличить версию. Вы хотите увеличить значение в родительском коммите, а не значение, которое в данный момент находится в файле!

Обратите внимание, что это, по крайней мере, так же плохо, как использование расширения ключевых слов, против которого Git FAQ рекомендует, и, возможно, намного хуже . Это может привести к раздражающим конфликтам слияний. Вы также можете легко получить вводящие в заблуждение номера версий в своем коде, особенно если вам когда-либо придется зафиксировать исправление в более старой версии, хотя это, вероятно, также произойдет, когда вы объединяете изменения из нескольких репозиториев / веток (что довольно часто встречается в большинстве рабочие процессы git), если вы не осторожны.

...