服务器端(linux):
1、安装git:sudo apt-get install git
2、创建一个git
用户,用来运行git
服务:sudo adduser git
3、创建证书登录:收集所有需要登录的用户(客户端用户)的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
创建客户端公钥SSH Key:在用户主目录下/c/users/用户名,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com",然后一路回车。id_rsa
是私钥,id_rsa.pub
是公钥。
4、初始化Git仓库:先选定一个目录作为Git仓库,假定是/www/sample.git
,在/www
目录下输入命令:sudo git init --bare sample.git。
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git
结尾。
然后,把owner改为git
:sudo chown -R git:git sample.git
5、禁用shell登录:出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash => git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git
用户可以正常通过ssh使用git,但无法登录shell,因为我们为git
用户指定的git-shell
每次一登录就自动退出。
6、客户端每次提交不能实时看到更新的代码,实现自动同步:
自动同步功能用到的是 git 的钩子功能,
服务器端:进入裸仓库:/www/sample.git
cd /www/sample.git
cd hooks
//这里我们创建post-receive文件
vim post-receive
//在该文件里输入以下内容
#!/bin/bash
git --work-tree=/www
checkout-f
//保存退出后,将该文件用户及用户组都设置成git
chown git:git post-receive
//由于该文件其实就是一个shell文件,我们还应该为其设置可执行权限
chmod +x post-receive
客户端(windows):
本地仓库准备工作:
1、创建客户端公钥SSH Key,把公钥写入到服务器端/home/git/.ssh/authorized_keys
文件里,一行一个。
2、本地选择一个目录作为仓库:git init。
3、克隆远程仓库:git clone (linux用户名:git)@(服务器ip地址):/www/sample.git。
4、提交代码等:
git init
git add README.md (提交全部:git add .)
git commit -m 'first commit'
git remote add origin (服务器ip地址)
git push -u origin master
之后还无法在服务器看到提交的代码,需要更新仓库状态并检出更改(自动同步见服务器端第6步):
git update-server-info
git checkout -f (实际会报错,需要使用:git --work-tree=/www/sample.git/ checkout -f)。完成。
或:
1. 通过 git clone 或 git pull 从 github 仓库上将代码获取到本地
2. 将服务器添加到远程仓库列表,使用名字来区分不同的服务器,如测试服务器可以叫做testing
git remote add testing ssh://git@服务器ip地址/www/sample.git
3. 将本地代码提交到测试服务器上面
git push testing master
参考来源:廖雪峰的官方网站-搭建git服务器:https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664