git初探
sshong 发表于2014年6月25日 18:36:05 更新于2014年6月25日 18:47:00
一直想把存在自己本机的svn库放到外网服务器上,这样可以多台电脑check代码,考虑到svn中心库需要经常备份,防止损坏,决定改用分布式的git,不用担心中心库挂掉,也就放心许多。

以下是自己根据查阅到的资料整理记录,
1、git是分布式的,但是并不是说没有中心服务器的概念,只不过任何一台clone了代码的电脑都可以成为中心服务器。譬如A、B都从C服务器clone了一份git代码,C坏了,A、B都可以恢复成为中心服务器。

2、git的分层
用惯了svn的人脑海里只有本地workspace和远程库两层概念,本地workspace开发完了就往远程库commit。简单粗暴。
对于git,则要加入一层,本地库。本地workspace往本地库commit,本地库再push到远程库。(你可以这样想,本地库是远程库的完整拷贝,所以才可以分布式,才可以离线提交)
我画的一张草图^_^(去年第一次用git时整的)
git
中心库目录
git2
本地库是中心库的完整拷贝(所谓clone,clone的就是.git目录)
git3


3、安装git,
对于ubuntu,
apt-get install git
mac,mac os预安装了git
windows,安装msysgit

4、初始化一个中心库
root登录到服务器,
#cd到你准备存放库的目录
git init --bare myproject.git
#这就会新建一个目录叫myproject.git,并且初始化了一个git库
#bare的意思就是不需要workspace,只要.git中的git信息内容

5、决定中心库git的访问方式
就是别人怎么check中心库的代码,方式很多,有ssh、git、http等方式,
可以参考服务器上的git
这里简单说下ssh方式。说白了就是用ssh(用过putty吧,输入用户名密码就登陆到远程机器了)登陆某个特定账户,
譬如新建一个账号git,ssh登陆该账号访问git中心库所在的目录。
5.1 创建git用户
adduser git
#将创建的中心库改为git用户所有
chown -R git:git myproject.git
#禁止用putty等用git账号登陆
vim /etc/passwd
#将git:x:1001:1001:,,,:/home/git:/bin/bash改为
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

5.2 ssh登陆的两种方式,
一种是用户名密码,总不能告诉所有要check代码的人git账户的密码吧,略搓。
一种就是用授权key,让要check代码的人生成一个RSA密钥,将公钥传到中心服务器的authorized_keys中。
具体这些网上有很多说明,请参考:
服务器上的 Git - 生成 SSH 公钥

关于ssh登陆,请参考ssh原理

到了这里,别人就可以通过如:
ssh://git@xxx.net:222/mygitposition/myproject.git
的路径clone到代码了

6、进阶管理git的访问
人肉往authorized_keys加key的方式对于大一点的团队是个噩梦,这就要借助其他开源项目:
Gitosis、Gitolite(推荐,因为前者已经很久不更新了),用他们来帮助你管理ssh公钥。

7、初始化本地库
对于本地库,用惯svn的人都想用乌龟,好像git也有人搞了个乌龟,这里不介绍,介绍两种方式
一种用eclipse的插件egit(图形化操作哦,不比乌龟差)。
一种用命令行(略潮)。

7.1 clone远程库
如果远程库已经有详细的工程内容,可以直接clone下来玩。
对于egit,直接import projects from git,填入中心库的项目访问地址,如
ssh://git@xxx.net:222/mygitposition/myproject.git
对于命令行
#cd到你的workspace目录
git clone ssh://git@xxx.net:222/mygitposition/myproject.git
#工程会clone到myproject目录中

7.2 用本地库充实中心库
说白了也就是初次提交拉,你可以在本地建一个git库,从svn项目转换代码,或者人工加入一些初始文件,提交到本地git库,再统一push到远程中心库。

7.2.1 对于svn项目转换为git项目
#author.txt是将svn的账号转化为git账号
#内容如:ather = Ather Shu <shushenghong@gmail.com>
git svn clone http://localhost/svn/repository/myproject --authors-file=author.txt --no-metadata
cd myproject
#将svn ignore转化为git ignore
#可以导出到exclude
git svn show-ignore > .git/info/exclude
#或者生成.gitignore文件
git svn create-ignore
这样一个本地的git库就初始化好了,详细的svn转git的资料,请参考svn转git
下面就是把本地库push到远程中心库了
git remote add origin ssh://git@xxx.net:222/mygitposition/myproject.git
git push origin master --tags

7.2.2 用egit提交
在eclipse工程里新建文件或者做修改,然后commit(这只是commit到了本地库),再push即可。
egit使用起来比较简单,这里不多介绍,详细可以参考egit用户手册

参考资料汇总:
服务器上的git
搭建Git服务器
服务器上的 Git - 生成 SSH 公钥
ssh原理
Gitolite
svn转git
egit用户手册
标签:git分类:Webserver阅读:2151
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