前言
git已经流行了有段时间了,但是由于git一直是linux世界的优秀产物,很多windows平台上的小伙伴难以窥探其风采。尽管我们可以工cygwin来使用git,但是仅仅配置cygwin就需要很长时间,并非普通用户可以实现。幸运的是,git官方给出了一个windows平台的整合安装包,现在我们也可以在windows平台上使用git了。
下面,我将以自己的机器环境为例,逐步向大家介绍如何在windows平台上安装使用git。
目标
您在阅读完本文后,应该可以:
1、在windows安装git,并进行简单的配置。(win10 64bit + git 2.10.1)
2、使用git在aliyun Kelude上创建一个代码库。(需要您事先注册阿里云账户并开通阿里云code服务)
3、将本地库连接到aliyun Kelude远程库。
4、增删改查版本库中的资源。
1 准备工作
1.1 注册阿里云账户并开通Kelude服务。
由于本文需要用git连接Kelude SCM服务(阿里云code),您可以根据自己的需要注册开通该服务。本文不再赘述此步骤,具体操作请参见此处。
2 安装git windows客户端
2.1 下载
点此下载(这是2.10.1的64位版,请根据你自己的情况下载相应版本)
2.2 双击安装文档安装git
安装过程比较简单,全部采用默认设置就ok。
至此,安装结束。你可以在windows开始菜单中找到Git应用程序组,打开后有三个程序,如下图:
本文主要使用Git Bash(也就是命令行方式)实现我们的目标。
3 使用Git Bash
下面的大部分操作都要通过Git Bash这个命令行终端来完成,我们需要先打开这个客户端。
3.1 基本信息设置
在使用git前,需要在git客户端上设置一些基本信息,比如你的名称,你的email地址等。使用如下命令进行设置:
1
|
git config --global user.name
"BlueBerry"
|
这条命令的意思是给git设置一个全局用户名(显示名),这样,以后当你在这台设备上使用git时,签名会默认使用“BlueBerry”,不用每次都重新设置。另外,Email信息也是非常必要的。作为teamwork的一份子,请保持这种良好的习惯“行不更名,做不改姓”。设置Email地址请用如下命令:
1
|
git config --global user.email
"BlueBerry@mycom.com"
|
当你设置好全局信息后,你可能需要看一下你设置的信息,请使用如下命令:
1
|
git config --list
|
结果:
3.2 使用Kelude创建项目代码库
登录Aliyun Kelude服务,在上面创建一个代码库testgit,如下图:
我在Kelude上创建了一个名为testgit的代码库,代码库可见等级为私有。也就是说,这个代码库的管理员只能是我本人,别人无权管理(只能使用)。
创建好代码库之后,Kelude会显示出你刚刚创建的这个代码库的相关信息,如下图:
注意看上图中“创建新版本库”、“已存在的文件夹或Git仓库”这两个部分。其实这两个部分已经简要介绍了我们下文中需要讲解的内容。如果您是高级用户,到此,您应该可以把git用起来了。如果您对于如何使用git还不是特别清晰,我建议您跟着本文继续往下看。
您可能注意到了,Kelude会提示新创建的代码库需要SSH的秘钥(SSH Key),如图:
这里要多介绍一下,用户可以通过用户名、密码的方式访问git代码库,也可以通过SSH的方式来访问,官方推荐使用SSH的方式来访问。而且,通过SSH的方式来访问会更便捷一些。下面我们就来看看如何配置git的SSH访问。
3.3 配置SSH Key,为Git客户端做访问验证
让我先来讲解一下Git的SSH原理(我蒙的,不一定准确,欢迎指正)。
看下图:(画的丑,见谅)
图中,服务器端有一个代码库“blueberry/testgit”,有两个client端要访问它,分别是客户端A和客户端B。那么,怎样通过SSH来访问呢?是这样的,客户端A在本地使用SSH工具创建一个密钥对(公钥、私钥,也就是一把钥匙和一把锁),公钥就是图中的那把深绿色的锁A,私钥就是客户端A手里拿着的钥匙A。客户端A的用户将公钥发给testgit代码库的管理员,管理员将客户端A的公钥添加到blueberry账户的SSH密钥库中(就是告诉Kelude服务器现在有一扇门通往testgit代码库,门上有把锁,只允许能开锁的客户端进到门里面来)。这样一来,客户端A手里有开启锁A的钥匙(私钥),自然就能访问testgit代码库了。
同理,客户端B如果想访问testgit,也需要使用SSH工具创建一个密钥对(就是钥匙B和锁B),然后将锁B(公钥)发给testgit代码库管理员,管理员将客户端B的公钥添加到blueberry账户的SSH密钥库中(就是告诉Kelude服务器testgit代码库上还有一道门,这道门也有一把锁,只允许能开锁的客户端进到门里面来)。那么,客户端B肯定拥有能打开锁B的私钥B,也就能访问testgit代码库了。
有意思的是,Kelude SSH权限管理并非加载在某一个代码库上,而是加载在创建testgit代码库的账号上。这样一来,如果有blueberry账户访问权限,就可以访问所有在此账户下的代码库。这一点我还没有搞的很清楚,目前只是能用,等我搞搞清楚之后再来订正。
好了,接下来让我看一下如何使用Git Bash生成密钥对。
1
|
ssh
-keygen -t rsa -C
"blueberry@mycom.com"
|
执行该语句后,工具会提示你给即将要生成的密钥对设置一个密码,可以不设置。如果不设置,在使用SSH秘钥的时候系统不会要求你输入任何密码。这里我们输入两次回车,让密码保持为空。除非你认为你的电脑会丢,而且丢失之后有人会破解你的系统密码,然后使用你的设备破坏掉我们项目代码库,否则都不需要加密码。个人认为上述意外发生的几率非常非常低,几乎没有)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
Generating public
/private
rsa key pair.
Enter
file
in
which
to save the key (
/c/Users/blueberry/
.
ssh
/id_rsa
):
Enter passphrase (empty
for
no passphrase):
Enter same passphrase again:
Your identification has been saved
in
/c/Users/blueberry/
.
ssh
/id_rsa
.
Your public key has been saved
in
/c/Users/blueberry/
.
ssh
/id_rsa
.pub.
The key fingerprint is:
SHA256:1lk5OEIDe+9j
/Mmpxhz33jeeWxkF2VwI00x
+
/tHf2eg
blueberry@mycom.com
The key's randomart image is:
+---[RSA 2048]----+
| ..o o=o=o|
| o . . +=.o|
| . o o + . o|
| . + * . oo|
| S + S oo|
| . o. . .X|
| o=o ..o*|
| .++ +.o+|
| ...=.E+=|
+----[SHA256]-----+
|
这是生成密钥对之后的反馈信息,你可以在你的用户目录下找到.ssh文件夹,里面有两个文件:id_rsa和id_rsa.pub。.pub那个文件就是那把锁,id_rsa就是那把钥匙。现在我们只需要将id_rsa.pub发给代码库管理员就可以了。
3.4 设置Git远程库
在上一步中,git客户端已经创建了一个密钥对,而且也已近把公钥发到了代码库管理员手里,现在代码库管理员只需要将pub公钥中的信息添加到代码库账号的SSH秘钥库中即可。参考下图:
其中,“标题”这个名字看起来有点怪异,它的作用是给你导入的这个公钥指定一个唯一的标识名,一般用“用户姓名@设备名”这种方式来命名。总之,就是要保证其唯一。
3.5 测试SSH配置
使用以下命令来测试SSH访问:
1
|
ssh
git@code.aliyun.com
|
之后,你能看到屏幕上显示确认连接信息,输入yes后回车,将看到如下信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
RSA key fingerprint is SHA256:ZrA2Zqyyyyyw4zytCyyyyyyMaS2LDH74I7sMPtQIG0.
Are you sure you want to
continue
connecting (
yes
/no
)?
yes
Warning: Permanently added
'code.aliyun.com,120.55.150.20'
(RSA) to the list of known hosts.
**** Welcome to aliyun Code ****
Hi blueberry, you have successfully connected over SSH.
To clone a hosted Git repository, use:
git clone git@localhost
/REPOSITORY_NAME
.git
Connection to code.aliyun.com closed.
|
至此,我们的Kelude远程代码库就创建好了。
4 使用Git进行版本变更管理
4.1 创建本地库
其实版本管理这个东西,就是本地一份数据,服务器上一份数据。每个成员在他们的本地对受管资源进行编辑修改,之后提交给自己本地的版本库。然后,在条件允许的情况下将本地的变更push到远程库中,以便其他成员可以使用你对数据进行的变更。
原文参考:
Although you can technically push changes to and pull changes from individuals’ repositories, doing so is discouraged because you can fairly easily confuse what they’re working on if you’re not careful. Furthermore, you want your collaborators to be able to access the repository even if your computer is offline — having a more reliable common repository is often useful. Therefore, the preferred method for collaborating with someone is to set up an intermediate repository that you both have access to, and push to and pull from that. We’ll refer to this repository as a "Git server"; but you’ll notice that it generally takes a tiny amount of resources to host a Git repository, so you’ll rarely need to use an entire server for it.--Reference: Git on the server
Okay,废话不多说。
4.1.1 在本地创建项目文件夹
4.1.2 将项目文件夹初始化成本地Git版本库
4.2 将本地库链接到Kelude远程库上
下面我们来看看如何从Kelude将我们刚刚创建的testgit repositorycopy到本地来。
先创建一个文件夹,对应Kelude上的testgit项目空间:
1
|
mkdir
testgit
|
然后进入这个文件夹:
1
|
cd
testgit
|
初始化这个testgit文件夹:
1
|
git init
|
显示结果:
1
|
Initialized empty Git repository
in
i
/workspace/Examples/testgit/
.git/
|
接着,我们要将服务器端的原始库添加到我们本地的git项目文件夹,也就是testgit上:
1
|
git remote add origin git@code.aliyun.com:blueberry
/testgit
.git
|
有关git remote和add命令的使用方法,可以上网自己查找。网上有很多说明详细的文档可供参考。origin是远程服务器端的原始库的别名,也就是服务器端原始库testgit库的别名(系统默认的,约定的)。
我在这个项目库文件夹中创建了一个New Text Document.txt文件。
将当前目录下的所有文件都加入到“待提交”列表中:
1
|
git add .
|
提交改变的文件:
1
|
git commit -m
"comments here"
|
提交命令执行成功后:
1
2
3
|
[master (root-commit) a334cd8] the first
file
1
file
changed, 0 insertions(+), 0 deletions(-)
create mode 100644 New Text Document.txt
|
最后是将代码推到服务器端:
1
2
3
4
5
6
7
8
|
$ git push -u origin master
Counting objects: 3,
done
.
Writing objects: 100% (3
/3
), 222 bytes | 0 bytes
/s
,
done
.
Total 3 (delta 0), reused 0 (delta 0)
remote: Updating references: 100% (1
/1
)
To code.aliyun.com:blueberry
/testgit
.git
* [new branch] master -> master
Branch master
set
up to track remote branch master from origin.
|