以下是自己根据查阅到的资料整理记录,
1、git是分布式的,但是并不是说没有中心服务器的概念,只不过任何一台clone了代码的电脑都可以成为中心服务器。譬如A、B都从C服务器clone了一份git代码,C坏了,A、B都可以恢复成为中心服务器。
2、git的分层
用惯了svn的人脑海里只有本地workspace和远程库两层概念,本地workspace开发完了就往远程库commit。简单粗暴。
对于git,则要加入一层,本地库。本地workspace往本地库commit,本地库再push到远程库。(你可以这样想,本地库是远程库的完整拷贝,所以才可以分布式,才可以离线提交)
我画的一张草图^_^(去年第一次用git时整的)
中心库目录
本地库是中心库的完整拷贝(所谓clone,clone的就是.git目录)
3、安装git,
对于ubuntu,
mac,mac os预安装了gitapt-get install 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项目
这样一个本地的git库就初始化好了,详细的svn转git的资料,请参考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
下面就是把本地库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用户手册