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

参考文章

Docker for 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

该命令是直接删除远程分支,请务必清楚其后果!