Git安装使用手记

这篇主要是记录我在 Windows 平台安装 Git 的过程和git的简单使用。

先描述一下安装的需求:

· 用户端和服务器端的操作系统都是 Windows。

· 用户端要能透过 HTTP 的方式存取版本库。

· 无论是取出档案还是送交档案,都需要验证身分(输入账号密码)。

底下是安装步骤:

Step 1: 安装 Git for Windows

在 Windows 环境使用 Git,可以用 msysgit (Git for Windows),我安装的版本是 v1.7.4。装好之后,程序集里面会多出一个选单:Git,里面有两个程序:Git GUI 和 Git Bash。前者是图形操作界面,后者是命令列视窗。Git 的预设安装目录是c:\Program Files\Git。

由于我要让用户端可透过 HTTP 协定来存取版本库,因此还要把 Git 安装目录下的 bin\libiconv2.dll 复制到安装目录下的libexec\git-core\ 底下。少了这个动作,将来透过 HTTP 存取版本库时,就会出现 HTTP 500 Internal Server Error 的讯息。如下图所示:

Step 2: 安装 Apache HTTP Server

欲提供 HTTP 的存取方式,可以利用Apache Http Server。我安装的版本是 Apache 2.2.19(包含 OpenSSL)。

安装好 Apache 之后,修改 httpd.conf,令它使用 8080 port,以免和 IIS 抢 80 port。

接下来,一样是修改 httpd.conf。找到 <directory> 标签,确认其设定如下:

<directory />

Options FollowSymLinks

AllowOverride None

Order deny,allow

Allow from all

</directory>

接着在 httpd.conf 的最后面加入以下文字:

#Set this to the root folder containing your Git repositories.

# Git 你的版本库放在哪里

SetEnv GIT_PROJECT_ROOT D:/GitRepos

# Set this to export all projects by default (by default,

# git will only publish those repositories that contain a

# file named “git-daemon-export-ok”

# 该目录下的所有版本库都可以透过 http(s) 的方式存取

SetEnv GIT_HTTP_EXPORT_ALL

# Route specific URLS matching this regular expression to the git http server.

# 令 Apache 把 Git 相关 URL 导向给 Git 的 http 处理程序

ScriptAliasMatch \

“(?x)^/(.*/(HEAD | \

info/refs | \

objects/(info/[^/]+ | \

[0-9a-f]{2}/[0-9a-f]{38} | \

pack/pack-[0-9a-f]{40}\.(pack|idx)) | \

git-(upload|receive)-pack))$” \

“C:/Program Files/git/libexec/git-core/git-http-backend.exe/$1″

 

<Location />

AuthType Basic

AuthName ”GIT Repository”

AuthUserFile ”D:/GitRepos/htpasswd”

Require valid-user

</Location>

其中第一道指令是告诉 Git 你的版本库放在哪里,第二道指令表示该目录下的所有版本库都可以透过 http(s) 的方式存取。第三道指令则是令 Apache 把 Git 相关 URL 导向给 Git 的 http 处理程序。注意:如果你的 Windows 系统是 64 位,里面的C:/Program Files/…. 就要改一下。最后的 <Location> 区段设定了虚拟根路径 “/” 的验证规则,D:/GitRepos/htpassword 是账号密码文件。

完成上述修改之后,重启 Apache HTTP 服务。

Note: 如果你希望将来透过远端存取版本库时,一律使用 http://my-server/git/* 开头的 URL,则可将 ScriptAliasMatch 指令改为 “(?x)^/git/(.*/(HEAD | \ …….”

Step 3: 建立版本储存库

这里先建立一个测试用的版本库,以确认用户端可以透过 HTTP 协定取出档案。步骤如下:

1 开启 Git Bash 命令列视窗:开始 > 程序 > Git > Git Bash。

2 输入以下命令,以建立一个空的版本库(‘$’ 符号是提示字符,不用输入):
$ cd D:/GitRepos
$ git init MyProject

参考下图:

