1、问题提出:
如果是个人开发的情况下,本不需要git server,但是由于项目开发一般涉及到多人,为了权限管理的方便、配置、协同等等, 那么就需要搭建git server。
2、解决问题思路:
采用ssh搭建server是首选,目前采用ssh搭建git server主要有三种方法:
1)linux下建立新帐号(git), 由 git 帐号来统一管理(commit / push) 等。
——这种方法操作简单,权限管理上也相对简单,适合少数几个人的协同开发。
2) 使用 gitosis 來管理(gitosis 可以设定到"谁" 可以存取此仓库reposity).
——操作复杂,功能强大,权限管理较为丰富,适合数据较多人的协同开发。
3)使用gitolite 來管理(gitolite 不仅可以设定 "誰" 可以存取 此仓库reposity ,而且,可以设定只能存取 该仓库下的哪个 branch 等路径)。
————操作复杂,功能强大,权限管理较gitosis更丰富,也是适合数据较多人的协同开发。(目前最新最主流的方式)
本文主要是采用第一种方法(linux下建立新帐号(git),由 git 帐号来统一管理(commit / push) 等 )来搭建git server。
3、实例:
1)准备工作:
系统必须安装git套件:
apt-getinstall git-core
客户端工作:
新建一个linux账户zhangmin,并生成ssh的公钥和私钥:
ssh-keygen-t rsa # 产生 id_rsa, id_rsa.pub
2)服务器电脑上git server设置如下:
创建git账户,并产生ssh的公钥和私钥
adduser -m git
passwd git
将git的sh改成bash (/etc/passwd)
git用户下执行ssh-keygen -t rsa
cd /home/git/zhangmin
将第一步中客户端生成的id_rsa.pub 文件内容拷贝到服务器的/home/git/.ssh/authorized_keys文件下。
scp zhangmin@xx.xx.xx.xx:/home/zhangmin/.ssh/id_rsa.pub /home/git/zhangmin
cat id_rsa.pub>> ~/.ssh/authorized_keys
这样客户端A就被授予了ssh的git server访问权限。
3) 建立git reposity
mkdir gittest
cd gittest
git init --bared --shared
4)在客户端A上push文件到刚才建立的reposity中
git clone git@xx.xx.xx.xx:/home/git/zhangmin/gittest
cd gittest
touch test.txt
git add .
git commit -m 'this is first time __git' 执行这句会提示报错,大致是要设置用户名和邮箱
因此再执行:git config --global user.name "git.zhangmin"
git config --global user.email "zhang.min@XXX.com"
再次重复执行commit操作,这次ok了。
git push origin master //提交到服务器端的reposity
上面的操作也可以采用如下命令替代:
git init //将当前目录设置成git 的 working directory
touch test.txt
git add .
git commit -m 'this is first time __git'
git remote add origin git@xx.xx.xx.xx:/home/git/zhangmin/gittest
gitpush origin master
5)用另一台客户机B测试git协同工作
创建一个账户jack
adduser-m jack
passwdjack
ssh-keygen-t rsa
将生成的id_rsa.pub文件内容附加到服务器端的/home/git/.ssh/authorized_keys
(请参照上面的操作)
接下来
cd /home/jack
git clone git@xx.xx.xx.xx:/home/git/zhangmin/gittest
cd gittest
ls -l
可以看到有客户端用户新增的test.txt文件
vim test.txt //修改txt文件
git add .
git commit -m 'this is first time __git' 执行这句同样会提示报错,要设置用户名和邮箱
因此再执行:git config --global user.name "zhangmin"
git config --global user.email "zhang.min@XXX.com"
重复执行commit操作,成功。
git push origin master //推送到服务器
然后在第一台客户端A上:
git pull origin master
看到有更新,vim打开test.txt文件可以看到有内容了,这是客户端B所做的修改。
4、git init --bared --shared 命令和git init的区别
加了--bared参数表面该reposity不是一个working tree,例如不能在该目录下执行git pull操作,会有如下提示:
fatal: /usr/local/libexec/git-core/git-pull cannot be used without a workingtree.
该问题不是错误,不需要解决。
5、避免客户端通过git账户登录服务器的问题
例如,默认情况下在客户端输入: ssh git@xx.xx.xx.xx 直接可以登录到服务器。存在安全隐患,为解决这个问题,
在服务器的机器上,
vim /etc/passwd # 修改 /bin/sh => /usr/bin/git-shell, git-shell 只能做 git 操作, 无法 Login.
6、获取配置信息:git config --list
gitolite构建服务器的方式请参考:
http://www.ossxp.com/doc/git/gitolite.html
版权声明:本文为博主原创文章,未经博主允许不得转载。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com