Git игнорирует изменения в файле, но сохраняет их в репозитории - PullRequest
0 голосов
/ 13 сентября 2018

Это остроумный вопрос относительно нашего проекта C # Xamarin.

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

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

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

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

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

git reset -- .
git checkout .

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

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

1 Ответ

0 голосов
/ 13 сентября 2018

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

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

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

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

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

...