Git安装和配置

在使用Git进行项目版本管理过程中遇到的问题和解决方法,记录如下。

关于Git与SVN的比较可以看这篇文章。作为分布式代码管理系统,我最看重Git对多种支工作流模式的支持,例如最常使用的Branch工作流

一、服务器端(Linux)

安装和初始化

这里以CentOS为例。Git工具本身既是客户端也是服务端,所以在服务器端也是下载同一套工具:

> yum install git

创建git用户并设置密码,后续的操作以git用户的身份执行:

# adduser git
# passwd git
# su git

在服务器端初始化一个裸仓库(仓库名习惯上一般带有.git后缀,示例里所在磁盘目录是/opt/git/repo1.git,可根据需要自行选择):

//注意文件夹拥有者git:git,如果有必要可以chown -R git:git /opt/git
$ mkdir /opt/git/repo1.git 
$ cd /opt/git/repo1.git
$ git --bare init

设置公钥认证

通常我们不会在git服务器上为团队每个成员创建用户,而是共用git这个用户,然后每个团队成员使用自己的私钥登录。这样git管理员只要在服务器端维护好公钥列表即可,同时团队成员也不需要每次访问git都输入密码。

在服务器端,首先告诉sshd服务器允许公钥认证:

# vi /etc/ssh/sshd_config

确认sshd_config文件里的以下部分是未注释的(每行都没有"#"前缀):

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysCommand none
AuthorizedKeysCommandRunAs nobody

重启sshd服务:

# service sshd restart

然后(以git用户身份)在git用户的home目录里创建名为.ssh的子目录,在这个目录里创建一个名为authorized_keys的空文件:

# su git
$ cd ~
$ mkdir .ssh
$ cd .ssh
$ touch authorized_keys

注意:sshd对目录权限非常敏感,必须按照下面的方法设置:

$ chmod 0711 ~
$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys

最后,将客户端生成的公钥文件内容,添加到authorized_keys里(客户端生成公钥的方法见后):

$ cat /tmp/mary_pub_key.pub >> ~/.ssh/authorized_keys
$ cat /tmp/john_pub_key.pub >> ~/.ssh/authorized_keys
...

二、客户端(Windows):

客户端推荐使用git bash代替标准的命令行,这样使用习惯于linux环境比较接近。git bash位于git安装路径下,与git.exe在同一路径。如无特别说明,下文中客户端命令都在git bash里执行。

设置本机Git用户名

如果不进行设置,缺省的名字类似windows当前用户名,建议团队每个成员都设置一个固定的名称:

$ git config --global user.name "John"
$ git config --global user.email johndoe@company.com

这个用户名和邮件会出现在git log里,类似下面这样:

$ git log
commit 6e8a84478ea0d4fc34325b5b2b46dbd386a46d7b
Author: John <johndoe@company.com>
Date: Thu Jun 2 16:46:36 2016 +0800

...

注:要查看git配置项和当前值,可以使用“git config --list”命令。

设置公钥认证

公钥认证的最大好处是不用每次pull/push时都输入密码。

在客户端电脑上使用ssh-keygen命令生成ssh公钥和私钥对,其中-C参数表示注释内容,主要方便服务器管理员识别公钥对应的用户以便管理,与前面设置的git用户名或邮件相同即可。要求输入密码时直接按两次回车:

$ ssh-keygen -t rsa -C "mary@company.com"

这样会在“C:\Users\john\.ssh\”目录下生成id_rsa和id_rsa.pub两个文件,前者是私钥,后者是公钥。公钥内容发给git服务器管理员,让他给添加到git用户的authorized_keys文件里。

把id_rsa文件复制到“C:\Program Files (x86)\Git\.ssh\”目录下,如果.ssh目录不存在可创建一个。git bash会自动找到这个私钥文件,用于ssh登录验证。

在git bash里输入下面的命令验证一下公钥验证是否已生效,如果不提示输入密码就表示成功了,如果仍然提示输入密码,再仔细检查服务器/客户端的设置:

$ ssh git@mygitserver.com

连接到服务器端代码库

根据前文的步骤,服务器端已经有一个名为test1.git的裸仓库了。现在可以在客户端上传一些代码(假设代码位于c:\projects\project1目录):

> cd c:\projects\project1
> git init
> git remote add origin git@mygitserver.com:/opt/git/test1.git
> git add .
> git commit -m "Initial commit"
> git push origin master

参考链接:

在UBUNTU上架设GIT服务器

服务器上的Git

SSH: How To Set Up Authorized Keys

How do I tell Git for Windows where to find my private RSA key?

windows下如何github ssh 公钥