今天在 git 版本控制系統(tǒng)中出現(xiàn) post-receive 鉤子不能正常執(zhí)行 git pull 的操作,折騰了好久才發(fā)現(xiàn)是 git 的鉤子在運(yùn)行的時候會調(diào)用 GIT_DIR 這個環(huán)境變量,下如來記錄如何解決這個問題的方法.
有一個需求是本地git在push到遠(yuǎn)程 git repo 之后,在遠(yuǎn)程服務(wù)器上自動在/dir/foo下執(zhí)行 git pull 的操作,想來是一個很簡單的需求,不就是在遠(yuǎn)程的 foo.git 倉庫中的 hook 里加一個 post-receive 的鉤子,然后在鉤子里加入一個 git pull 的操作,但是實際操作的時候發(fā)現(xiàn)有問題的,因為這樣忽略了一個小細(xì)節(jié)的問題.
操作之前,頭腦里想的代碼如下:
- #!/bin/sh
- cd /var/git/web3/etc/puppet
- /usr/bin/git pull
用這個代碼在 git push ssh://git@ownlinux.org:/opt/foo.git 之后,發(fā)現(xiàn)遠(yuǎn)程服務(wù)器上的 /dir/foo 目錄下并沒有成功 pull 到最新的數(shù)據(jù),并且終端上也有報錯(remote: fatal: Not a git repository: ‘.’),后面發(fā)現(xiàn) git 的鉤子在運(yùn)行的時候會調(diào)用 GIT_DIR 這個環(huán)境變量,而不是PWD 這個,所以在 git pull 的時候提示 Not a git repository: ‘.’,其中 “.” 正是 GIT_DIR 這個環(huán)境變量的值.
鉤子的代碼改成下面的之后,運(yùn)行正常了:
- #!/bin/sh
- unset $(git rev-parse --local-env-vars)
- cd /var/git/web3/etc/puppet
- /usr/bin/git pull
使用 git 做版本控制的朋友希望你不要和我一樣忽略這個小細(xì)節(jié)的問題.
新聞熱點
疑難解答
圖片精選