一步一步搭建git私有仓库服务器记录

来源:互联网 发布:人工智能对社会影响 编辑:程序博客网 时间:2024/05/16 16:19
参考链接:廖老师博客-搭建Git服务器 WXie的博客-git搭建



1、首先安装好linux系统,本文以Ubuntu为例进行解析

2、安装好系统打开终端
      1> sudo passwd重置root账户密码
          sudo + passwd + 账户名重置该账户密码
      2> sudo apt-get update 更新库到最新

3、sudo apt-get install git-core openssh-server openssh-client 
     安装git服务器所需的软件

4、安装gitosis(已停止更新建议使用gitoslite代替,可实现像svn一样的变态的权限控制)
     1> 由于gitosis以来Python的一些工具,需先确认Python已正常安装
     2> 安装setuptools,sudo apt-get install python-setuptools 
     3> 初始化git服务器用户信息
          git config --global user.name "暂时随便填,作用不大"
          git config --global user.email "随便填,作用暂时不大"
     4> 安装gitosis,用来管理用户密钥对(client传过来的公钥,方便权限管理)
               git clone https://github.com/res0nat0r/gitosis.git (先download源代码,github上面有两个,貌似都可以用)
               cd gitosis (进入目录)
               sudo python setup.py install (执行安装指令)

5、创建git管理用户
     sudo useradd -m git (创建git用户)
     sudo passwd git (更新git用户密码)

6、创建仓库存储
     --1、sudo mkdit /home/gitrepositories     (创建仓库存储位置)--(可选步骤)
     --2、sudo chown git:git /home/gitrepositories     (更改仓库权限只有git用户可访问(root也可)) -- (可选步骤)
     --3、sudo chmod 700 /home/gitrepositories     (更改仓库读写权限)
     --4、sudo ln -s /home/gitrepositories/ /home/git/repositories     (可选步骤,若1-2-3执行了,则4必须执行)   
     备注:gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在
/home/git/repositories/目录下

7、创建管理员密钥对
     1、若直接在服务器创建,则直接执行
          ssh-keygen -t rsa
     2、mac同Linux创建方式
     3、window在git-bash下创建方式同Linux,在openssh下创建则参照window创建rsa非对称密钥对<不过这种方式创建的密钥对,暂时好像存在问题,还没有弄清问题出在哪儿,应该是创建密钥对,没有正常添加到git密钥串中,导致git使用访问时出问题>)
     4、把创建的公钥放到服务器任意文件夹目录,一般/tmp或者登陆用户目录下,以便不同用户均能正常访问(保证用户均能正常访问)。
     5、使用公钥初始化管理员仓储(gitosis-admin.git)       
          1>sudo -H -u git gitosis-init < /tmp/id_rsa.pu    (一般创建方式,普通用户<非root或git用户>,如果在git用户下该中方式需要在/etc/sudoer文件(更改文件权限为可编辑(sudo chmod 700 ...))中添加git的root权限(复制root ALL..行,更改root为git用户,更改完sudoer权限,需要把该文件的权限重新设置为440))
          2>gitosis-init < /tmp/id_rsa.pub    (该种方式用于当前用户就是git用户,且git具有root权限,具有gitosis-init和git仓储存储的访问权限下,一般不用)
     6、初始化后的git管理权限配置仓储应该在/home/git/repositories/下
     7、配置post-update权限     (暂时没发现具体作用)
          sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

8、到生成管理密钥对的机器上创建gitadmin文件夹,名字随意。
     sudo mkdir gitadmin
     cd gitadmin

 9、clone管理仓储
          git clone git@ServerIP:/gitosis-admin.git  <测试在win下和mac下>   (此处正常情况下,直接就是服务器ip:/仓储,或者是ip:/home/git/repositories/仓储<备注:怀疑是Linux的权限造成的,上述两种方式,只要能正常clone不需要验证密码就是可以的,需要密码一般是由于相对路径存在问题或者找不到密钥造成的>,两种方式都可能产生ERROR:gitosis.serve.main:Repository read access denied fatal: Could not read from remote repository.也就是说产生该种错误并不都是由放在keydir/目录下公钥名称和gitosis.conf中配置不一造成的<当然名称不一也会产生上述类型的错误>)
          在同台Ubuntu服务器上进行clone仓储时,路径一般为git@ServerIP:/home/git/repositories/仓储。否则,容易产生fatal: '/repositories/5060.git' does not appear to be a git repository
fatal: Could not read from remote repository.错误。<具体原因还未弄懂,以后更新吧>

10、添加其他成员(client)的公钥
     1> 把client的公钥放到9中clone的gitosis-admin.git/keydir/目录下,名称随意(但是要和配置在gitosis.conf中的members名称一致),后缀为.pub。
     2> 然后配置该client的仓储访问权限。如: <注:多个成员写作同个仓储,则在members后面一次添加公钥名称,以空格隔开(不能多个group,同个仓储名)>,权限配置一般为一个仓储一个group。
          [group git-test]
          writable = 仓储(不带.git) <此处配的仓储一般为已经存在git服务器的仓储>
               /*readonly = 仓储*/
          memberes = 步骤1>中配置的pub名称,不带.pub。 成员1 成员2
     3> 提交配置修改
     git add gitosis.conf
     git add keydir/成员.pub
     git commit -m "message 日志"
     git push origin master
     4> 一般提交修改后,都要去服务器重启sshd服务
          sudo /etc/init.d/ssh restart  <或sudo /etc/init.d/sshd restart>

11、一般空仓库的创建都要在服务器产生或者由管理员在本地生成再push到服务器
     git init --bare sample.git     (一般与gitosis-admin.git同目录创建)

12、其他错误记录
     1> ERROR:gitosis.serve.main:Repository read access denied fatal: Could not read from remote repository 或一直需要输入密码

     git@ip:/home/git/repositories/gitosis-admin.git     (使用默认/homet/git/repositories/gitosis-admin.git时容易产生没有权限或者找不到证书git操作时需要一直输入密码问题吧),应使用正确:git@ip:/gitosis-admin.git。

          2> ERROR:gitosis.serve.main:Repository read access denied fatal: Could not read from remote repository
     可能是gitosis.conf中配的members名称和keydir/目录中添加的公钥名称不一致。如:members = 成员1 , 成员1.pub

     3> 

13、git的其他操作有待之后学习完善
0 0
原创粉丝点击