我的了解主要是通过廖雪峰老师的网站,写得浅显易懂,推荐想学习git的去看。
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
我觉得学习一样新的东西,首先要把这个东西引入的新的概念说清楚,否则看的人会根本摸不着头脑。
比如读者连代码仓库都不知道呢,你就开始教命令,说clone现有仓库,命令是git clone URL。。。balabala
谁知道怎么回事呢,是吧。
当然,别人没有手把手教你的义务,有可能人家写出来只是给自己做总结,所以我们私下抱怨一下就完了。
我只能说作为一个完整的教程,网上大部分人写的都不够格。
完整的入门教程了,推荐大家去看廖老师的教程,网址再写一下
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
废话少说,总结一下我学习git的历程。
首先是git的安装,我是在windows环境下,从http://msysgit.github.io/上面下的安装包
然后按照安装步骤一步一步next下去就好了,中间有几个选项稍微注意一下
一个是Windows Explorer integration,其实就是选择添加到右键菜单的功能,选择Advanced功能就多一些
选择Simple就最多有两个功能Git Bash Here和Git GUI here。我选的是Simple。
这两个功能也很简单,就是在当前目录下运行Git Bash(就是命令终端)和Git的GUI程序。
因为一般你直接双击Git Bash,它默认的目录是用户目录
比如我的用户名是fox,电脑名是fox-PC
那么直接运行Git Bash,它的显示是这样的
fox@FOX-PC ~
我们看到windows下Git Bash认为的home目录是
/c/Users/fox
说明一下,/c代表的是c盘,linux下是没有c:/这种表示法的,它认为所有目录都是根目录/的子目录。
所以你要切换的d盘,要用
cd /d
回到我们的右键菜单,右键菜单和直接运行的唯一区别就是当前目录不一样,你在一个目录下右键运行Git Bash
就省去了你直接运行然后用命令切换目录的麻烦,仅此而已。
安装时另一个选项让你选择是否要在windows的命令行模式下使用Git,如果选择是,它会把Git命令的路径加入到
PATH环境变量上,这样在windows命令行模式下就能直接输入git命令进行使用了
如果选择Git Bash only,则Git命令只能在Git Bash的命令终端上使用。
我选择的是Git Bash only。因为我觉得Git Bash用的命令遵循的是linux那一套,用在windows命令行下容易搞混,
而且我觉得软件功能专一和集中一点比较好,要用Git,就在Git Bash里用就好了,如果搞得很多地方都能用,
反而不知道在什么地方用比较合适了,也容易搞错。这也是前面我右键菜单选择Simple的原因。
最后一个选项是换行符的转换。主要是因为windows下换行是CRLF(\r\n),而linux下是\r。
我们按推荐的来就好了,推荐的就是保存文件的时候\r都转成\r\n,而提交的时候\r\n都转成\r。
反正我按这个来做,没碰到什么问题。
安装完成后用git来配置一下自己的名字和email,标志一下身份,是让git知道后面记录的每步操作的作者是谁。
$ git config --global user.email "email@example.com"
另外说一下,由于我们用Git来管理我们的代码文件,因此涉及到一个编码的问题,如果你windows里的编辑器使用
的是一套编码方式,而Git使用的是另一套编码方式,就不可避免会有很多问题。
因此我们统一使用UTF-8编码方式。而廖老师的文章里提到过windows自带的记事本,对于UTF-8编码的文件处理
是有点问题的,为了避免这些问题,我们最好选择Notepad++来编辑文本。
git的一些概念:仓库、版本、分支、远程仓库。
首先看什么是仓库。仓库又叫版本库,英文名叫respository。我看很多地方都没有给它一个定义。我的理解,
就是版本库就是一个目录,这个目录里面的文件会被git管理起来,你对这个目录里的文件进行了修改,或者新增、
删除了某些文件,只要在git里提交了这些操作,git都能帮你记录、管理起来。以后无论你想查看修改的历史,或者
想恢复到某个时间点的样子,git都能帮你实现。
而要让git能帮你管理某个目录,首先必须在这个目录下建立一些配置和索引文件。这就是创建仓库的过程。
创建的过程很简单,你进入到你要建立仓库的目录,然后使用
git init
就好了。你再看目录下面,会多了一个.git文件夹,这个文件夹下面会有一些子目录和文件,这些都是git正常工作
所必须的,轻易不要去动它们。
创建了仓库以后,后面就是提交修改、管理修改、撤销修改之类的操作了。
版本。我觉得版本就是仓库里的文件在某个时间点的状态。这个状态必须是git记录在案的,这样我们才能恢复和
提取出处于这个状态的文件,也就是我们可以随时获取到当前仓库的某个版本。可以用git tag versionname对最近
的一次提交打上标签,这样git就会把版本名字和最近提交的状态联系起来。
远程仓库。就是不在本地,在服务器里的建立的仓库。只要知道远程仓库的url地址,本地可以使用git clone url
把远程仓库连同里面的文件整个clone到本地来。然后在本地进行修改、管理。最后再提交到远程仓库中。
远程仓库可以自己搭在局域网里的某台linux服务器上,这样便于多人协作,代码也仅限于局域网交流,比较保密。
如果不在乎保密的问题,可以在一些公网平台上建立远程仓库,比如著名的github。
使用github也很简单,首先肯定是在github上注册一个帐号。然后呢,为了使每次你把本地仓库提交到github上时
它都能识别你的身份,你必须在本地生成一对SSH Key的密钥对,id_rsa是私钥,留在本地home目录的.SSH
文件夹下(还记得windows系统中home文件夹是哪个吗^_^)。id_rsa.pub是公钥,我们要保存到github上,
在github网站个人设置的SSH Keys选项下可以添加。
本地生成SSH Key的密钥对用如下命令ssh-keygen -t rsa -C "email_name"
分支。分支是很重要的一个概念。分支解释起来比较困难。我尝试一下。
我们知道,对仓库的各种修改,提交后git都会记录下来,形成一个个时间节点的状态,按时间顺序来看,这就是
一条分支,我们称为主分支。
如果在主分支之外,我们又创建了一条分支,那么,当我们处于这条分支的时候,所有提交的修改,都算在这条分支
上,不会影响到主分支。当我们在这条分支上工作,完成得差不多了,我们可以把分支合并到主分支上面去。
这样,我们在分支上的工作成果就反映到主分支上面去了。
所以,一般用git管理的多人协作的分支流程都是如下图所示的
在整体进行到一定阶段之后,又把dev分支往主分支合并,形成一个版本。
当然,分支也涉及到管理、合并时的冲突解决等细节问题,具体可以参考廖老师的教程。
大体上,我们如果掌握了git的上面这些东西,基本就能应付日常的版本管理了。我也只是照着廖老师的教程大体
过了一遍,要真正熟练掌握,还是要平时多用git进行版本管理。
还有一些内容,比如本地git服务器的搭建,我自己没有去实践,就不献丑了。大家去看廖老师的教程吧。