搭建git远程服务器


描述:PuTTY远程登陆Ubuntu16搭建git服务器
服务器:阿里云服务器,Ubuntu16系统
管理员:windows系统,PuTTY远程登陆Ubuntu

参考博客:

http://www.cnblogs.com/charliePU/p/7528226.html

https://www.linuxidc.com/Linux/2015-07/120616.htm


前期问题(没有的请忽略):PuTTY老是掉线
解决办法:
1.点开Connection选项,"Seconds between keepalives" > 填60+
2."Enable TCP keepalives" 打勾


一、软件准备

1.安装 git-core, openssh-server, openssh-cilent。
安装命令:
root@ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
注意:如果安装失败,可能软件库过旧,用"sudo apt-get update"命令,更新软件库,然后再继续安装。

2.安装python-setuptools软件

该软件是用来安装gitosis的。

安装命令:
root@ubuntu:~$ sudo apt-get install python-setuptools

3.安装gitosis

Gitosis主要用于管理用户对仓库的操作权限。

Pre:安装gitosis之前,需要初始化git服务器用户信息。

输入命令:

root@ubuntu:~$ git config --global user.name "yourname" 

root@ubuntu:~$ git config --global user.email "[email protected]"

Next: 获取gitosis版本文件
输入命令:
root@ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
注意:中间是两个数字0。

Final: 安装gitosis.
进入gitosis目录,使用python命令安装目录下的setup.py的python脚本进行安装。
输入命令:
root@ubuntu:~$ cd gitosis
root@ubuntu:~/gitosis$ sudo python setup.py install
到这里,服务器上git所需软件都已安装完毕.


二、Git服务器配置

1.创建git管理员账户
增加用户:
root@ubuntu:~/gitosis$ sudo useradd -m git
修改git用户密码:
root@ubuntu:~/gitosis$ sudo passwd git 输入密码

2.创建项目仓库存储点
在/home/目录下创建一个目文件夹作为仓库,修改用户组和权限
root@ubuntu:~/gitosis$ sudo mkdir /home/gitrepository 
root@ubuntu:~/gitosis$ sudo chown git:git /home/gitrepository 
root@ubuntu:~/gitosis$ sudo chmod 700 /home/gitrepository 
由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。
root@ubuntu:~/gitosis$ sudo ln -s /home/gitrepository /home/git/repositories

3. 初始化gitosis
First: 在管理员计算机端(或服务端)生成SSH公钥,输入命令:
ssh-keygen -t rsa
这里会提示输入密码(使用公钥时的密码),一般我们不输入直接回车即可。

Next: 【很重要!!!】

远程服务器:用管理员计算机生成的公钥id_rsa.pub来对gitosis进行初始化。

1.可以在服务器上新建id_rsa.pub文件然后手动复制公钥。

2.本地将id_rsa.pub推送到到服务器 "/tmp " 目录下,

smallwaylzy@smallway MINGW64 /d/git/gitserver
$ scp /.ssh/id_rsa.pub root@serverIP:/tmp

本地服务器:用刚生成公钥id_rsa.pub来对gitosis进行初始化。

输入命令:
root@ubuntu:~/gitosis$ sudo -H -u git gitosis-init < /root/.ssh/id_rsa.pub 
“ /root/.ssh/id_rsa.pub ”为公钥路径

如果出现如下信息说明gitosis初始化成功
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一个post-update文件添加可执行的权限。

root@ubuntu:/home/git$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
后边路径根据初始化提示的gitosisi的实际路径填写


三、使用gitosis管理用户操作项目的权限

1.

首先需要在管理员(前面生成ssh公钥用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。


在客户端(windows)机器上新建一个目录用于存放gitosis-admin.git仓库

smallwaylzy@smallway MINGW64 /d/git/gitserver
$ git clone git@serverIP:gitosis-admin.git
clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用来存放ssh公钥文件(一般以“micheallee.pub”命名,gitosis.conf配置文件中需使用相同用户名(micheallee)),用于认证请求的客户端机器。

2.

现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名命名好,复制到keydir目录下。


然后编辑gitosis.conf文件,如下

[gitosis]

[group gitosis-admin] ####管理员组

members = micheallee ####管理员用户名,需要在keydir目录下找到相应的 .pub 文件,多个可用空格隔开(下同)

writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)


[group testwrite] 
members = micheallee zhangsan
writable = mytestproject


[group testread] 
members = micheallee lisa
readonly= mytestproject

因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。

smallwaylzy@smallway MINGW64 /d/git/gitserver (master)
$ git add .
smallwaylzy@smallway MINGW64 /d/git/gitserver (master)
$ git commit -am "add a user permission"
smallwaylzy@smallway MINGW64 /d/git/gitserver (master)
$ git push origin master

现在,服务端的git就已经安装和配置完成了,接下来就需要有权限的组成员在各自的机器上clone服务器上的相应项目仓库进行相应的工作了。


四、创建项目仓库

1.在服务器创建项目仓库
使用git账户在服务器上创建一个目录(mytestproject.git)并初始化成git项目仓库。

root@ubuntu:/home/git$ su git
git@ubuntu:/home/git$ cd /home/gitrepository
git@ubuntu:/home/gitrepository$ mkdir mytestproject.git
git@ubuntu:/home/gitrepository$ cd mytestproject.git/
git@ubuntu:/home/gitrepository$ git init --bare
git@ubuntu:/home/gitrepository$ exit

2.在本地创建项目仓库
2.1管理员先在gitosis.conf中增加简要建立的仓库的写权限
[group testwrite] 
members = micheallee zhangsan
writable = mytestproject

2.2有写权限的成员将本地文件夹初始化,添加远程仓库,然后推送到服务器
在本地目录,右键  > Git Bash Here,输入
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler 
$ git init 
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$ git remote add origin git@serverIP:mytestproject.git

smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$git add .
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$git commit -m "set up a new repository"
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$git git push origin master


五、问题记录

1.问题:remote: error: insufficient permission for adding an object to repository database ./objects

原因:仓库本身没有写权限

解决办法:chown -R git:git  pushtest.git

2.问题:gitosis权限设置可以push但不生效
解决办法:用管理员的公钥来初始化gitosis


3.问题:服务器仓库看不到文件
分析:在服务器创建的裸仓库(--bare)是不存储文件,只存储历史和元信息


4.问题:Putty连接老是掉线
原因:不发送信息,sshl连接很快会断开
解决办法:客户端 >> Connection >> Seconds between keepalives (填60+);勾选 Enable TCP keepalives

使用过程有问题会继续更新

你可能感兴趣的:(git)