赞
踩
1)开发者:
Linux(啥?不认识?没关系,其实我跟他也不熟!)
2) 为什么开发:
因为Linux当时觉得,免费的不好用,好用的呢还要钱!与他的开源注意精神不符合,可以说严重不符合!大体上事情的经过是这样的:2002年,为了更好的维护Linux系统的发展,Linus(林纳斯)选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权 Linux社区免费使用这个版本控制系统。本来是一个你好我好大家好的局面,但是,重点来了,Linux社区牛人太多,比如有个叫Andrew的人试图破解BitKeeper的协议,更骚的是,被BitMover公司发现了,于是乎BitMover公司就不高兴了,打算收回Linux社区的免费使用权。可能是Linus(林纳斯)觉得自己被卡脖子了[哈哈历史总是惊人的相似是不是?!],Linus(林纳斯)花了两周时间自己用C写了一个分布式版本控制系统,这就是Git诞生!一个月之内,Linux系统的源码已经由Git管理了!尤其是2008年,GitHub网站上线。它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
SVN都是集中式的版本控制系统,而Git是分布式版本控制系统。我们来看一下各自的工作方式:
1)集中式的版本控制系统:
版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑。所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器中的版本库。比如说员工A工作的时候,先要从版本库中获取最新的代码,然后开始干活,干完了,将自己电脑上的代码提交到中央服务器中的版本库中。此时,如果员工B开始工作,他只能先从版本库中获取最新的代码(A提交后的代码),然后才能开始干货,干完活进行提交。A和B之间的连接是通过中央处理器进行链接的。如果断网了,那么就无法进行工作了。
2)分布式的版本控制系统:
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
首先说明下Git和TortoiseGit的关系:Git是一个版本控制软件,我们用它的时候,一般是通过命令行的方式去拉取、提交代码,但是命令行的方式不如图形界面的看起来简单直观,于是就有了TortoiseGit,TortoiseGit就是Git图形化操作软件,它让我们可以通过点几下鼠标就可以完成对Git的使用,而不是通过复杂的命令行(虽然也不是很复杂~)
先下载好下面的文件:
Git下载地址:Git - Downloads
TortoiseGit和TortoiseGit语言包下载:Download – TortoiseGit – Windows Shell Interface to Git
安装过程很简单,依次将三个软件安装完成即可。
安装中可能会遇见的问题,msi文件安装报错2503(The error code is 2503),如下图,解决方法见我的另一篇文章:
完美解决:安装 msi 文件报错 2503,2502 “The error code is 2503“
4-1)账号注册就省略了
4-2)创建远程仓库,登陆 github账号
4-2)获取新创建的仓库的地址【后面会用到】:git@github.com:magelaile/share.git
1)汉化,在桌面点击右键,选择TortoiseGit--->Settings,打开配置页面,选择中文简体即可。
2)配置Git信息:名称和email是github的用户名和主邮箱
3)创建public Key和private Key并配置到github账号
3-1)打开PuTTYgen
3-2)进行生成 Key:【注意要在红框区域中不停的晃动鼠标,我也不明白为什么需要加上这个鬼畜般的动作,干就是了!】
比如,我将 private key 保存到了 D:\mykeys\github-private.ppk 【注意这个后面要用到】
3-3)在 github 账户后台设置 SSH key
将3-2步骤中,生成的 public key,添加到后台
4)克隆仓库到本地电脑上,上面,在 github 账号中,我已经创建好了一个仓库,仓库地址:git@github.com:magelaile/share.git
5)新增文件,添加并提交文件到仓库 、修改文件并提交到仓库
5-1)进入share文件夹,新建 readme.txt,文件,并在该文件上右键,选择“添加”
5-2)提交文件到仓库( git commit),在仓库空白地方,点击右键,点击提交即可。
5-2)修改文件并提交到仓库:我们可以修改readme.txt文件中的内容,并在仓库空白地方,点击右键,点击提交,就可以将修改后的文件提交到仓库中
6)将本地仓库的代码推送到远程仓库中
说明:上面步骤我们将远程仓库克隆的本地电脑上,其实就是相当于,在本地电脑上创建了一个本地仓库,然后将远程仓库中的代码复制一份放到了本地仓库中,上面我们添加文件
提交修改,都是提交到了本地仓库中,如果想要将代码也同步到远程仓库中,我们需要将本地仓库中的修改推送到 远程仓库中。
7)获取最新版本:当远程仓库有更新,我们需要获取最新的远程仓库代码,有两种方式:拉取和获取
拉取和获取的区别:
拉取(git pull):从远程拉取最新版本到本地并自动合并(相当于 git fetch + git merge)。
获取(git fetch):从远程获取最新版本 到本地 不会自动合并,实际使用中 使用 拉取 更安全,在合并之前可以看清楚更新情况,再决定是否合并。
8)版本回退
首先,我们再提交并推送两次修改到 远程仓库中:分别是增加了 readme2.txt 和 readme3.txt 两个文件
目前 远程仓库中和本地仓库中都是有三个文件 readme.txt、readme2.txt 和 readme3.txt
查看日志:右键--->TortoiseGit-->显示日志
点击确定后,即可执行回退过程,注意:当前只是回退了本地仓库中的代码,远程仓库代码是没有回退的。
如何回退远程仓库的版本呢?我们可以将本地的代码强制推送到远程,强制推送过程中其他人无法提交代码【一般不建议这么做】
右键-->推送
强制推送完成后,远程仓库代码和本地仓库代码就一样了:
9)分支操作:分支创建、将分支推送到远程仓库、合并分支、删除分支
9-1)创建分支
9-2)将分支推送到远程仓库:分支创建完成后,切换到我们刚创建的分支,在新分支下执行 推送 操作。(在PUSH的时候远程服务器发现远程没有该分支,此时会自动创建一个和本地分支名称一样的分支,并将本地分支的内容上传到该分支)
9-3)合并分支:
上面我们已经将分支切换为 dev 分支了,此时新建 两个文件(dev_readme01.txt、dev_readme02.txt) , 分别提交 并 推送到远程仓库
注意,此时文件提交到的分支就是dev分支了,而不是master分支!我们到远程仓库上看一下:
先切换到 master 分支,【要在哪个分支上进行合并,就要先切换到哪个分支上,我们要将dev分支上的改动合并到master分支,需要先切换到master分支】
右键并选择合并
合并完成后,将合并后的 本地仓库推送到远程仓库即可。【推送后,远程仓库中代码也合并完成】
9-4)删除分支:
删除本地分支:【注意:如果当前所在分支是要删除的分支,需要先切换到其他分支】
删除远程仓库:
10)标签操作:标签创建、标签推送到远程仓库、标签删除
10-1)标签创建
10-2)标签推送到远程仓库:在推送到远程仓库的时候选中 ”包括标签“
10-3)删除标签
打开 浏览引用 【参照 9-4删除分支】【注意这种方法只能删除 本地分支上的 bug】
删除远程分支上的tag,需要使用git 命令进行操作,这个将在下面的git 常用命令使用方法中进行演示。
6-1)创建SSH key
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录(window中一般是这个目录C:\Users\Administrator),如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash,在桌面右键,选择Git Bash Here),创建SSH Key:
输入命令:ssh-keygen -t rsa -C "youremail@example.com" 【注意引号里面的邮箱地址要换成你自己的】
一路回车即可,创建过程中会让你输入密码,我们直接回车,密码默认为空即可(又不是用于军事目的,哈哈~)。
命令执行完毕, C:\Users\Administrator\.ssh文件夹中,就创建好了公钥和私玥
6-2)在 github 账户后台设置 SSH key【添加SSH key的目的是让我们能够将本地代码推送到github中,如果不添加,在我们推送的时候会提示没有权限】
6-3)克隆远程仓库到本地,使用命令 git clone
我们把之前创建的share仓库,通过命令行的方式,克隆到本地
git clone git@github.com:magelaile/share.git 【后面这部分可在github的share仓库中获得】
6-4)将本地修改提交到仓库
6-4-1)新增文件并提交到仓库,命令 git add
新建一个 newfile01.txt文件,并再本地share文件夹中 执行命令: git add newfile01.txt
6-4-2)提交文件到仓库,并对本地提交添加备注,命令: git commit
参数 -m 用来添加此次提交的备注
6-5)将本地仓库的代码推送到远程仓库中 命令 git push
【小提示:上面我们创建密钥的时候创建了一个公钥和私钥,公钥我们保存到了github中,私钥干嘛用了呢,其实每次提交都会用到私钥,在执行git push 的时候会自动C:\Users\Administrator\.ssh 这个文件夹中去加载私钥】
6-6)获取最新版本:当远程仓库有更新,我们需要获取最新的远程仓库代码到本地,命令 :git pull
6-7)版本回退
首先查看历史版本记录 命令:git log 【 按下 q 键 退出历史查看】
commit 后面跟的一串字符就是 对应的commit后的版本号,我们回退到某个版本,就是要根据对应的版本号进行回退
执行版本回退,命令 git reset
比如,我要回退到在添加 newfile01.txt 文件之前的版本,执行命令 git reset --hard 6fa1bfb7c494d30b765760e0b109935c8111e7b9
参数 --hard 表示硬重置:如果当前工作区 share 文件夹中我们已经做了修改,那么重置后这些修改也会被还原,也就是说这些修改会被删除。
执行完成后,在看一下本地仓库中,已经没有 newfile01.txt 文件了
如果此时 我们执行 git push 命令,将本地代码推送到github远程仓库中,那么会提示,我们当前的版本低于远程的版本,无法提交
那如果我们也想将远程的仓库进行版本回退到和本地的一样该怎么办,此时,只需要我们在push 的时候加上一个参数 -f 即可
6-8)分支操作:分支创建、将分支推送到远程仓库、合并分支、删除分支
6-8-1)创建分支 ,命令:git branch
创建分支 newbc01, git branch newbc01
6-8-2)切换分支 ,命令:git checkout
切换分支到 newbc01, git checkout newbc01
6-8-3)查看分支 ,命令:git branch ,如果后面跟 名称,那么就表示创建分支,如果不跟分支名称就表示查看所有分支
* 号,表示当前所在的分支。
6-8-4)将分支推送到远程仓库:【注意:要将哪个分支推送的远程仓库,就需要提现先切换到该分支下】,比如我们要将 newbc01 分支推送到远程,我们首先要切换到该分支下
git checkout newbc01 ,然后 使用 git push --set-upstream origin 命令进行推送即可(不要忘了指定分支名称),如,git push --set-upstream origin newbc01
6-8-5)合并分支:git merge
首先 我们切换到 newbc01 分支中,添加 newfile02.txt 文件并提交,此时我们查看下当前工作区中(share文件夹中)的文件,如下:
然后我们使用 git checkout master 命令,切换到主分支,然后再查看下工作区中的文件,如下:此时,主分支中是没有newfile02.txt文件的,因为它是在分支 newbc01中的。
接下来我们要将分支 newbc01 合并到 master 分支中。【注意:要合并到哪个分支中,就要先切换到对应的分支中】使用命令,get merge newbc01 ,合并后,主分支也会出现 newfile02.txt 文件:
6-8-6)删除分支,命令 git branch -d ,需要使用参数 -d
比如我们要删除分支 newbc01,使用命令 git branch -d newbc01 【注意:删除分支时,我们要先切换到其他分支上,然后再对分支进行删除】
上面,我们删除的分支只是本地的分支,那么如何通过命令,删除远程的分支呢?
首先使用命令 git branch -a 产看所有的分支,其中, remotes/origin 开头的都是远程分支,然后 通过 git push origin --delete 命令进行删除即可,
例如,我们要删除远程分支 newbc01,需要执行命令 git push origin --delete newbc01
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。