Git игнорирует изменения в файле, но сохраняет их в репозитории

2

Это вопрос, связанный с нашим проектом С# Xamarin.

У нас есть пара файлов в папке "Активы", которые копируются там командой события предварительной сборки. Файлы не используются непосредственно компилятором, но если они отсутствуют, наш CI-сервер не сможет выполнить сборку. Версии их, которые есть на всех машинах dev, вероятно, различны, поэтому, когда мы строим на наших машинах, файлы копируются, а git показывает, что они изменены

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

Из других вопросов я пробовал оба из них:

git update-index --assume-unchanged [path]
git update-index --skip-worktree [path]

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

git reset -- .
git checkout .

Оба не могут отменить изменения файлов до тех пор, пока я не отменим команды update-index, только тогда я могу отказаться от изменений и разрешить переключать ветки.

Есть ли этому решение? Мы делаем что-то вне коробки или просто неправильно?

Теги:
ignore

1 ответ

0
Лучший ответ

Это очень распространенная проблема.

Иногда это хорошо известные custom.js, custom.min.js, custom.css, custom.min.css и подобные. В других случаях это еще один вид "исходных файлов", которые каким-то образом должны быть "там", чтобы программное обеспечение работало, но мы действительно не заботимся о том, что в них.

Звучит знакомо? Он называл скомпилированные файлы. Теперь я знаю, что они на самом деле не скомпилированные файлы - это исходные файлы. Но для всех намерений и пупок эти файлы почти такие же, как скомпилированные файлы. На самом деле это не то, о чем вы заботитесь, и скорее компьютер просто понял, как их поддерживать.

Зачем относиться к ним любым другим, чем к фактическим скомпилированным файлам? Вы упомянули, что команда pre-build event делает эти файлы каждый раз при создании. Это практически делает их частью процесса сборки.

Решение довольно простое. На сервере CI включается событие предварительной сборки, которое генерирует файлы перед фактической компиляцией и добавляет файлы в файл .gitignore.

  • 0
    То, что вы описываете, является именно той проблемой, которую мы имеем. Но когда мы пытались просто добавить их в файл .gitignore, git удалял файл, когда сервер сборки тянул, и тогда сборка не удалась.
  • 0
    Вот ваша проблема: когда вытащил сервер сборки, сборка не удалась . Чтобы это работало, сервер сборки должен иметь возможность генерировать эти файлы. Вы должны сделать это частью процесса сборки для генерации этих файлов - перед компиляцией.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню