git 服务器搭建和管理

来源:互联网 发布:centos 伪静态 编辑:程序博客网 时间:2024/05/21 17:26
注意:
使用ssh协议的时候,库的路径可以是绝对路径
使用git协议的时候,必须搭建Gitosis管理,且库的路径是相对于/home/git/repositories库的家目录的
/home/git/repositories 可以是其他目录的软链接


1. 安装git
# apt-get install git
# sudo addusr git
# mkdir /home/git/.ssh
# chown git:git /home/git/.ssh


# chown -R git:git /opt/git/
# chown -R git:git /home/git/*


# su git           //切换到git初始化,后面都是以git用户登录操作的
# ssh-keygen
# touch /home/git/.ssh/authorized_keys
将允许用户的公钥配置到.ssh目录下的authorized_keys文件     --- 这样就能使用ssh协议获取和提交代码了


2.  git 权限管理配置Gitosis  --即git协议环境的搭建

a.  安装Gitosis
# apt-get install python-setuptools
# git clone git://eagain.net/gitosis.git
或者: git clone https://github.com/res0nat0r/gitosis.git
# cd gitosis
# sudo python setup.py install


# mv /home/git/.ssh/authorized_keys /home/git/.ssh/authorized_keys.bak  -- 必须做,因为gitosis会有自己的authorized_keys,当存在这个文件的时候,这个文件会生效,导致gitosis 配置的git协议不生效,只能使用ssh协议加绝对路径访问
    # ssh-copy-id -i ~/.ssh/id_rsa.pub  git@server_ip   这个操作会自动生成authorized_keys,千万别操作


b. 配置权限管理仓库    
Gitosis 默认的仓库家目录默认在/home/git/repositories,如果需要更默认仓库的家目录路径,只要给他们直接建立软链接即可.(假设我们的库家目录指统一定在/opt/git)
# ln -s /opt/git /home/git/repositories


c. 导入具有配置权限管理仓库的管理员的公钥  (只有被导入公钥的用户,才能操作权限管理仓库,其他用户的公钥只要放在权限管理仓库的kerdir下即可)
# sudo -H -u git gitosis-init < /home/git/.ssh/id_dsa.pub
// # sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update


d. 启动sshd服务
# sudo apt-get install openssh-server
# /etc/init.d/ssh start
# netstat -tnlp |grep ssh


e. 添加git用户
# git clone git@gitserver:gitosis-admin.git
copy 用户的公钥到keydir下面,并在gitosis.conf添加用户权限数组等信息
# git push


3. 添加工程仓库
a. 不存在基础项目时:       
# cd /opt/git
# mkdir  project.git
# cd project.git
# git init --bare






b. 在已有项目上创建仓库
# git clone --bare my_project my_project.git
# scp -r my_project.git user@git.example.com:/opt/git


c. 添加项目到gitosis
#vim 
-------
[gitosis]
loglevel=DEBUG                        --- 调试级别,可以看~/.gitosis日志


[group write]
writable = ics mboot
members = scott josie jessica


[group read]
readonly = ics mboot
members = john
-------


d. 为仓库添加新分支:   -- 直接clone下来再添加分支,再提交,这样会出现问题,因为库里面没有分支供合并你提交的内容
    在客户端:
# mkdir  project
# cd project
# git init 
# touch readme            --  需要创建一些源文件提交,要不会报下面的错误
error: src refspec master does not match any.
error: failed to push some refs to 'git@192.168.15.121:tv608/ics.git'
# git add .
# git remote add origin git@gitserver_ir:project.git    --- origin 为给远程起的别名
# git push origin master                          -- 把当前分支推送为仓库master分支




e. 开启远程git协议访问控制 // 其实git clone git@gitserver_ir:project.git 这样的格式是使用ssh登录git服务器,是在ssh通道上面执行git协议的

# sudo apt-get install git-daemon-run
安装后会创建下面两个用户
# cat /etc/passwd | grep git
gitlog:x:117:65534::/nonexistent:/bin/false
gitdaemon:x:118:65534::/nonexistent:/bin/false

# dpkg -L git-daemon-run    -- 查看安装包安装了哪些文件

# vim /etc/sv/git-daemon/run 
修改--export-all  --base-path=/opt/git    为你git 的仓库根目录,并添加--export-all参数
加入 --export-all 后,在git仓库中就不必创建git-daemon-export-ok文件。


--enable=receive-pack   加入这个参数后,客户可以提交代码更新,默认是不允许的


# sudo sv stop git-daemon
# sudo sv start git-daemon
或者:
#sudo runsv git-daemon


# git clone git://serverip/project
or
# git clone git://serverip/project.git


4. git 操作
添加远程仓库,命名为origin或者 aaa
# git remote add origin git@gitserver:project.git
向远程仓库origin的master分支提交更新
# git push origin master
回滚操作
# git reset 
git reset --soft/mixed/hard commit_id         取消commit
      git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一 级。如果还要提交,直接commit即可。
     git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到 某个版本,只保留源码,回退commit和index信息
     git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容


 
 
原创粉丝点击