如果我在Git中设置了一个post-receive hook,就像这样:
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
这会删除服务器上但不在我的本地git仓库中的文件吗?
如果是的话,有没有办法阻止它?
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
这会删除服务器上但不在我的本地git仓库中的文件吗?
如果是的话,有没有办法阻止它?
这取决于文件是否在检出之前已存在于仓库中,并且会被删除。
如果服务器上的文件(/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>
那么你就知道一个checkout不会移除.
请注意,如果后面的新checkout中存在,则下一个移除它的checkout将会移除它。