【发布时间】:2018-02-15 15:14:19
【问题描述】:
Git 在我们的开发服务器上响应很好,但是当我们执行 git push 时,git hook 会告诉实时服务器执行 git pull 以发布在该步骤中已推送到开发服务器上的所有内容。我们的问题是,git hook 大约需要 45 秒才能从实时服务器执行 git pull,但是当我们在实时服务器上手动执行 git pull 时,它几乎是瞬间完成的。
打开时间戳的调试后,这是一个示例:
$ git push
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 435 bytes | 217.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Checking connectivity: 5, done.
remote: Debug: set branch start @ Wed, Sep 6, 2017 10:12:28 PM
remote: Debug: set branch end @ Wed, Sep 6, 2017 10:12:28 PM
remote: GIT pull master on live server...
remote: Debug: cd start @ Wed, Sep 6, 2017 10:12:28 PM
remote: Debug: cd end @ Wed, Sep 6, 2017 10:12:28 PM
remote: Debug: unset git_dir start @ Wed, Sep 6, 2017 10:12:28 PM
remote: Debug: unset git_dir end @ Wed, Sep 6, 2017 10:12:28 PM
remote: Debug: git pull start @ Wed, Sep 6, 2017 10:12:28 PM
remote: From //liveserver/GIT/repos/ThisProject
remote: * branch master -> FETCH_HEAD
remote: 6434be6e..f6c6e04d master -> origin/master
remote: Updating 6434be6e..f6c6e04d
remote: Fast-forward
remote: applications/the_changed_file.php | 2 +-
remote: 1 file changed, 1 insertion(+), 1 deletion(-)
remote: Debug: git pull end @ Wed, Sep 6, 2017 10:13:14 PM
remote: Done!
To //liveserver/GIT/repos/ThisProject.git
6434be6e..f6c6e04d master -> master
我们完全不知道如何才能将其加速到接近直接从实时服务器运行 git pull 所需的时间。我们能做些什么来解决这个问题?
我们在开发服务器和实时服务器上都在 Windows Server 上使用 Git Bash。
【问题讨论】:
-
你在直播服务器上使用的钩子是什么,是接收后钩子吗?你能展示一下钩子的脚本吗?
-
这是 post-receive 钩子......:
#!/bin/sh read oldrev newrev refname BRANCH=${refname#refs/heads/} if [ "$BRANCH" == "master" ]; then cd //liveserver/SMBWindowsShare/ThisProject unset GIT_DIR echo Debug: git pull start @ "$(date)" git pull origin master # This is what takes 45+ seconds echo Debug: git pull end @ "$(date)" echo Done! fi exit; -
我添加了一个答案来更改部分接收后挂钩脚本(改为
unset GIT_DIT和git pull origin master)。您可以尝试一下,看看它是否需要更少的秒数。
标签: git version-control githooks