Остановить git от обновления удаленного файла

У меня есть репозиторий git, в котором есть несколько файлов. (На самом деле это мой репозиторий Advent of Code)

В этом репозитории есть файл, который я хочу сохранить на удаленном GitHub, но я не хочу, чтобы git обновлял его, даже если этот файл изменяется локально. Также я хочу, чтобы это поведение было автоматически на каждой машине, на которую я клонирую этот репозиторий.


Итак, в основном эти шаги:

  1. Создать файл и добавить начальный контент (v1)
  2. Зафиксировать и отправить файл в удаленную ветку
  3. Сделайте что-нибудь, чтобы git игнорировал все изменения в этом файле на всех компьютерах
  4. Изменить содержимое файла (v2)

Теперь я получил файл удаленно (v1) и локально (v2), но я не хочу ничего видеть об этом файле при запуске git status. Кроме того, если я клонирую этот репозиторий (с файлом v1) на другой компьютер и внесу изменения в файл (теперь v3), я не хочу видеть что-либо в git status об этом файле на другом компьютере.

Чтобы привести пример: я хочу добавить файл, который будет содержать мой файл cookie сеанса, в GitHub. Очевидно, я не хочу отправлять файл cookie сеанса на GitHub, просто заполнитель или что-то в этом роде. Но когда я запускаю программу, она должна содержать правильный файл cookie сеанса, поэтому мне нужно обновить файл с помощью фактического файла cookie. Теперь я не хочу, чтобы git обновлял этот файл до GitHub. И когда я клонирую этот репозиторий на другой компьютер, я хочу, чтобы он содержал заполнитель, как на удаленном компьютере, который я затем могу обновить вручную. Также git не должен обновлять файл с этой машины.


Сначала я попытался добавить его в .gitignore и запустить git rm --cached myfile, но затем git также хочет удалить этот файл с удаленного компьютера.

Я пробовал с git update-index --assume-unchanged myfile. Что технически делает то, что я хочу, просто не на всех других машинах, потому что это влияет только на мой локальный репозиторий git.

Есть ли способ выполнить то, что нужно сделать на шаге 3?


person Melvin S.    schedule 11.12.2020    source источник
comment
Попробуйте этот ответ   -  person Joe    schedule 11.12.2020
comment
Спасибо за быстрый ответ. Но я должен выполнить git update-index --skip-worktree myfile на каждой машине, на которую я клонирую репозиторий, чтобы иметь возможность вносить изменения в файл и игнорировать его там. Есть ли способ передать эту информацию также на удаленный компьютер?   -  person Melvin S.    schedule 11.12.2020


Ответы (1)


Вы спрашиваете, как игнорировать изменения в отслеживаемом файле, и ответ заключается в том, что Git этого не делает. Из записи в Git FAQ:

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

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

Любой секрет должен передаваться через среду или файл конфигурации. Можно создать шаблон для этой цели и проверить его, а затем создать сценарий для его копирования в игнорируемое место, чтобы вы могли отредактировать его и добавить секрет. Для большинства основных производственных систем секреты обычно передаются через среду, поэтому они не записываются на диск.

person bk2204    schedule 11.12.2020