作者:empty 出版社:empty |
1. 概述
Git是基于Linux内核开发的分布式版本控制/软件配置管理软件,与CVS、Subversion等集中式版本控制软件不同,Git采用分布式管理,不需要服务器端软件即可运行。Git速度很快,并且具有很出色的合并追踪能力。很多有名的软件开发都使用Git来进行版本控制,其中有Linux内核、X.Org服务器和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 Bash
b. Git commit不能提交中文注释:修改git/etc/inputrc中对应的行:
set output-meta on
set convert-meta off
c. git log无法显示中文注释,在git/etc/profile中增加一行:export LESSCHARSET=iso8859
安装完后,需要在Git Bash中注册本人信息:
git config --global user.name Your Name
git config --global user.email your@email.address
在服务端,即Ubuntu,安装Git:
sudo apt-get install git-core git-doc
3. 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 Bash
TortoiseGit是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。
设置SSH的执行路径:右键->TortoiseGit->Setting->Network->SSH。(这一步很关键,否则进行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信息。Push操作就很简单了。
查看文件修改记录,
修改了的文件会在Changed Files对话框中列出,双击某一行,则会弹出对话框显示此文件的修改记录。
假如不希望某文件或文件被更新到版本库,可以在文件或文件夹上右键->Git add to ignore list,此时会产生.gitignore文件,同样需要将此文件加入忽略列表。
5.3 项目分支
Git最为称道的是其强大的项目分支管理功能。在创建项目仓库时,自动创建了一个分支,即master,项目分支的含义就是,将主支master拷贝n份,这n份即是分支。此时,n份分支可以交给不同的开发者使用,这些不同的开发者可以对自己的分支进行push、pull等操作,而这些操作不会影响到master分支。当开发者觉得自己代码功能完备时,可以将自己的分支合并到master,此时master得到更新。
在仓库文件夹中,右键->TortoiseGit->Create Branch即可弹出上述对话框,勾选Switch to new branch,OK后即进入branch1分支,此时push操作即可对push对象进行选择:master或者branch1。
合并分支,首先通过右键->TortoiseGit->Switch/CheckOut进入master分支,再选择右键->TortoiseGit->merge,在From框中选择需要合并的分支,此处为branch1,即将branch1合并到master。更新服务端的master还需要对master进行push,此时右键->TortoiseGit->push才算最终合并branch1到master。
如上是在TortoiseGit中对分支的操作,Git Bash同样有分支操作的命令。
常见错误
1. TortoiseGit中Remote配置不成功,错误截图:
解决方法:TortoiseGit->Settings->Network->SSH
Pull成功的截图如下:
2. 安装TortoiseGit时出现如下错误
解决方法:需要安装如下升级程序WindowsXP-KB942288-v3-x86.exe。百度搜“Windows Service Pack”(也可能是“Windows Installer”),下载到WindowsXP-KB942288-v3-x86.exe,点安装即可。
empty
empty