分布式版本控制工具——Git

来源:互联网 发布:java转盘抽奖算法 编辑:程序博客网 时间:2024/05/19 12:16

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。在英文中,Git的意思是愚蠢或不开心的人 ,话说,为什么要起这样的名字?

安装Git

百度得到Git的安装包或者从我的资源中下载http://download.csdn.net/detail/tomi_en/9197161,下载完成以后直接进行安装,一直点击下一步默认安装即可。如果可以在开始菜单中找到Git->Git Bash,点击以后弹出一个命令窗口,就说明安装成功。

由于Git是分布式的版本控制工具,每个人的电脑就是一个完整的版本库,所以你需要配置一下自己的身份作为标识。在命令行输入

git config --global user.name "tom"git config --global user.email "你自己的邮箱"

git config –global 参数表示你这台机器上所有的Git仓库都会使用这个配置,配置完成后可以通过下面的方法查看是否配置成功,将名字和邮箱去掉即可

这里写图片描述

创建代码仓库

仓库的英文名叫repository,所有本地提交的代码都会被提交到代码仓库中,将D盘的my目录下的git文件夹作为代码仓库

这里写图片描述

首先我们进入到git目录,然后输入git init就把这个目录变成了可以管理代码的仓库,这时git目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,每次的修改都会被记录下来,作为一个版本,这样我们就可以知道自己做过哪些修改了,可以很轻松的在不同版本之间穿梭。不要修改里面的文件,否则,会把git仓库给破坏了。

提交本地代码

所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。

现在,我们在git目录下新建一个文本文档1.txt,内容为The first version,把这个文件放到git仓库里只需要两步即可

第一步:用git add命令把文件添加到暂存区

git add 1.txt

如果没有任何提示,就说明添加成功了

第二步:用git commit命令把文件提交到仓库,如下图所示

这里写图片描述

-m后面输入的是本次提交的说明,相当于注释,没有这个说明是不合法的,将提交本地代码到仓库分成两步是有好处的,你可以用add命令多次添加不同的文件,最后只需要commit就可以将所有文件提交,提交完成后,git会告诉你一个文件被改动,插入了一行内容。

下面说几个概念:工作区就是你在电脑上看到的目录,比如git文件夹。版本库就是git文件夹下的隐藏文件.git,版本库里存了很多东西,最重要的就是stage的暂存区,还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。

git add就是把文件存到暂存区里,git commit就是把暂存区的所有内容提交到当前分支上,暂存区此时为空。

查看修改内容

现在,就可以领略Git强大的版本控制功能了,将1.txt中的内容修改如下:

The first versionThe second version

git status命令可以查看文件的修改情况

这里写图片描述

可以看出,1.txt已经被修改了,但我们并不知道修改的内容,git diff命令可以帮我们查看修改的内容

这里写图片描述

现在将它提交到代码仓库,仍然需要两步,不过,我们在add和commit命令之后分别用git status查看一下当前仓库的状态

这里写图片描述

Git跟踪并管理的是修改,而非文件,如果你进行了多次修改,设为修改1和修改2,修改1add到暂存区,而修改2没有add就直接commit,那么仓库里的版本就是有修改1的版本,工作区的版本是修改1和修改2。

版本回退

现在我们已经提交了两个版本了,可以用git log查看历史提交信息

这里写图片描述

可以看到,git log显示的是从最近到最远的提交记录,如果你嫌输出信息过多,可以用git log –pretty=oneline,commit后面跟的一大串是版本号。那么,如何才能回到上一个版本呢?可以使用如下命令:git reset –hard HEAD^,其中,HEAD表示当前版本,^表示往前回溯一个版本,^^就是两个版本啦,100个版本就要用HEAD~100啦。还可用cat命令查看版本内容。

这里写图片描述

这时候,你在用git log就只会看到First commit这一个版本了,如果你又想回到第二个版本怎么办呢,其实还是有办法的,git reset –hard e5168a就可以啦,这里的e5168a就是上面第二个版本的版本号,只不过这里只写了版本号的前几位,再用cat 1.txt就可以看到已经回退成功了。

但是,问题又来了,如果你已经关掉了Git窗口,而你又想回到第一个版本,但是版本号又没记住怎么办?Git已经考虑过这个问题,git reflog会用来记录你的每一次命令:

这里写图片描述

git log用来查看提交历史,以便确定要回退到哪个版本。
git reflog用来查看命令历史,以便确定要回到未来的哪个版本。

撤销修改

撤销修改分为两种情况:一种是你在工作区修改之后并没有add到暂存区,此时撤销修改就回到了版本库里的版本。另一种就是已经add到暂存区后又做了修改,现在撤销就会回到add到暂存区时的状态,撤销的命令是git checkout – 1.txt。对于第二种情况,我们还可以用git reset HEAD 1.txt将暂存区的文件取消,重新放回工作区,然后git checkout。如果你已经commit文件,可以回退到上一个版本来撤销修改,如果你已经推送到远程版本库,那祝你好运!!!

删除文件

在git目录下新建一个2.txt并提交到代码仓库
删除文件命令:rm 2.txt,这时候工作区已经没有这个文件了,但版本库中还有,要从版本库中删除该文件,用git rm 2.txt就可以了,然后git commit。如果删除了工作区,版本库还没删,恢复工作区中的文件用git
checkout – 2.txt,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

远程仓库

顾名思义,远程仓库至少需要两台电脑才能玩起来,只有一台电脑怎么办呢,幸好有一个叫GitHub的配套网站,它是用来提供Git仓库托管服务的。由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,创建SSH Key:

 ssh-keygen -t rsa -C "youremail@example.com"

一路回车即可,可以看到如下目录

这里写图片描述

里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key:

这里写图片描述

添加远程库:首先,登陆GitHub,然后,在右上角找到“Create a new repository”按钮,创建一个新的仓库,输入仓库名,其它默认。然后,将本地代码仓库的内容推送到GitHub,根据提示,运行

git remote add origin https://github.com/YatesChiang/Test.git

添加后,远程库的名字就是origin,这是Git默认的叫法,把本地库的所有内容推送到远程库上:git push -u origin master,现在我们就可以在GitHub上看到和本地仓库一样的界面,只要本地作了提交,就可以通过命令git push origin master推送至GitHub

从远程库克隆:首先,在GitHub上新建一个仓库,名为CloneTest,这次我们勾选Initialize this repository with a README,完成后就可以看到一个README.md文件,下面就是把这个仓库克隆到本地

 git clone git@github.com:YatesChiang/CloneTest.git

分支管理

这里写图片描述

分支管理的原理如图所示,如果只有一条主线的话,那么假设你经过多次修改确定了一个叫Test1.0的程序,然后在1.0的基础上开发2.0,此时,你发现1.0中有bug急需修改,要么你将版本退回到1.0,要么只能继续在当前版本修改,修改完以后就带有2.0的代码了。所以,我们可以在1.0版本完成后开发两个分支,一个修改1.0,一个开发2.0,最后将两个分支合并即可。

首先,我们新建一个another分支,这时就会切换到another分支,在此分支上修改1.txt并提交,然后切回master分支git checkout master,在master分支上并不会看到刚才的修改内容,现在,将another合并到master分支上 git merge another,然后就可以看到了。这时我们就可以将another删掉了git branch -d another

0 0
原创粉丝点击