git 版本控制器不用多说了,不懂的自己找度娘。
安装背景:
服务器系统:centos 6。
gogs 版本:0.11.19 @ 2017-06-10。
安装使用的用户:root 和 git。
Mysql :5.5.6(官方要求 Mysql 版本 >= 5.5.3)。
Web服务器:Nginx(用于反向代理)。
域名:管理域名(http(s)://gogs.phpriji.cn),域名已经指向到当前服务器。
目标:可是愉快的通过浏览器管理 git,支持 ssh 和 http 方式 clone 、commit 代码。
第一步:去官网(https://gogs.io/)下载”二进制包“到服务器,下载地址:https://gogs.io/docs/installation/install_from_binary.html。
注意找到自己的 linux 版本:gogs_v0.9.13_linux_amd64.zip是在Linux64位系统上安装的;
gogs_v0.7.33_linux_386.zip 是在Linux32位系统上安装的;
用 root 权限下载到服务器的任何目录(这个就是运行程序,不是安装包,最好选一个你最满意的路径放,省的洁癖症发作,移来移去)。
官方给出的步骤只管生不管养,不管你能不能愉快的使用,所以继续看下面。
第二步:解压,根据下载的包类型,自行找到相应的解压命令,例如下载的是.zip文件,用[unzip xxx.zip] 解压,解压后的文件夹名称是 gogs。
第三步:创建 git 用户:在服务器上 useradd git。并且把 gogs 文件夹和里面所有的文件的所有者换成 git [chown git.git -R gogs]。
第四步:使用 git 身份启动服务,先切换用户 [su git] ,先进入文件夹 cd gogs,然后使用后台启动命令方式:nohup ./gogs web & ,就完成了启动。
可以使用 ps -ef | grep gogs 看到启动的进程。
第五步:安装: 上面只是启动了服务,还没安装呢。用浏览器,通过 ip 地址加 3000 端口访问服务器,即可看到安装界面。
·运行用户必须填写 git,前面已经设置好了 git 用户,并且用 git 用户启动了 gogs 服务。
切不可使用 root 账号去运行,因为权限太大,这个服务还会在 .ssh 里面创建 sshkey ,很危险。不负责任的运维会这么干,之前我们公司就碰到过,导致其他 ssh 都无法登陆,或者 git 无法使用,还以为中了木马。
·准备 Mysql 账号和 gogs 数据库,并填写到相应位置。
·域名:这里的域名是用于 http 的仓库域名地址,例如:gogs.phpriji.cn, 仓库地址就是:http://gogs.phpriji.cn:3000/xx/xxx,和管理的访问地址无关。
·注意:端口就是服务启动后的端口,安装前是 3000 端口,建议继续使用 3000 端口。
·其他的根据需要自己设置。
然后点击提交即可,如果有报错,请仔细看最上面的报错信息,最常见报错是:启动 gogs 的用户不是 git 用户启动的 gogs 服务,数据库密码错误等。
注意:有时候系统会因为各种原因杀掉 gogs 进程,下面提供一个自动监控 gogs 进程的脚本,一分钟执行一次。(注意:必须放在 git 用户下的 crontab 下)
以下代码请在 linux 系统上创建文件后黏贴后保存,在 window 系统编辑后上传会有问题:
#!/bin/bash logs=/web/gogs/log/check_gogs_process.log ps=`ps -efl | grep './gogs web' | grep -v grep | wc -l` if [ $ps -eq 0 ]; then echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') start " >> $logs cd /web/gogs/ && nohup ./gogs web & >> $logs echo "$(date '+%Y-%m-%d %H:%M:%S') done" >> $logs echo "gogs start success" else echo "gogs is run" exit 0; fi
第六步:nginx 反向代理,可通过 gogs.phpriji.cn 打开管理界面。
打开 nginx 配置文件,新建 server 如下:
server { server_name gogs.phpriji.cn; listen 80; # 或者 443,如果你使用 HTTPS 的话 # ssl on; #是否启用加密连接 # 如果你使用 HTTPS,还需要填写 ssl_certificate 和 ssl_certificate_key location / { # 如果你希望通过子路径访问,此处修改为子路径,注意以 / 开头并以 / 结束 proxy_pass http://0.0.0.0:3000/; } }
刷新 nginx 配置 [/etc/init.d/nginx reload] 或者重启 nginx 都可以。
如果想使用 https 访问,必须先去申请 ssl 证书,阿里云有免费的”塞克铁门“证书。
第七步:通过 gogs.phpriji.cn 打开管理后台,用管理员账号登陆。创建子账号,或再用子账号创建仓库。生成并上传密钥。
第八步:如何生成密钥:
1、使用 windows 客户端软件(TortoiseGit 小乌龟)生成:”开始“里面找到 TortoiseGit -> PuTTYgen ,
点击 Generate ,然后鼠标在空白处随便移动,让软件采集随机轨迹,等进度条满了,就自动生成密钥。
然后点击”save private key“保存到本机位置上。并把上面文本框里面所有字符复制到 gogs 管理后台提交。在使用 git clone 的时候,直接选择使用 刚才生成的 ppk 文件即可。
2、windows / linux 命令行创建:
$ ssh-keygen -t rsa -C "admin@phpriji.cn"
按3个回车,密码为空。
最后得到了两个文件:id_rsa和id_rsa.pub。
执行 $ ssh-add ~/.ssh/id_rsa ,载入密钥。
如果报错:
$ ssh-add ~/.ssh/id_rsa Could not open a connection to your authentication agent.
那要先执行:$ ssh-agent bash
然后在执行 $ ssh-add ~/.ssh/id_rsa,就能成功载入秘钥
id_rsa.pub 是公钥,把内容上传到 http://gogs.phpriji.cn/ 的个人私钥设置。
然后在使用命令行 git 的时候,就正常了。
【配置调整】
配置文件位于 Gogs 目录的 custom/conf/app.ini ,是 INI 格式的文本文件。详细的配置解释和默认值请参考 官方文档 ,其中关键的配置大概是下面这些。
RUN_USER 默认是 git ,指定 Gogs 以哪个用户运行
ROOT 所有仓库的存储根路径
PROTOCOL 如果你使用 nginx 反代的话请使用 http ,如果直接裸跑对外服务的话随意
DOMAIN 域名。会影响 SSH clone 地址
ROOT_URL 完整的根路径,会影响访问时页面上链接的指向,以及 HTTP clone 的地址
HTTP_ADDR 监听地址,使用 nginx 的话建议 127.0.0.1 ,否则 0.0.0.0 也可以
HTTP_PORT 监听端口,默认 3000
INSTALL_LOCK 锁定安装页面
Mailer 相关的选项
其中,Mailer 可以使用 Mailgun 的免费邮件发送服务,将 Mailgun 的 SMTP 配置填入到配置中就好。
CERT_FILE HTTPS 授权文件路径 使用 https://gogs.phpriji.cn 必须设置的
KEY_FILE HTTPS 的密钥文件路径 使用 https://gogs.phpriji.cn 必须设置的
【官方最新 gogs 配置说明】https://gogs.io/docs/advanced/configuration_cheat_sheet
部分参考:http://ju.outofmemory.cn/entry/249990?
===========【git 使用总结】============
git clone 仓库名 //从仓库中拉取代码
git checkout 分支名 //切换仓库
git branch -a //查看分支
git pull //更新分支
git status //查看修改状态
git diff //查看本次修改内容
|======================贮藏 stash=============
| git stash 贮藏
| git stash list 查看所有贮藏列表
| git stash pop 弹出一个最新的贮藏
| git stash show stash@{1} 查看某个知道那个版本号的贮藏
| git stash apply stash@{1} 弹出某个知道那个版本号的贮藏
| git stash clear 清空贮藏堆
|============================创建分支====================================
| git checkout -b 分支名 //在本地创建分支
| git push origin 本地分支名:远程分支名 //将本地代码推送到远程分支
| git pull origin 远程分支名 //拉去远程分支代码
|========================================================================
|============================删除分支====================================
| git push origin :远程分支名 //删除远程分支
|========================================================================
| ==================分支=====================
| git branch # 显示本地分支
| git branch –contains 50089 # 显示包含提交50089的分支
| git branch -a # 显示所有分支
| git branch -r # 显示所有原创分支
|============================合并分支====================================
| 将branch分支合并到master
| git checkout branch //切换到branch分支
| git pull -r //拉取最新代码
| git checkout master //切换到master主分支
| git merge branch //将branch分支合并到master
|========================================================================
|============================还原到修改前================================
| git reset
| git revert
| git checkout . //还原到修改前
| git clean -df //新增文件删除
|========================================================================
|============================提交文件====================================
| git add 文件名(.)
| git commit -m “提交注释”
| git commit -am ‘xxx’ # 将add和commit合为一步
| git push
|========================================================================
=========日志===========
| git log # 显示提交日志
| git log -1 # 显示1行日志 -n为n行
| git log -5
| git log –stat # 显示提交日志及相关变动文件
| git show dfb02e6e4f2f7b573337763e5c0013802e392818 # 显示某个提交的详细内容
| git show dfb02 # 可只用commitid的前几位
| git show HEAD # 显示HEAD提交日志
| git show HEAD^