Ubuntu-搭建简易Git-Server

前端之家收集整理的这篇文章主要介绍了Ubuntu-搭建简易Git-Server前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

自己的理解:git server@H_403_3@就是一个remote 的git@H_403_3@仓库。相当于在服务器端创建的一个git@H_403_3@仓库,然后客户端从这个仓库获取代码以及推送代码到这个仓库。
需求是获取代码,然后做相应的修改再推送代码。即服务器的配置、客户端与服务器的连接方式、服务器端创建仓库、客户端克隆服务器端仓库。

服务器的配置

一般是专门创建一个用户来管理git@H_403_3@。

useradd git  // 在虚拟机上面创建一个名称是git的用户

现在就可以在查看/home/@H_403_3@目录下面是否含有git@H_403_3@用户目录,没有可以直接创建一个。现在相当于在服务器上拥有了一个专门用来管理git@H_403_3@的用户,目录是/home/git@H_403_3@。一般为了安全着想会禁用掉git@H_403_3@的shell@H_403_3@执行能力。

vim /etc/passwd // 修改passwd里面git的配置

改成下面的样式,就是在git@H_403_3@用户模式下无法执行shell@H_403_3@脚本。

git:x:@H_301_49@1002:@H_301_49@1002::/home/git:/usr/bin/git-shell

以上创建了一个没有执行shell@H_403_3@脚本能力的git@H_403_3@用户,为后面git@H_403_3@提供服务。

客户端和服务器的连接方式

Github@H_403_3@的使用来说,可以使用http(s)@H_403_3@或者ssh@H_403_3@协议(还有git@H_403_3@协议和本地协议)来处理客户端和服务器的连接。这里只讲讲ssh@H_403_3@协议的连接。
/home/git/@H_403_3@目录下面创建.ssh@H_403_3@目录。并且创建文件authorized_keys@H_403_3@。
在客户端生成key@H_403_3@,保存在用户目录的.ssh@H_403_3@目录里面。一般是id_rsa@H_403_3@保存私钥,id_rsa.pub@H_403_3@保存公钥。

ssh-keygen -t rsa -C "verycoolegos@gmail.com"

不指定目录的话,现在就可以在用户目录的.ssh@H_403_3@目录下面找到id_rsa@H_403_3@和id_rsa.pub@H_403_3@。
最后需要做的是id_rsa.pub@H_403_3@的内容写入到上面创建的authorized_keys@H_403_3@文件
然后就可以试着连接你的服务器了。

ssh git@servername

服务器端创建仓库

一般使用git init@H_403_3@来创建仓库,但是在服务器上面一般是用git init --bare@H_403_3@创建裸仓库(裸仓库相对普通仓库是不含有自己的工作区,即只包含了.git@H_403_3@里面的内容)。git init --bare@H_403_3@创建裸仓库可以直接push@H_403_3@代码。不是裸仓库的话,从其它客户端没办法直接push@H_403_3@的,需要设置git config receive.denyCurrentBranch ignore@H_403_3@,通过git clone ssh://git@servername:22/sample.git@H_403_3@来拉取代码,然后才可以push@H_403_3@。
/home/git/@H_403_3@目录下面创建裸仓库。

git init --bare sample.git // 裸仓库一般以.git结尾
cd sample.git
ls // 发现就是普通仓库里面的.git目录下面内容

客户端克隆服务器端仓库

克隆代码

git clone git@servername:sample.git

之后的操作就跟在客户端操作普通的git@H_403_3@一样了。

问题

上面似乎一切ok,但是如何在服务器得到git@H_403_3@的工作目录(源代码),毕竟服务器也是需要git@H_403_3@上面的源代码执行的。在服务器中创建一个目录clone 代码就ok 了。那么问题就转化成如何在客户端每次push@H_403_3@的时候在服务器的工作目录下git pull@H_403_3@最新的代码。这里就需要使用到git@H_403_3@的hooks@H_403_3@函数了。在/home/git/sample.git/hooks@H_403_3@目录下面就有很多个hooks@H_403_3@函数,每当git执行到相应的操作的使用就会执行里面的hooks@H_403_3@。
创建一个post-receive@H_403_3@(在客户端推送完成后执行)。

cd sample.git/hooks/
cp post-update.sample post-receive // 创建了一个post-receive,注意这里没有.sample后缀

现在需要做的是在post-receive@H_403_3@执行源代码的更新。将下面内容复制到post-receive@H_403_3@文件中。

// 注意这里的操作,不然会报错fatal: Not a git repository: '.'
// git的hooks里面默认有一些环境变量,会导致无论在哪个语句之后执行git命令都会有一个默认的环境路径
unset GIT_DIR

if [ ! -d "/home/git/sample" ]; then  // 如果sample 目录不存在的时候才会执行clone 操作
    cd /home/git
    git clone /home/git/sample.git sample
fi

cd /home/git/sample
git pull // 拉取最新代码

上面的操作就完成了当客户端push@H_403_3@以后服务器会将最新的代码更新到/home/git/sample@H_403_3@目录下面。
还有可能有一些权限的问题,否则push代码时候会报没写入权限的错。

chown -R git:git sample.git

chown@H_403_3@修改所属用户chomod@H_403_3@修改文件权限。

原文链接:https://www.f2er.com/ubuntu/353305.html

猜你在找的Ubuntu相关文章