Оригинальное название: Как заставить 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. Таким образом, вы можете прочитать эту тему двумя способами: с оригинальным заголовком и ответом ниже, или с более широкой проблемой выше, снова со всем решением ниже.
Чтобы решить мою первоначальную проблему: Как заставить git игнорировать мой файл независимо от ветвления?
Для решения: Как вставить обновленный git-хэш в Version.hpp?
Частично проблема заключается в проблеме куриного яйца, когда вы не можете узнать свой хэш, пока не будут проверены все файлы, но вы не можете проверить свой обновленный VERSION.hpp, пока не узнаете свой git-хэш. Поэтому я решил оставить VERSION.hpp вне репозитория и в файле .gitignore.
Имейте в виду, что цель встраивания VERSION.hpp в исполняемый файл: если неприятная ошибка обнаруживается в рабочей среде с git-хешем в двоичном файле, мы будем знать, какой код нужно извлечь из git, чтобы мы могли правильно отладить код ,
Вот шаги, которые я предпринял в дополнение к двум шагам выше:
git diff --shortstat
показывает больше 0 строк, у вас грязная область). git rev-list HEAD | sed -n '1p' | cut -c1-10
даст вам первые 10 символов в качестве git-hash. Если ваша локальная область грязная, это git-hash LAST HEAD (я вставил строку LAST в VERSION.hpp). Если это чисто, то это ваш настоящий текущий хэш.Если я вызову cmakerel и cmakedbg после проверки git и если я не изменю код перед сборкой (что я не должен делать для реального выпуска в любом случае), у меня будет VERSION.hpp, который мне нужен, со всей необходимой информацией встроенный.
НОТА Альтернативное решение для модификации .bashrc с помощью псевдонимов — использовать git’s крюк после оформления заказа (теоретически). Однако я не мог заставить это работать, и я уже потратил слишком много времени на эту проблему, но вам, возможно, повезет больше.
Других решений пока нет …