这篇主要是记录我在 Windows 平台安装 Git 的过程和git的简单使用。git
先描述一下安装的需求:express
· 用户端和服务器端的操做系统都是 Windows。服务器
· 用户端要能透过 HTTP 的方式存取版本库。ide
· 不管是取出档案仍是送交档案,都须要验证身分(输入帐号密码)。测试
底下是安装步骤:ui
Step 1: 安装 Git for Windowsthis
在 Windows 环境使用 Git,能够用 msysgit (Git for Windows),我安装的版本是 v1.7.4。装好以后,程序集里面会多出一个选单:Git,里面有两个程序:Git GUI 和 Git Bash。前者是图形操做界面,后者是命令列视窗。Git 的预设安装目录是c:\Program Files\Git。spa
因为我要让用户端可透过 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 做业流程。