1.git介绍
1.1 产生历史
git是目前世界上最先进的分布式版本控制系统。
Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
1.2 git的两大特点
- 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
- 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站。
Git的优势
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与Linux命令全面兼容
git的工作流程:
2.将项目拉取到github
- # 初始化一个新的 Git 仓库
- git init
-
- # 将远程仓库的地址添加为 'origin'
- # 'url' 是你的远程仓库地址,替换成实际的地址
- git remote add origin url(这是你仓库的地址网址)
- git remote set-url origin [email protected]:lemonjingl/Crawl_Learn.git # ssh连接
-
- # 将当前文件夹中的所有文件添加到暂存区
- git add .
-
- # 提交暂存区中的文件到本地仓库,提交信息为 'init'
- git commit -m 'init'
-
- # 将本地仓库的 master 分支推送到远程仓库的 master 分支
- git push origin master
-
2.Git命令行操作
2.1本地库初始化
- 命令:
git add
- 效果:
- 注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要乱修改
2.2 设置签名
- 形式:
用户名:ningmeng
Email地址:[email protected]
- 作用:区分不同开发人员的身份
- 辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
- 命令:
- 项目级别/仓库级别:仅在当前本地库范围内有效
- git config user.name ningmeng_pro
- git config user.email [email protected]
- 信息保存位置:./.git/config文件
- 系统用户级别:登录当前操作系统的用户范围
- git config --global user.name nengmeng_glb
- git config --global [email protected]
- 信息保存位置:~/.gitconfig文件
- 级别优先级
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者都没有不允许
- 项目级别/仓库级别:仅在当前本地库范围内有效
2.3 基本操作
2.3.1 状态查看
查看工作区、暂存区状态
git status
2.3.2 添加
将工作区的“新建/修改”添加到暂存区
git add[file name]
2.3.3 提交
将暂存区的内容提交到本地库
git commit -m "commit message"[file name]
2.3.4 查看历史记录
git log
多屏显示控制方式:
空格向下翻页
b向上翻页
q退出
2.3.5 前进后退
1、基于索引值操作【推荐】
git reset --hard [局部索引值]
2、使用^符合:只能后退
git reset --hard HEAD^
注意:一个^表示后退一步,n个表示后退n步
3、使用~符合:只能后退
git reset --hard HEAD~n
2.3.6 reset命令的三个参数对比
--soft参数
- 仅仅在本地库移动 HEAD 指针
--mixed参数
- 在本地库移动 HEAD 指针
- 重置暂存区
--hard参数
- 在本地库移动 HEAD 指针
- 重置暂存区
- 重置工作区
2.3.7 删除文件并找回
- 前提:删除前:文件存在时的状态提交到了本地库
- 操作:git reset --hard[指针位置]
- 删除操作已经提交到本地库:指针位置指向历史记录
- 删除操作尚未提交到本地库:指针位置使用 HEAD
2.3.8 比较文件差异
1、git diff[文件名]
- 将工作区中的文件和暂存区进行比较
2、git diff[本地库中历史版本][文件名]
- 将工作区中的文件和本地库历史记录比较
3、不带文件名比较多个文件
2.3.9 删除文件
(1) 我们把目录中的code2.txt删除。
这个时候,git知道删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻提示哪些文件被删除了。
(2)现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
另一种情况是删错了,可以直接使用git checkout – code2.txt,这样文件code2.txt又回来了。
小结:
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
2.4 分支管理
2.4.1 什么是分支?
在版本控制过程中,使用多条先同时推进多个任务。
2.4.2 分支的好处?
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
2.4.3 分支操作
- 创建分支
- git branch[分支名]
- 查看分支
- git branch -v
- 切换分支
- git checkout[分支名]
- 合并分支
- 第一步:切换到接受修改的分支(被合并,增加新内容)上git checkout[被合并分支名]
- 第二部:执行merge命令 git merge[有新内容分支名]
- 解决冲突
- 第一步:编辑文件,删除特殊符号
- 第二步:把文件修改到满意的程度,保存退出
- 第三步:git add[文件名]
- 第四步:git commit -m "日志信息"
- 注意:此时commit一定不能带具体文件名
3.使用github
3.1 创建仓库
(1)注册github账户,登录后,点击"New respository "
(2)在新页面中,输入项目的名称,勾选'readme.md',点击'create repository'
(3)添加成功后,转到文件列表页面.
3.2 添加ssh账号
(1)点击账户头像后的下拉三角,选择'settings'
如果某台机器需要与github上的仓库交互,那么就要把这台机器的ssh公钥添加到这个github账户上
点击'SSH and GPG keys',添加ssh公钥。
(2)在ubuntu的命令行中,回到用户的主目录下,编辑文件.gitconfig,修改某台机器的git配置。
(3)修改为注册github时的邮箱,填写用户名。
(4)使用如下命令生成ssh密钥。
ssh-keygen -t rsa -C "邮箱地址"
(5)进入主目录下的.ssh文件件,下面有两个文件。
公钥为id_rsa.pub
私钥为id_rsa
查看公钥内容,复制此内容
(6)回到浏览器中,填写标题,粘贴公钥
3.3 克隆项目
(1)在浏览器中点击进入github首页,再进入项目仓库的页面
(2)复制git地址
(3) 克隆出错
(4)在命令行中复制仓库中的内容
3.4 上传分支
(1)项目克隆到本地之后,执行如下命令创建分支smart.
(2)创建一个code.txt并提交一个版本。
(3)推送前github上文件列表如下图
(4)推送前github上分支列表如下图
(5)推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支,这样,git就会把该分支推送到远程库对应的远程分支上
- git push origin 分支名称
- 例:
- git push origin smart
(6)再去github网站上去看分支页面,内容如下。
3.5 将本地分支跟踪服务器分支
- git branch --set-upstream-to=origin/远程分支名称 本地分支名称
- 例:
- git branch --set-upstream-to=origin/smart smart
3.6 从远程分支上拉取代码
- git pull orgin 分支名称
- 例:
- git pull orgin smart
使用上述命令会把远程分支smart上的代码下载并合并到本地所在分支。
4.工作使用git
项目经理:
- 项目经理搭建项目的框架。
- 搭建完项目框架之后,项目经理把项目框架代码放到服务器。
普通员工:
- 在自己的电脑上,生成ssh公钥,然后把公钥给项目经理,项目经理把它添加的服务器上面。
- 项目经理会给每个组员的项目代码的地址,组员把代码下载到自己的电脑上。
- 创建本地的分支dev,在dev分支中进行每天的开发。
- 每一个员工开发完自己的代码之后,都需要将代码发布远程的dev分支上。
Master:用户保存发布的项目代码。V1.0,V2.0
Dev:保存开发过程中的代码。
评论记录:
回复评论: