LINUX.ORG.RU

Записать название коммита в файл этого же коммита

 


0

1

Всем Привет!
Есть гитовый проект, в нем есть файл типа version.txt. Можно ли сделать так, чтобы при коммите содержимое этого файла перезаписывалось названием коммита и включалось в этот же коммит.
Типа: git commit -am «bug N fixed» и что бы в одноименном коммите version.txt сожержал «bug N fixed».

Посмотрел хук commit-msg, но если парезаписывать version.txt из него, то правки не попадают в коммит.

Может кто-то подобное делал?

Эта проблема рещается обычно интеграцией с каким-нибудь багтрекером (или как сейчас называется всё это вместе, так как уже давно больше чем багтрекеры?).

anonymous
()

Костыльное решение: после коммита делаешь что-то вроде git log -n1 --oneline | cut -c 9- > version.txt, потом git commit -a --amend -C HEAD. Но вообще сама идея кажется бредовой. Ладно, если бы в version.txt был хэш коммита...

lu4nik ★★★
()
Ответ на: комментарий от lu4nik

Nope.

--amend Replace the tip of the current branch by creating a new commit. The recorded tree is prepared as usual (including the effect of the -i and -o options and explicit pathspec), and the message from the original commit is used as the starting point, instead of an empty message, when no other message is specified from the command line via options such as -m, -F, -c, etc. The new commit has the same parents and author as the current one (the --reset-author option can countermand this).

It is a rough equivalent for:

$ git reset --soft HEAD^ $ ... do something else to come up with the right tree ... $ git commit -c ORIG_HEAD

but can be used to amend a merge commit.

You should understand the implications of rewriting history if you amend a commit that has already been published. (See the «RECOVERING FROM UPSTREAM REBASE» section in git-rebase(1).)

anonymous
()
Ответ на: комментарий от anonymous

А в чем принципиальная проблема? Если в промежутке между коммитом и амендом не происходит push или fetch с другой машины, то с историей должно быть всё ок. По крайней мере, требования ТСа удовлетворены.

lu4nik ★★★
()
Ответ на: комментарий от lu4nik

Да, ты прав. Для меня название коммита это:

commit 85d09ba32b0502776acf28b6fbef12ee950496a7

А ОП хотел, что бы message добавлялся.

anonymous
()
Ответ на: комментарий от lu4nik

Если такое можно сделать, пусть и хуками, то было бы удобно содержимое этого файла в логи выводить, чтобы было понятно, какой бинарник запускается.Хэш коммита тоже сойдет, но не так информативно )

spike_by
() автор топика

Just for fun, post-commit:

new="$(sed -n -e '/^#/q' -e '/^diff/q' -e 'p' .git/COMMIT_EDITMSG)"
old="$(< ChangeLog)"
if [ "$new" = "$old" ]; then
    exit 0;
fi

echo "$new" >| ChangeLog

git commit --amend -m "$new" --no-edit --no-verify ChangeLog

Если надо добавлять к содержимому файла, то потребуется временный для хранения последнего сообщения.

xaizek ★★★★★
()

Типа: git commit -am «bug N fixed» и что бы в одноименном коммите version.txt сожержал «bug N fixed».

А зачем в репозитории нужен файл version.txt, который дублирует историю этого репозитория?

proud_anon ★★★★★
()

Всем спасибо, решил не замарачиваться и написал 2 строчки скрипта: сначала правка файла, потом коммит.
Жаль, я думал, что есть простое решение средствами гита (

spike_by
() автор топика
Ответ на: комментарий от spike_by

так и бери из гита название последнего коммита. зачем изголяться через файл?

Deleted
()
Ответ на: комментарий от spike_by

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

Создавай файл непосредственно перед сборкой. Думаю тебе нужен Jenkins/TeamCity и/или Ansible. Файл с версией не должен попадать в коммит.

Black_Roland ★★★★
()
Ответ на: комментарий от spike_by

Проще сборочную систему научить прописывать информацию из git в результат сборки

maxcom ★★★★★
()
Ответ на: комментарий от spike_by

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

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

Я, кстати, видел несколько открытых софтин, которые так и делают, но названий не помню.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.