Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141092
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 501
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-24 15:28
文章分类

全部博文(43)

文章存档

2015年(18)

2014年(25)

我的朋友

分类: LINUX

2014-11-26 09:18:45

Svn是目前得到大多数人认可,使用得最多的版本控制管理工具,而Git的优势在于易于本地增加分支和分布式的特性,可离线提交,解决了异地团队协同开发等svn不能解决的问题。

相关参考:http://www.cnblogs.com/ahauzyy/archive/2013/04/08/3043384.html 或者 http://blog.sina.com.cn/s/blog_904dee7f0101gait.html
(可以windows上安装git,作为客户端(桌面右键git bash);  Linux上安装git作为服务器)



1.在服务器上安装git及做些操作:

安装包  sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel


同时下载git-1.8.2.2.tar.gz文件,然后将其`mv` 到`/usr/local/src`目录


2.编译安装git
cd /usr/local/src
sudo tar -zvxf git-1.8.2.2.tar.gz
cd git-1.8.2.2


sudo make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install


- 增加软连接

sudo ln -s /usr/local/git/bin/* /usr/bin/

git --version  #如果能显示版本号,即表示成功


3.在服务器安装gitosis

sudo yum install python python-setuptools

cd /usr/local/src

git clone git://github.com/res0nat0r/gitosis.git

cd gitosis

python setup.py install  

#显示Finished processing dependencies for gitosis==0.2即表示成功





4.在开发机上,生产密钥并上传到服务器上

ssh-keygen -t rsa   #一路回车,不需要设置密码

#上传公钥到服务器(默认SSH端口22)
scp ~/.ssh/id_rsa.pub tailin@192.168.100.202:/tmp


或编辑`/etc/hosts`文件,在`/etc/hosts`文件里添加如下文本:

# local git server
192.168.100.202 zgit



5.服务器上生成git用户,使用git用户并初始化`gitosis`


# 创建git版本管理用户 git
sudo useradd -c 'git version manage' -m -d /home/git -s bin/bash  git


# 更改git用户的密码
sudo passwd git


# su 到git用户
su - git
gitosis-init < /tmp/id_rsa.pub


#显示以下信息即表示成功
#Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
#Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/


#删除密钥
rm -rf /tmp/id_rsa.pub



6.在个人开发机上导出项目管理 (在创建的目录下建立gitosis-admin管理平台)


mkdir -p /repo             #/repo是自定义创建的目录,用来存放gitosis-admin平台
cd /repo
git clone git@zgit:gitosis-admin.git         #执行此步后,会在/repo下生成gitosis-admin目录,里面有gitosis.conf(主配置文件)
                                              还有keydir目录(存放已经上传的开发机生成的公密)


7.在个人开发机增加及设置管理项目


cd /repo/gitosis-admin

vi gitosis.conf

#在文件尾增加以下内容

[group test-git]            # 具有写权限的组名称
writable = test-git         # 该组可写的项目名称
members = ltl@jackliu-ThinkPad  guangyun.ni@yeepay.com     #该组的成员(密钥用户名) 多个用户协同开发时,以空格分隔


# 如果要增加只读的组 参考如下
# [group test-git-readnoly]          # 具有都权限的组名称
# readonly = test-git                # 该组只读的项目名称
# members = ltl@jackliu-ThinkPad     # 该组的成员



#提交修改
git add .
git commit -a -m "add test-git repo"                      #此步可能会提示run 关于git的一个全局配置,要求输入用户名或者邮箱(作者的一些信息),随便输入一个即可
git push


8.在个人开发机上初始,增加及使用项目test-git



cd ~/repo  (注意路径问题,也就是刚才gitosis-admin的上一级路径)

mkdir test-git   

cd test-git  

git init  

touch readme  

git add .   

git commit -a -m "init test-git"  

git remote add origin git@zgit:test-git.git  

git push origin master  


也可以把上面的两步合成一步:


git remote add origin git@zgit:test-git.git  

git push origin master  


写成:$ git push git@zgit:test-git.git master



说明:如果在执行 git push origin master 的时候,提示以下错误: error: src refspec master does not match any. error: failed to push some refs to 'git@192.168.0.77:pro2.git' 这是由于项目为空的原因,我们在项目目录里新创建一个文件。经过->add -> commit -> push 就可以解决了

$ touch a.txt
$ git add a.txt
$ git commit -a -m "add a.txt"
$ git push


-------由于安全性,提交到服务器上的东西,在服务器上是看不到的,只能在下载到客户端上才能查看
-------查看被提交到服务器上的文件时。可以在/repo下建议一个文件夹如test,然后执行git clone git@192.168.0.3:llf.gt (相当于从服务器上把这个llf版本下载下来),
       之后就可以test文件夹里生成一个llf项目,继续查看就可以看到里面的所以文件源代码。




常见问题
首先确定 /home/git/repositories/gitosis-admin.git/hooks/post-update 为可执行即属性为 755


1. git操作需要输入密码

原因
    :公密未找到
解决
    上传id_rsa.pub到keydir并改为'gitosis帐号.pub'形式,如miao.pub。扩展名.pub不可省略


2. ERROR:gitosis.serve.main:Repository read access denied

原因
    :gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
解决
    使keydir的名称与gitosis中members所指的名称一致。 改为members = foo 或 公密名称改为foo@bar.pub





git常用命令:(远程仓库相关命令)



检出仓库:        $ git clone git://github.com/jquery/jquery.git

查看远程仓库:$ git remote -v

添加远程仓库:$ git remote add [name] [url]

删除远程仓库:$ git remote rm [name]

修改远程仓库:$ git remote set-url --push [name] [newUrl]

拉取远程仓库:$ git pull [remoteName] [localBranchName]

推送远程仓库:$ git push [remoteName] [localBranchName]

*如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:

$git push origin test:master         // 提交本地test分支作为远程的master分支
$git push origin test:test              // 提交本地test分支作为远程的test分支






配置sshd-config:(可能需要的配置)
 
vi /etc/ssh/sshd-config
 
PermitRootLogin no
 

把下面三行的注释去掉:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
 
PermitEmptyPasswords no
PasswordAuthentication no
 
service sshd restart







阅读(1178) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~