Будет ли git checkout удалить файлы, которые не должны быть там?

Если я установил post-recieve hook в git как

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Удалит ли файлы, которые находятся на сервере, но не на моем локальном репозитории git?

Если это так, есть ли способ остановить это?

Ответ 1

Это зависит от того, будут ли файлы удалены в зависимости от того, были ли они уже существовавшими в репозитории до проверки.

Если файлы, находящиеся на сервере (/var/www/www.example.org), отслеживаются в репо на сервере, но новый чек включает в себя изменение, которое их удалило, они будут удалены на стороне сервера.

Если файлы, которые находятся на сервере, НЕ отслеживаются в репо на сервере, они останутся. Поскольку Git не знает о них, Git не удалит их.

Чтобы узнать, отслеживаются ли они на сервере, вы можете сделать git status <file in question>. Если он говорит:

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       <file in question>

Тогда вы знаете, что проверка не будет удалена.

Просто обратите внимание, если позже в новой проверке будет найдена следующая проверка, которая удаляет ее, удалив ее.