Ubuntn搭建Git +Repo代码管理服务器

准备:

三台电脑A(192.168.1.1),B(192.168.1.2),C(192.168.1.3),其中A作服务器,B作为服务器管理员,C就作为客户端。

实际操作中注意替换ip等相关信息

搭建Git服务器

A:(参考https://blog.csdn.net/wirror800/article/details/5189564

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

C:

只需要ssh-keygen -t rsa 即可,做测试用。

随便创建一个目录,进入

执行git clone [email protected]:apps.git测试(若提示需要密码输入之前设置git用户的密码即可,这里是git)


截止目前git的这部分算是弄完了


下面搭建repo 管理 服务器

A:

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

B:

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,内容如下

<manifest>

<remote name="test" fetch="git://192.168.1.1/"/>

<default revision="master" remote="test" sync-j="4"/>

<project path="apps" name="apps"/>

</manifest>

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:

安装 Repo

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


猜你喜欢

转载自blog.csdn.net/qq_28449863/article/details/79992191