Git Ignore не работает, я не понимаю

#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 отличается от того, что есть в мастере.