Почему Git удаляет файлы, которые вышли из под его контроля?

Я хочу удалить файл из под контроля версий, речь идет о файле .htaccess, но сам файл я удалять не хочу.
Поэтому и использую в своем репозитории такие команды:
git rm --cached htaccess
git add .
git commit -m "убрали из под контроля версий файл .htaccess"
git push

На этом сервере файл .htaccess остается нетронутым.
Эти изменения оказываются в удаленном репозитории.
На другом сервере я получаю эти изменения командой.
git pull
В результате Git удаляет файл .htaccess с сервера, получившего изменения
И я восстанавливаю .htacces для него из резервной копии, почему так происходит? Почему Git удаляет файл?
  • Вопрос задан
  • 2519 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Файл удаляется, потому что история содержит коммит с его удалением.
Чтобы не потерять файлы на других серверах, обновляем их немного хитрее.
git fetch # загрузить обновления репозитория
git switch master # проверяем, что мы в нужной ветке
git reset origin/master # переместить HEAD на актуальное состояние
# сам рабочий каталог при этом не изменится, 
# так как по-умолчанию используется режим reset --mixed
git reset --hard # теперь можно актуализировать рабочий каталог
# файлы указанные в .gitignore не изменятся и не удалятся
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@RidgeA
в .gitignore еще добавить надо.
git накатывает коммит с удалением файла.
На твоей машине не удаляет, т.к. `--cached`
Ответ написан
v_decadence
@v_decadence
Никак. Git проинструктирован Вами удалить файл (на вашей копии он его оставляет засчёт --cached ключа).
При слиянии изменений он повторяет это на другой площадке и удаляет файл (на этот раз не сохраняя, потому что он не запоминает этот ключ для всех, для него это просто удаление).
Нужно удалить этот файл, добавить в .gitignore и потом на каждой площадке добавить вручную обратно после удаления.
Либо нужно сделать git rm --cached на каждой площадке, тогда Git при слиянии увидит, что файл уже удален и ничего с ним не будет делать.
Муторно, но другого способа я сам не нашёл.
Ответ написан
Комментировать
@AnastasiaL Автор вопроса
в .gitignore первым делом добавила. А как сделать, чтобы на других не удалял тоже?
Ответ написан
@aol-nnov
Поэтому и использую в своем репозитории такие команды:
git rm --cached htaccess


Для начала, htaccess и .htaccess - две большие разницы, как говорят у нас в одессе.

в остальном, RidgeA всё правильно сказал :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы