美文网首页git仓库
在linux搭建git服务器所遇到问题

在linux搭建git服务器所遇到问题

作者: smilemlz | 来源:发表于2018-02-02 09:52 被阅读18次

    前些日子由于原本的win服务器快到期了,于是想着迁移到另一台linux服务器上,这台服务器原本是外包弄的,我也忘了如何使用linux了,所以遇到各种各样的问题。把项目上传到服务器就想到了git跟ftp,也是为了装13就想着用git好了,然后搭建开始。

    在 Linux 下搭建 Git 服务器》这篇文章讲解非常好,可解决前期所有问题。

    但是,我的项目中不能这么结束。

    1,用户名跟文件夹名问题

    文章中创建的是git用户跟git文件夹,但是我想用其他文件夹例如test,所以就需要test用户,当我在本地clone时,用的是

    git clone git@xx.xx.xx.x:/home/test/.git                // @前是git

    也是可以clone下来test文件夹的,但是运行

    ssh git@xx.xx.xx.xx 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub      // @前是git

    这个时候发现在服务端test中的.ssh没有出现authorized_keys文件,反而在git文件夹下出现了,这就不对了。

    这时突发奇想把@前的 git 换成 test ,完美!!!.ssh下出现了authorized_keys。

    2,hooks问题

    在服务端我是用的 git init ,而不是 git init --bare , 因为加上 --bare 会是个裸仓库,也就是没有工作目录,看着不习惯,而 git init 会与你所上传的目录一致。注意的是要在 git init 后

    git config receive.denyCurrentBranch ignore                //设置允许远程接收文件

    否则在 git push 时会报错。

    当本地 git push 后,在服务端没有出现修改后的文件。只有在 git reset --hard 后才会出现,显然这不是所期待的结果。理应是本地 git push ,服务端出现提交的文件。而 .git 中的 hooks 就是解决这个问题的。于是网上找到一个 post-receive 文档在本地 notepad++ 中编辑好,然后上传到服务端中,修改文件的所有者与权限。

    chown test:test post-receive

    chmod +x post-receive

    但是当我满心欢喜本地提交时,git push 后发现有报错

    remote: error: cannot run hooks/post-receive: No such file or directory。

    这就奇怪了,文件有,执行权限有,就是报错。那么肯定是文件的问题了。经过很长时间寻找,一直以为是文件内容问题,所以找了很多复制粘贴到本地,然后提交到服务端。但是都有这个问题。后来找到一个解释编辑格式的问题,也就是在win下编辑好上传,虽然肉眼格式是正确的,但是在linux下会有^M的出现,导致了上面的问题。于是在服务端手敲了一遍后,完美!!!实时提交服务端更新。如果是win下编辑好的,在linux下vim 打开在左下部会有个 (Dos),手敲之后就完全不见了,也算一个检测的条件吧。

    下面粘贴下我的post-receive

    #!/bin/sh

    cd /home/test            //目录

    unset GIT_DIR        //http://blog.csdn.net/richard_jason/article/details/53188200,有不同的解释,但post-receive中代表 .

    git reset --hard       //强制到最新版本号

    希望你看到这个,可以少些坑。

    祝冬安。

    2018.2.2

    相关文章

      网友评论

        本文标题:在linux搭建git服务器所遇到问题

        本文链接:https://www.haomeiwen.com/subject/nndszxtx.html