搭建私有的git服务平台

为了实现公司开发平台、个人电脑Windows平台、个人电脑Linux平台、国外买的云服务器、即将咬购买的阿里云的云服务器之间的代码同步和快速部署,进行了一些简单的技术选型,首先考虑的是rsync,发现安装非常麻烦,然后考虑了一个商业软件,安装亦不顺,最终决定还是走最成熟的代码仓库平台,svn和git都是不错的选择,但是考虑到两点,抛弃了svn:

  1. svn在每个目录下都有.svn文件夹,内容太多,复制过程中、grep过程中都可能带来麻烦
  2. svn要起后台服务,十分不便

于是乎,git成了不二选择:

  1. git的每个repo都只有一个.git文件夹,不污染源码
  2. git可以不启后端服务(但是用户必须使用ssh模式连接git“服务器”)
下面记录创建git服务器的过程:

选择root服务器

首先选择一个root服务器,它必须满足2个要求: 1. 不停机 2. 所有平台都能连接。于是只能用国外的云服务器作为root服务器了。因为公司开发平台只能连接外网,外网却连不上它,个人电脑不满足不停机的要求。


创建repository(在root服务器上)

登录root服务器,用root帐号创建一个用户raywill,
su raywill
cd /home/raywill
mkdir repository
cd /home/raywill/repository/
git config --global user.name "raywill"
git config --global user.email “hustos@qq.com"
从此以后所有源码的root都在/home/root/repository目录下了。

创建第一个项目(在root服务器上)

一个repository下面可以有多个git项目,git命令的操作目标是单个的项目。例如淘宝有oceanbase和tair两个项目,他们可能的目录结构为:
/home/raywill/repository/oceanbase
/home/raywill/repository/tair
下面创建我们的第一个项目yiker
git init --bare yiker
执行该命令成功后/home/raywill/repository/下生成了一个yiker目录,该目录里面只有一个.git文件夹。

签出项目并增加一个文件(在个人电脑上)

签出项目
  cd ~
  git clone raywill@174.140.1.1:/home/raywill/repository/yiker/ yiker_clone
  cd yiker_clone/
  ls
新建文件
  echo "hello git" > README.txt
将修改提交到本地仓库
  git add *
  git commit
将本地仓库的修改同步到root服务器
  git push origin master


整个过程中遇到三个问题,都一一解决,这些问题都是git带出来的,但都不是git的问题:
1. ssh 174.140.1.1连接极慢的问题
> 很多时候ssh连接慢是由于反向域名解析导致的,不过我遇到的不是这个。用DEBUG模式开启ssh,可以看到慢在哪一步:
ssh -v 174.140.1.1
可以看到ssh连接会尝试用很多种认真方式连接ssh服务器(root服务器),我的卡在了
debug1: Next authentication method: gssapi-with-mic
这一步上。解决方法是编辑root服务器上的ssh配置文件:
vi /etc/ssh/ssh_conf
找到
GSSAPIAuthentication yes
改为
GSSAPIAuthentication no
保存。OK了,连接很快!
详细可以参考: ssh 连接慢解决办法

2. 不支持免密码提交git push的问题
git支持四种传输协议:Local, SSH, Git, HTTP。Local就是本地玩玩,没啥实际用途,Git、HTTP通常都是只读模式,而且都需要起server deamon,剩下只有SSH模式了,比较靠谱,很好使。因为采用了SSH模式,也就可以利用SSH带来的一系列便利了,例如免密码登录。具体方法见我的博客: Linux主机间建立信任关系
这次却奇怪了,按照流程操作却依然不行,最后baidu一番才知道,是文件的权限导致的,具体参考 Linux添加信任关系失败这篇文章。

3. SSHD无法启动的问题
因为搞ssh翻墙,另外手动启动了一个sshd(原来的sshd没有被覆盖,新的sshd在/usr/local/bin/sshd,配置文件中也配置了22端口),导致/etc/init.d/sshd restart失败。
解决办法:新的sshd只监听翻墙端口,老的sshd只监听22端口。

4. 其它问题

误添加文件到git,commit之前可以执行:

git rm -r --cached .


.gitignore

这句的意思是,跟踪platfrom目录下的所有文件,但是忽略所有文件夹,因为有个/在最后>面。

platform/*/

data/*/

~      




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值