收件后挂钩出错

时间:2014-06-18 12:17:23

标签: git githooks git-post-receive

我正在尝试使用git实现工作流程。 这就是我的所作所为:

  • 我的本地项目(git初始化课程)
  • 我添加了一个指向xyz
  • 的遥控器
  • 我在服务器上创建了一个目录xyz
  • xyz
  • 中的初始化git
  • 执行git config receive.denyCurrentBranch='ignore'xyz - 之后,我在post-receive中创建了.gt/hooks文件并添加了以下行:

    #!/bin/bash
    GIT_WORK_TREE=/path/to/xyz
    LOGFILE=./post-receive.log
    cd /path/to/xyz/
    echo "Checking out $PWD"
    echo "Run: checkout dev"
    git checkout dev
    echo "Run: git clean -df & git checkout dev"
    git clean -df & git checkout dev
    echo "Run: git submodule update --init "
    echo "Checking out sumodules"
    git submodule update --init 
    chmod 755 -R /path/to/xyz
    

当我push使用git push xyz-branch dev --force时,我收到以下错误:

remote: Checking out /path/to/xyz
remote: Run: checkout dev
remote: fatal: Not a git repository: '.'
remote: Run: git clean -df & git checkout dev
remote: fatal: Not a git repository: '.'
remote: Run: git submodule update --init 
remote: Checking out sumodules
remote: fatal: Not a git repository: '.'
remote: Setting access rights on files and folders
remote: Run: chmod 755 -R /path/to/xyz/

我不知道我应该责备文件或我自己,以便了解错误的原因。

更新

我做了很多错事。感谢推特指出this SO question的朋友,我解决了我的问题。如果我将其解释为答案,我认为没问题。

1 个答案:

答案 0 :(得分:1)

感谢我的推特朋友(dotNet和Azure大师)Ilija让我指向了正确的方向。在阅读了我在OP中提到的SO帖后,我能够实现我的目标。

这就是我的所作所为:

#!/bin/bash
export GIT_WORK_TREE=/path/to/xyz
export GIT_DIR=/path/to/xyz/.git
cd $GIT_WORK_TREE 
echo "Checking out dev"
git checkout dev
git clean -df & git checkout dev
unset GIT_WORK_TREE
unset GIT_DIR
echo "Checking out sumodules"
mkdir "codeigniter"
git submodule update --init 
echo "clean"
echo "Setting access rights on files and folders"
echo "Run: chmod 755 -R $GIT_WORK_TREE"
cd "$GIT_WORK_TREE"
chmod 755 -R "$GIT_WORK_TREE"
echo "Done."

export是解决我的问题的关键。

请注意两个unset命令。 我在repo有一个submodule时运行它们。让submodule获取顺畅。