git checkout -f
Есть еще один способ сделать это, отделив репо от рабочего дерева.
Этот метод полезен, если вам необходимо регулярно обновлять эти git-файлы. Например, я использую его, когда мне нужно проверить исходные файлы и создать артефакт, затем скопировать артефакт в другое хранилище просто для развертывания на сервере, а также я использую его при передаче исходного кода на сервер, когда я хочу Исходный код для оформления заказа и встраивания в каталог www.
Мы сделаем две папки, одну для git, одну для рабочих файлов:
mkdir workingfiles
mkdir barerepo.git
инициализация голого репозитория git:
cd barerepo.git
git --bare init
Затем создайте хук после получения:
touch hooks/post-receive
chmod ug+x hooks/post-receive
Редактировать пост-получение в вашем любимом редакторе:
GIT_WORK_TREE=/path/to/workingfiles git checkout -f
# optional stuff:
cd down/to/some/directory
[do some stuff]
Добавить это как удаленный:
git remote add myserver ssh://user@host:/path/to/barerepo.git
Теперь каждый раз, когда вы продвигаетесь к этому голому репо, оно проверяет рабочее дерево на /workingfiles/
. Но /workingfiles/
сам не находится под контролем версий; запуск git status
в /workingfiles/
выдаст ошибку fatal: Not a git repository (or any parent up to mount point /data)
. Это просто простые файлы.
В отличие от других решений, команда rm -r .git
не нужна, поэтому, если /workingfiles/
- это какое-то другое git-репо, вам не нужно беспокоиться о команде, использованной для удаления файлов git другого репозитория.