注意:
使用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:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
使用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:彻底回退到某个版本,本地的源码也会变为上一个版本的内容