1. 概述Git是基于Linux内核开发的分布式版本控制/软件配置管理软件,与CVS、Subversion 等集中式版本控制软件不同,Git采用分布式管理,不需要服务器端软件即可运行。
Git速度很快,并且具有很出色的合并追踪能力。
很多有名的软件开发都使用Git来进行版本控制,其中有Linux内核、服务器和OLPC内核开发等。
作为开源软件的代表,Git不对版本库的浏览和修改作任何的权限限制,因此只能采用其他工具实现权限管理,如gitosis、gitolite、CodeBeamer MR。
原本Git的使用只限于Linux/Unix,由于Cygwin、msysgit、TortoiseGit等GUI工具的出现,在Windows平台的使用逐渐成熟。
2. Git安装2.1 安装Git安装Git作为客户端,运行客户端可通过Git Bash(Git的命令行)或Git GUI操作。
Windows下使用Git-1.7.8-preview20111206.exe,安装要点如下:上述图片所示选项,似乎也不确定,网上帖子安装教程各种选项都有。
安装完后,点击桌面Git Bash启动,执行命令pwd查看默认进入的文件目录,执行下面命令:mkdir .ssh (注意文件名前有.),即在默认目录下建立.ssh文件夹。
修改环境变量,桌面右击我的电脑,在属性中选择高级选项,左击环境变量,在系统变量中选择新建或编辑下面列出一些问题的解决方法:a. Git Bash中ls不能显示中文目录(可直接打开编辑):在git/etc/git-completion.bash中增加一行:alias ls='ls --show-control-chars --color=auto',注意引号为中文单引号,重启Git Bashb. Git commit不能提交中文注释:修改git/etc/inputrc中对应的行:set output-meta onset convert-meta offc. git log无法显示中文注释,在git/etc/profile中增加一行:export LESSCHARSET=iso8859安装完后,需要在Git Bash中注册本人信息:git config --global Your Namegit config --global user.email your@email.address在服务端,即Ubuntu,安装Git:sudo apt-get install git-core git-doc3. Gitolite安装3.1 安装Gitolite在下文中,在Windows操作系统中,通过虚拟机安装Ubuntu,安装Windows系统的机器叫虚拟机本机,Ubuntu是作为SSH或Git的服务端,客户机则是运行任何系统的其他电脑。
安装Gitolite可作为服务端使用。
在Windows下需要先装Cygwin,在Cygwin中安装Gitolite。
以下是在Ubuntu中安装Gitolite。
首先需要保证远端客户机能通过SSH登陆Ubuntu,SSH登陆方式有密码和密钥两种方式。
密钥是最安全的,下面介绍的是密钥登陆的设置。
Ubuntu自带安装了SSH服务,自带安装了SSH的客户端Openssh-client(在/etc/ssh/中存在ssh_config即是客户端配置文件),可是Ubuntu是作为SSH的服务端,因此需要手动安装Openssh-server,电脑需要联网。
上图中配置文件标记了的参数需要重点关注。
客户机连接Ubuntu,需要保证虚拟机和客户机在同一个网段。
可以在客户机ping虚拟机ip,直到ping通才能进行SSH连接。
设置方法如下:关闭虚拟机本机、虚拟机、客户机防火墙此时,在客户机通过命令:ssh git@192.168.0.45就可以远程登陆192.168.0.45的账户git了。
可以采用主机别名方式,主机别名是进行Gitolite操作的基础。
在客户机中,Git Bash 默认进入C:\Documents and Settings\Administrator目录,此目录存在.ssh文件夹。
主机别名的配置文件就存在.ssh文件夹中,名称为config。
此时,可以在客户机通过命令:ssh zhaoqi登陆192.168.0.45的账户git。
至此,安装Gitolite的环境搭建完毕。
在上图中,创建的两个目录~/gitolite/conf和~/gitolite/hooks应该是:/usr/share/gitolite/conf 和/usr/share/gitolite/hooks。
(不带/local的目录是经过验证过的,不过两种目录可能都对,只是可能会造成后面的步骤不同)。
在执行gl-system-install命令后,会出现如下界面,表明成功:上图提示需要将gitolite的安装目录/usr/local/bin加入环境变量,这一步很关键,图中提示说,gl-setup命令需要使用环境变量,而不能到~/gitolite/src中执行此命令。
因此,将/usr/local/bin加入环境变量后,在任何目录都可以执行gl-setup命令。
环境变量文件名可能是bashrc或/etc/profile。
总结下Gitolite安装步骤:a. sudo apt-get update更新包源;b. ps –e查看是否有sshd、ssh_agent。
否则安装openssh-server;c. 安装git-doc、git-core;d. 配置/etc/ssh/sshd_config文件;e. 创建git用户,下载gitolite源码包到/home/git目录;f. 修改虚拟机ip,关闭防火墙;g. 客户机管理员通过ssh协议scp管理员公钥到/tmp目录;h. 创建/usr/share/gitolite/conf和/usr/share/gitolite/hooks文件;i. 在/home/git/gitolite/src目录执行gl-system-install命令;j. 将gitolite的安装目录加入环境变量,安装目录即是gl-system-install的第一个参数;k. 执行gl-setup命令;l. 客户机管理员下载gitolite-admin仓库,如果成功,即安装成功。
4. 版本管理实施在下文中,管理仓库是指位于服务端的gitolite-admin.git,管理员是指所有客户端中挑选的一位,拥有修改管理仓库的权限,负责版本的权限管理。
管理员就是Gitolite安装过程中上传.pub文件的客户机。
管理仓库被管理员下载到本地后,会有conf和keydir两个文件夹,conf中的gitolite.conf文件即是用于配置权限,keydir中用于手机所有客户机的.pub文件(所有客户机必须生成一对密钥,私钥存于本地,公钥交给管理员,由管理员上传到服务端)。
所有客户机在使用Git Bash前,需在Git Bash中注册本人信息,或者在后面介绍的TortoiseGit中注册,注册方式见2.2节最后。
4.1 Git常用命令通过Git Bash对服务器仓库进行操作,主要有clone(下载到本地)、add(添加本地文件)、commit(将添加的文件制作成映像)、push(将映像上传到服务端)。
4.2 添加用户管理员从各用户处获得.pub文件,文件名为各用户的全拼。
将.pub文件存入gitolite-admin 的keydir目录下,然后将gitolite-admin提交push到服务器即可。
4.3仓库建立管理仓库的读写权限只能赋给管理员,其他客户机对其他仓库的权限设置在4.3节中介绍。
管理员通过命令:git clone git:gitolite-admin.git将管理仓库下载到Git Bash的当前目录,此处必须使用主机别名。
建立工程仓库有很多方法,下面介绍一种最简单的方法。
管理员在gitolite.conf配置权限时,就相当于建立了一个空仓库。
4.4 权限管理权限设置可参考4.2节所示图片。
5. 使用TortoiseGit替代Git BashTortoiseGit是Windows环境下替代Git Bash操作的图形化工具,将所有的命令行操作集成在右键菜单。
5.1 TortoiseGit安装TortoiseGit的安装文件是TortoiseGit-1.8.1.0-32bit.msi,在安装之前,可能需要安装如下升级程序WindowsXP-KB942288-v3-x86.exe。
否则可能出现错误:此时需要下载更新,百度搜“Windows Service Pack”(也可能是“Windows Installer”),下载到WindowsXP-KB942288-v3-x86.exe,点安装即可。
关键的安装选项如下:上述选项也可以在软件运行是通过设置改变。
设置Git的执行路径:右键->TortoiseGit->Setting->General->MsysGit。
否则进行push、pull操作时会出现:git did not exit cleanly, exit code 1。
造成操作不成功)注册用户信息:右键->TortoiseGit->Setting->Git->User Info。
Git Bash中使用的公钥,其后缀是.pub,在TortoiseGit中使用的公钥后缀是.ppk。
得到.ppk 格式的公钥,需要使用putty(putty包含很多软件,如puttygen、putty)。
打开puttygen,在load按钮弹出的对话框中选择.pub公钥对应的私钥文件,然后选择保存公钥文件,其后缀是.ppk。
5.2 TortoiseGit基本操作在TortoiseGit中,对版本库的操作,分别是pull(下载)、push(上传)、commit(相当于Git Bash中的add+commit),其余操作还有diff、merge等。
如何将服务端的仓库pull到本地文件夹?方法如下:在保存仓库的文件夹下,右键->Git Clone,弹出如下对话框:在URL框填入:git:testing.git,其中git是服务器的账户,testing.git是需要pull的仓库。
同样使用了主机别名(因此下面介绍的公钥.ppk的加载,.ppk文件必须和config位于同一文件夹中)。
第一次进行clone操作时需要加载putty key,选择.ppk文件的目录。
对仓库的push,需要先执行commit操作,方法是在仓库文件下右键->Git commit,一定要填入message信息。