准备:
三台电脑A(192.168.1.1),B(192.168.1.2),C(192.168.1.3),其中A作服务器,B作为服务器管理员,C就作为客户端。
实际操作中注意替换ip等相关信息
搭建Git服务器
1.安装相关工具
sudo apt-get install git-core openssh-server openssh-client
初次使用git,记得配置用户信息
$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]
git config –global user.name
2.下载安装gitosis
mkdir ~/gitosis_setup
cd ~/ gitosis_setup
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis
sudo python setup.py install
注意:如果python setup.py install失败,需要安装python-setuptools.py
sudo apt-get install python-setuptools
3.为gitosis创建系统用户
sudo adduser --system --shell /bin/sh --gecos 'git SCM user' --group --disabled-password --home /home/git git
这种方法是网上比较常见的方法,创建的是一个禁用密码的git用户,但在使用su命令切换git用户的时候,空密码老是
验证失败,建议大家可以使用下面的方法来创建git用户:
sudo useradd -m git
sudo password git
之前设置无密码时,clone时总要我输密码。
4.SSH服务设置
修改ssh服务端配置文件 /etc/ssh/sshd_config
Port 22 # 修改成你想要的登陆端口,如2222
PermitRootLogin no # 禁止root用户登陆
StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁止密码认证,默认是打开的
ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特
PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录
修改完成后,重启ssh服务:
sudo /etc/init.d/ssh restart
5.运行gitosis
(1)将管理员生成的公钥(即B)上传或拷贝到服务器(即A)上。这里的公钥需要在git服务器管理员(B)下使用ssh-keygen -t rsa命令来创建,这里使用的是直接U盘拷贝的方法,想用scp命令的自行百度。
(2)初始化gitosis
进入到拷贝过来的id_rsa.pub所在目录:cd /tmp
sudo chmod 777 id_rsa.pub
sudo -H -u git gitosis-init < id_rsa.pub
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
至此,gitosis的安装工作已完成,其相关配置可以由管理员(B)来操作,然后再提交到服务器上。
B:
1.执行命令ssh-keygen -t rsa,一路回车,最后在~/.ssh目录下生成该用户的秘钥和公钥,需要拷贝的是公钥id_rsa.pub,用于提供给服务器端初始化gitosis.
2.从服务器 克隆gitosis-admin.git
新建一个目录mkdir test 作为管理目录
git clone [email protected]:gitosis-admin.git
正常情况下是可以直接clone下来的,实在不行加上绝对路径即git clone [email protected]:/home/git/repositories/gitosis-admin.git
3.编辑 gitosis.conf(配置gitosis信息)
cd gitosis-admin
你将看到以下文件gitosis.conf和keydir/,gitosis.conf是gitosis的配置文件,用于配置用户和权限,keydir/是所有组成员的
公钥。
vi gitosis.conf, 打开gitosis.conf文件,内容为:
[group gitosis-admin]
writable = gitosis-admin
members = asus-wh@asus ##这里的asus-wh@asusr就相当于B的名片,与B的id_rsa.pub中的内容一致,红框中内容
这个是[group gitosis-admin]管理组的权限,members中的用户名就是刚才上传的公钥里面的用户名。
把内容修改为:
[group gitosis-admin]
writable = gitosis-admin
members = asus-wh@asus
[group apps ]
writable = apps
members = asus-wh@asus c-user
这里的c-user其实就是电脑C的名片,同样也需要C的公钥。
这里定义了一个叫apps 的组,这个apps与后来建立的仓库名对应,授予asus-wh@asus和 c-user两个用户写“apps ”这个repo的权限
然后push到服务端后,服务器端就立刻生效。
git commit -a -m "created a new repository"
git push
这样就 更新了服务端的权限。
4.在test目录下创建一个apps的repo
mkdir apps
cd apps
git init
5.加点东西测试
echo "hello" >1.txt (在apps目录下下创建一个内容为hello的1.txt文件)
6. 提交代码
git remote add origin [email protected]:apps.git
git add .
git commit -am "imitial import"
git push origin master:refs/heads/master
7.增加成员的公钥到系统中
这里就是把C(192.168.1.3)的公钥加进来拷贝到gitosis-admin/keydir目录下
会发现这里面已经有一个公钥了,就是B的公钥,C生成的公钥是id_rsa.pub,避免重复,建议将其重名为
c-user.pub,这个‘c-user’与之前的它的公钥最后那部分内容相同,跟之前的B的“asus-wh@asus”类似。
cd gitosis-admin
git add keydir/c-user.pub
修改gitosis.conf,并提交
[group apps ]
writable = apps
members = asus-wh@asus c-user ##这个c-user与前面c的公钥命名要相同
git commit -a -m "Granted new members commit rights to apps"
git push
8.其它成员获取apps的代码
git clone [email protected]:apps.git
只需要ssh-keygen -t rsa 即可,做测试用。
随便创建一个目录,进入
执行git clone [email protected]:apps.git测试(若提示需要密码输入之前设置git用户的密码即可,这里是git)
截止目前git的这部分算是弄完了
sudo su git
cd repositories
git init --bare manifest.git
sudo apt-get install git-daemon-sysvinit
配置文件
这个地方前面遇到了一些问题,,然后我又一步步的分析/etc/init.d/git-daemon脚本文件,最后才找到配置的方法.
配置文件在/etc/default/git-daemon
打开编辑
sudo vi /etc/default/git-daemon
我的配置文件内容如下(后面会具体参数的意义)
我使用的作为git仓库的目录为/home/git/repositories….你们就改成自己相同的就行了.
# Defaults for git-daemon initscript
# sourced by /etc/init.d/git-daemon
# installed at /etc/default/git-daemon by the maintainer scripts
#
# This is a POSIX shell fragment
#
GIT_DAEMON_ENABLE=true
GIT_DAEMON_USER=git
GIT_DAEMON_DIRECTORY=/home/git/repositories
# Additional options that are passed to the Daemon.
GIT_DAEMON_OPTIONS="--export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --informative-errors"
GIT_DAEMON_BASE_PATH=/home/git/repositories
可以参考这篇文章搭建
http://blog.csdn.net/fdl19881/article/details/8679469
其中
GIT_DAEMON_ENABLE=true很明显得设置成true值了
GIT_DAEMON_USER=git 这个就看你想用哪个用户运行git-daemon.一般为了安全都得设置别的用户...
注意!!设置的这个用户一定得对GIT_DAEMON_BASE_PATH有读,写,执行的所有权限!! 可以用ls -ld git仓库目录,查看为drwx
如果你的git仓库放在自己的个人目录下即/home/use_name下面的话,那设置成你的用户名准没错.
GIT_DAEMON_DIRECTORY=”/var/cache/git /home/git/repositories” 这个是设置成目录白名单whitelist!! 如果不设置的话用户在git操作时如git clone,git push等等会出现no such directory. 而在服务器机器上/var/log/syslog中会看到’/home/git/repositories/xxx.git’: not in whitelist
GIT_DAEMON_OPTIONS 就是设置参数了.如果想上传,且全部导出.就设置–export-all –enable=upload-pack –enable=upload-archive –enable=receive-pack
注意!如果出现找不到的话,就在/home/git/repositories目录下面的项目仓库目录下touch git-daemon-export-ok..生成一个这个名字的文件即可.
如果想使用git push功能,那一定要打开–enable=receive-pack
最后一个
GIT_DAEMON_BASE_PATH 即设置根目录.比如像我的这个设置.
那么你在用git clone git://your ip or name/test.git时,git服务器就会查换/home/git/repositories/test.git目录了.
以上设置好了只后,,那么每次开机就会自己启动了.
还可以使用sudo service git-daemon start|restart|stop控制. sudo /etc/init.d/git-daemon start|restart|stop也可以了.
配置完启动下吧
sudo /etc/init.d/git-daemon start
cd ~
mkdir test
cd test
git clone git@192.168.1.1:manifest.git
###clone这一步能成当然是很好,不成的话试试这个git clone git://192.168.1.1/manifest.git
###我当时也是按着教程来的,但就是clone不下来,但是后面那个可以成功。
cd manifest
新建一个default.xml,内容如下
git add --all
git commit -a -m "add default.xml"
git push --all
cd ../
git clone [email protected]:apps.git
你可以修改一下apps里面的内容
比如
echo "Hello Project1" > Hello.txt
git add --all
git commit -a -m "add Hello.txt"
git push --all
最后在test目录下会有这两个文件夹,apps就相当于项目代码
到这基本就完成了搭建
最后去客户机C(192.168.1.3)测试下
C:
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
修改repo文件内容中的 export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
这一切都是为了让你能够舒适的使用repo
开始刺激的测试:
创建一个测试目录
mkdir test
cd test
repo init -u git://192.168.1.117/manifest.git
repo sync
只需要这两行就会把我们的之前的项目apps同步到test目录下。
OVER!
参考:
https://blog.csdn.net/lb5761311/article/details/47723455
https://blog.csdn.net/seker_xinjian/article/details/6232475
https://blog.csdn.net/fdl19881/article/details/8679469