git服务器
创建git用户
$ adduser git
$ sudo usermod -G sudo git
上述命令在服务器端执行,创建git用户和提升git用户权限为sudo用户组。
工具软件安装
$ su git
$ sudo apt-get install python python-setuptools git ssh openssh-server openssh-server openssh-sftp-server ssh ssh-import-id
$ git clone https://github.com/res0nat0r/gitosis
$ cd gitosis && sudo python setup.py install
上述命令在服务器端执行,在git用户的home目录下克隆gitosis仓库,然后安装。
创建管理仓库
$ gitosis-init < id_rsa.pub
上述命令在服务器端,git用户home目录执行。其中id_rsa.pub为第一位管理员公钥。可以在客户端通过ssh-keygen -t rsa
生成(所有选择回车即可),生成结果在$HOME/.ssh
(将id_rsa.pub复制到服务器的git用户home目录)。到此,服务器端配置完毕。
提取管理仓库
$ git@192.168.1.100:gitosis-admin.git
上述命令在客户端执行,192.168.1.100对应为实际服务器IP。
添加用户仓库
% cat gitosis.conf 15-06-15 21:27
[gitosis]
[group gitosis-admin]
members = zhouyixing@Deepin
writable = gitosis-admin
[group mbox]
members = zhouyixing@Deepin
writable = sunxi-openwrt sunxi-kernel
修改gitosis-admin.git仓库中的gitosis.conf。如笔者添加了一个mbox组以及sunxi-openwrt和sunxi-kernel两个仓库。mbox项目有两个软件代码仓库。提交上述改动到服务器即可创建仓库。再仔细介绍一下gitosis-admin.git仓库。
$ tree gitosis-admin
gitosis-admin
├── gitosis.conf
└── keydir
└── zhouyixing@Deepin.pub
如果需要添加用户,则在keydir目录中添加用户的公钥以及在gitosis.conf中需要给该用户开启权限仓库的members添加用户名即可。注意zhouyixing@Deepin.pub
表示为用户zhouyixing@Deepin
的公钥。公钥和用户名必须完全一致。
初始化远程仓库
$ git remote add origin git@192.168.1.100:sunxi-kernel.git
$ git push --set-upstream origin master
到此,搭建git服务器要点基本完成。
GOGS
参考文章
安装gogs
- docker
sudo apt-get install docker.io
sudo docker pull gogs/gogs
本文展示的是运行于docker的版本。上述命令中,第一条是安装docker;第二条是下载gogs的docker镜像。
- binary
软件包
安装
在git用户模式下,解压到git用户HOME目录。然后,
# 设置开机启动
1. 将scripts/init/centos/gogs复制到/etc/init.d/gogs
2. 建立软链接/etc/rc3.d/S92gogs指向/etc/init.d/gogs
# 立即启动
1. /etc/init.d/gogs start
# 登陆配置
浏览器打开网页http://ip:3000
运行
sudo docker run --name=gogs -p 10022:22 -p 10080:3000 -v /gogs:/data gogs/gogs
运行后,浏览器打开网页http://192.168.8.253:10080
。浏览器端需要选择数据库,注册网站用户以及建立组织以及仓库等等。这里需要注意的是/gogs
为gogs根目录,请合理设定权限。
git客户端
乱码配置
配置命令:
[zhouyixing@LinuxServer app]$ git config --global gui.encoding gb18030
[zhouyixing@LinuxServer app]$ git config --global i18n.commitencoding gb18030
[zhouyixing@LinuxServer app]$ git config --global i18n.logoutputencoding gb18030
[zhouyixing@LinuxServer app]$ git config --global i18n.logoutputencoding gb18030
[zhouyixing@LinuxServer app]$ git config --global core.quotepath false
另:
因为git会调用设置文本编辑器,所以相应的文本编辑器也应该设定编码。设置方法是通过更改~/.vimrc文件,添加如下内容。
set fileencodings=gb18030,utf-8,cp936,big5,euc-jp,euc-kr,latin1,ucs-bom
管理空目录
find . -type d -empty -exec touch {}\/.gitignore \;
另:find . -regex ‘.*.gitignore’ -exec rm -rf {} \;
分支管理
分支合并
分支合并存在的理由是保存源分支的提交信息到目的分支。切换至目的分支,命令如下
git merge src_branch_name
注意,如果是分叉之后,源分支和新分支各有提交产生了差异就需要使用者自己合并差异。建议合并之后再与目的分支和源分支做一下对比。
本地分支删除
git branch -d branch_name
本地分支删除不影响远程分支。
远程分支删除
git push origin :branch_name
该命令是直接删除远程分支,请务必清楚其后果!