Как вставить обновленный git-хэш в Version.hpp?

Оригинальное название: Как заставить git игнорировать мой файл независимо от ветвления?

У меня есть следующий файл после оформления заказа, который работает как положено:

#!/usr/bin/ruby

cmd = ENV["HOME"] + "/dev/pitbull/cpp/bin/gen_version.rb --write"`#{cmd}`

Сценарий gen_version.rb вычисляет временную метку, последний главный тег, хэш-заголовок HEAD и записывает в VERSION.hpp файл, который также находится в Git.

Я тогда использую use git update-index --assume-unchanged VERSION.hpp чтобы мерзавец игнорировал мои изменения.

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

git checkout master
error: Your local changes to the following files would be overwritten by checkout:
cpp/inc/core/util/VERSION.hpp
Please, commit your changes or stash them before you can switch branches.
Aborting

Как правильно настроить git, чтобы я мог обновлять VERSION.hpp при извлечении, но git игнорирует любые изменения в этом файле, независимо от моей ветки?

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

4

Решение

Чтобы решить мою первоначальную проблему: Как заставить git игнорировать мой файл независимо от ветвления?

  1. git rm cpp / inc / core / util / VERSION.hpp
  2. добавить cpp / inc / core / util / VERSION.hpp в .gitignore

Для решения: Как вставить обновленный git-хэш в Version.hpp?

Частично проблема заключается в проблеме куриного яйца, когда вы не можете узнать свой хэш, пока не будут проверены все файлы, но вы не можете проверить свой обновленный VERSION.hpp, пока не узнаете свой git-хэш. Поэтому я решил оставить VERSION.hpp вне репозитория и в файле .gitignore.

Имейте в виду, что цель встраивания VERSION.hpp в исполняемый файл: если неприятная ошибка обнаруживается в рабочей среде с git-хешем в двоичном файле, мы будем знать, какой код нужно извлечь из git, чтобы мы могли правильно отладить код ,

Вот шаги, которые я предпринял в дополнение к двум шагам выше:

  1. Напишите короткий скрипт ruby, который делает две вещи, в зависимости от того, грязная местность или нет (если git diff --shortstat показывает больше 0 строк, у вас грязная область). git rev-list HEAD | sed -n '1p' | cut -c1-10 даст вам первые 10 символов в качестве git-hash. Если ваша локальная область грязная, это git-hash LAST HEAD (я вставил строку LAST в VERSION.hpp). Если это чисто, то это ваш настоящий текущий хэш.
  2. Скрипт ruby ​​проверит результат в 1. против фактического файла VERSION.hpp. Если результат изменился, запишите новый результат в VERSION.hpp.
  3. Измените мой .bashrc, добавив два небольших псевдонима — cmakerel а также cmakedbg для вызова cmake в моих локальных каталогах и каталогах выпусков, но перед тем, как я сделаю cmake и make в псевдониме, я вызываю скрипт ruby ​​в 1., чтобы обновить мой VERSION.hpp, если это необходимо.

Если я вызову cmakerel и cmakedbg ​​после проверки git и если я не изменю код перед сборкой (что я не должен делать для реального выпуска в любом случае), у меня будет VERSION.hpp, который мне нужен, со всей необходимой информацией встроенный.

НОТА Альтернативное решение для модификации .bashrc с помощью псевдонимов — использовать git’s крюк после оформления заказа (теоретически). Однако я не мог заставить это работать, и я уже потратил слишком много времени на эту проблему, но вам, возможно, повезет больше.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]