IT技术博客大学习 共学习 共进步

Git安装使用手记

淡水河边的博客 2011-06-21 13:51:23 浏览 4,921 次

这篇主要是记录我在 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 作业流程。

原文:http://huan-lin.blogspot.com/2011/05/install-git-server-and-apache-on.html

建议继续学习

  1. Git常用命令备忘 (阅读 54,503)
  2. Git log diff config高级进阶 (阅读 24,721)
  3. Git subtree 要不要使用 –squash 参数 (阅读 23,284)
  4. 我的git笔记 (阅读 20,084)
  5. Zend Studio集成Git使用 (阅读 8,861)
  6. Git commit 注释格式 (阅读 6,802)
  7. GIT和SVN之间的五个基本区别 (阅读 5,742)
  8. 为何改用Git (阅读 4,860)
  9. 用git部署php站点 (阅读 4,741)
  10. GIT分支管理是一门艺术 (阅读 4,503)