#git #github #commit #gitignore
#git #github #фиксация #gitignore
Вопрос:
Я думал, что понял это, но при недавних попытках это не удается.
Мне нужно зафиксировать файл, затем после фиксации игнорировать его при любых последующих фиксациях репозитория.
Допустим, файл example.txt .
Я фиксирую изменения в example.txt и отправляйте их на github.
Я тогда touch .gitignore
и добавляю example.txt к нему и сохраняю.
Затем я использую git rm --cached example.txt
Затем git add .gitignore
, чтобы зафиксировать —> нажать на него
Проблема на этом шаге в том, что отображается статус git example.txt как удалено, и, таким образом, фиксация / нажатие удаляет его из удаленного репозитория.
Я попробовал несколько вариантов создания .gitignore
и rm --cached
, и он либо удалил файл, либо не игнорирует его и фиксирует нежелательные изменения.
Ищу информацию о точном процессе игнорирования уже зафиксированных файлов без их удаления.
Комментарии:
1. Что вы на самом деле пытаетесь сделать? Зачем вам нужны файлы в системе управления версиями, которые не являются локальными?
2. Это конфигурационный файл сервера (база данных), который фактически обслуживается непосредственно из github, но localhost db и remote db имеют разные параметры, и нет способа изменить, как это работает, если я не определю две базы данных, я подумал, что было бы проще сказать git игнорировать его послесначала зафиксируйте и оставьте удаленную версию нетронутой.
Ответ №1:
Вы понимаете, что git rm --cached example.txt
это удалит файл из индекса и сохранит его только в рабочем каталоге. И затем, когда вы фиксируете, вы фиксируете удаление файла в дополнение к .gitignore
файлу, который вы добавили. Таким образом, когда вы нажимаете файл, он будет удален из репозитория.
Кроме того, вы не можете игнорировать изменения в отслеживаемом файле с помощью gitignore.
Вместо этого вы можете попытаться сделать git update-index --assume-unchanged example.txt
, чтобы «игнорировать» файл.
Комментарии:
1. Спасибо, я думаю, вы ответили первым.
2. Это определенно помогло, но я не нашел ничего, объясняющего, почему файл .gitignore в некоторых случаях не работает. У меня возникли проблемы с исключением XML-файлов в .idea для проекта intellij Android. Шаблоны игнорирования точно такие, какими они должны быть, и работают для других каталогов на том же уровне пути. почему? кто знает
Ответ №2:
Один из возможных подходов — сообщить Git предположить, что файл не изменился.
$ mkdir project
$ cd project
$ touch example.txt
$ git init
$ git add .
$ git commit -m "checkin..."
$ git update-index --assume-unchanged example.txt
$ echo "hello" >> example.txt
$ git status
# On branch master
nothing to commit (working directory clean)
$
Доверяйте, это то, чего вы хотите. Имейте в виду, что у этого подхода есть свои недостатки, особенно если вы пытаетесь переключиться на ветку, где версия example.txt отличается от того, что есть в мастере.