此范例的 git init 命令会在 MyProject 目录下建立一个名为「.git」的隐藏目录,Git 用来管理版本所需的控制档案全都放在这里。MyProject 这个目录本身则是工作目录,你可以在此目录下加入档案或子目录。

Note: 在初次建立一个可让多人共享的版本库时,应该要使用 git init –bare 命令。加上 –bare 的参数,表示要建立「单纯的」版本库,也就是不含任何工作复本(working copy)档案,而只包含版本控制相关的档案。

Note: 版本库的根目录(这里是 D:\GitRepos)之下的第一层子目录不必一定要建立成版本库。我们也可以在其下建立单纯的子目录,然后在各个子目录底下建立版本库。例如:

D:\GitRepos

+– Projects

+– PrjA (版本库)

+– PrjB (版本库)

+– Notes

+– DotNet (版本库)

这样的话,以后我们就可以用类似「http://my-server/Projects/PrjA」的网址来存取版本库。

Step 4: 取出版本库

比较正确的说法,是把版本库复制(clone)一份回自己家里(本机)。一样开启 Git Bash 视窗,切换到你打算存放本机版本库的目录,然后使用 git clone 把档案库拉回来。指令如下:

$ cd d:/Work

$ git clone http://localhost:8080/MyProject

接着应该会要求你输入账号和密码,若输入正确,便可将本库取回。参考下图:

使用 git clone 命令时,网址也可以包含使用者账户名称,例如:

$ git clone http://michael@localhost:8080/MyProject

如果欲复制的远端版本库不是空的,Git 会先压缩档案再传送,而且在荧幕上显示压缩的进度,如下图:

下一步

后续的作业,就是在本机的工作目录下进行日常的档案修改与版本提交程序了。

Git 基础作业流程

1 建立一个共享的版本库。

2 将远端主机上的版本库复制一份至本机。

3 修改本机的工作复本,然后提交。

4 将提交的档案推送至远端主机的版本库。

以下是范例:

1. 建立一个共享的版本库

cd d:/GitRepos/Projects/MyProjectA

git init –bare
2. 将远端主机上的版本库复制一份至本机

git clone http://my-server:8080/Projects/MyProjectA

如果你的 Git 服务器支援 https:// 协定,则复制版本库的指令会类似这样:

git clone https://my-server/Projects/MyProjectA

若以 https:// 协定复制版本库时出现错误:

error: SSL certificate problem, verify that the CA cert is OK. Details:

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile

d while accessing https://localhost/Projects/test/info/refs

 

fatal: HTTP request failed
可尝试以下列指令解决:

git config –global http.sslverify  false
此外,你也可以在复制时直接指定账号密码,例如:

git clone https://michael:guesswhat@my-server/Projects/MyProjectA
如果这个「远端主机」就是你目前工作的本机,即要在同一台机器上复制出另一个版本库,则可以用 file:// 。例如:

git clone file://d:/GitRepos/Projects/MyProjectA
没有加 file:// 或者写 file:///(三个斜线)也可以。

3. 修改本机的工作复本,然后提交

git add .

git commit -m ”提交时的说明文字“

4. 将提交的档案推送至远端主机的版本库

git push origin master

其中的 push 代表要将变更推送至远端服务器;origin 代表此 local 版本库在远端服务器的来源,你可以从 local 版本库的.git\config 档案中找到这个远端的 “origin”;最后的参数 master 则代表 master 分支。

所以上述指令的意思,以比较精确的解释来说,就是:将本机的 master 分支的所有变更推送至远端主机的 master 分支。

如果没有指定 master 分支,只写这样:

git push origin

则表示要将本机的所有分支的变更推送至远端主机的对应分支。

若要将本机的变更推送至远端版本库的其他分支,例如 feature101,就可以输入指令:

git push origin feature101
其他开发人员如果要取得最新的档案,可以在自己的 local 版本库的目录之下执行 git pull 命令。

以上大概就是最简单、最基础的 git 作业流程。

posted @ 2015-01-10 11:26  Aersling  阅读(224)  评论(0编辑  收藏  举报