Git Ignore не работает, я не понимаю - PullRequest
3 голосов
/ 29 октября 2011

Я думал, что понял это, но при недавних попытках это терпит неудачу.

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

Позволяетскажем, файл - example.txt.

Я фиксирую изменения в example.txt и отправляю их в github.

Затем я touch .gitignore, добавляю в него example.txt и сохраняю.
Затем я использую git rm --cached example.txt
Затем git add .gitignore для фиксации -> нажмите на нее

Проблема на этом шаге в том, что git-статус показывает example.txt как удаленный и, таким образом, коммит / push удаляетэто из удаленного репо.

Я пробовал несколько вариантов создания .gitignore и rm --cached, и он либо удалял файл, либо не игнорировал его, а также вносил нежелательные изменения.

Ищет точную информациюпроцесс игнорирования уже зафиксированных файлов без их удаления.

Ответы [ 2 ]

7 голосов
/ 29 октября 2011

Вы понимаете, что git rm --cached example.txt удалит файл из индекса и сохранит его только в рабочем каталоге.И затем, когда вы делаете коммит, вы делаете удаление файла, в дополнение к добавленному вами файлу .gitignore.Таким образом, когда вы нажимаете файл, он будет удален из репозитория.

Кроме того, вы не можете игнорировать изменения в отслеживаемом файле, используя gitignore. Вместо этого вы можете попробовать git update-index --assume-unchanged example.txt, чтобы "игнорировать"файл.

2 голосов
/ 29 октября 2011

Один из возможных подходов - сказать 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 отличается от версии в master.

...