为什么结帐-f正确的东西放入后接收挂钩?

时间:2018-04-15 03:08:23

标签: git githooks

我在Dreamhost上有一个帐户,他们有关于使用Git跟踪自定义WordPress主题中的文件的说明。他们的指示https://help.dreamhost.com/hc/en-us/articles/227816388-Using-Git-with-DreamPress与其他许多建议相同的网站相同。例如,http://git-memo.readthedocs.io/en/latest/deploy.html

您在一个裸的repo的hooks/post-receive目录中放入一个可执行脚本,它会调用一个git" checkout -f"。这是示例脚本

#!/bin/sh
GIT_WORK_TREE=/home/user/theme-directory git checkout -f  

这是我不明白的。为什么"结账-f"?这只会更改被跟踪分支的名称,但它不会使其更新。不应该拉新(或获取)新内容吗?结帐有多于我的权力吗?

1 个答案:

答案 0 :(得分:1)

post-receiveserver-side hook,将在git push上执行。

所以不需要拉动:客户端推送一些内容,然后在服务器上签出。

  

为什么"结帐-f"?

首先," checkout -f"实际上是checkout -f @checkout -f HEAD:它会检查现在的HEAD(推送后)。

其次,--force option确保切换分支成功,即使索引或工作树与HEAD不同(因为推送只是改变了HEAD)

但我会尝试改为

GIT_WORK_TREE=/home/user/theme-directory git checkout -f  -- .

那就是:specifying a pathspec,它将通过替换索引中的内容或(通常是提交,这里:HEAD,在推送后刚刚更改)来覆盖工作树中的路径。