Git的使用

1.git介绍

1.1 产生历史

git是目前世界上最先进的分布式版本控制系统。

Linus1991年创建了开源的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选择了一个商业的版本控制系统BitKeeperBitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发SambaAndrew试图破解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的两大特点

  1. 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
  2. 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站。

Git的优势

  • 大部分操作在本地完成,不需要联网
  • 完整性保证
  • 尽可能添加数据而不是删除或修改数据
  • 分支操作非常快捷流畅
  • 与Linux命令全面兼容

git的工作流程:

2.将项目拉取到github

# 初始化一个新的 Git 仓库
git init

# 将远程仓库的地址添加为 'origin'
# 'url' 是你的远程仓库地址,替换成实际的地址
git remote add origin url(这是你仓库的地址网址)
git remote set-url origin git@github.com: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地址:1234@qq.com

  • 作用:区分不同开发人员的身份
  • 辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
  • 命令:
    • 项目级别/仓库级别:仅在当前本地库范围内有效
      • git config user.name ningmeng_pro
      • git config user.email 1234_pro@qq.com
      • 信息保存位置:./.git/config文件
    • 系统用户级别:登录当前操作系统的用户范围
      • git config --global user.name nengmeng_glb
      • git config --global 1234_pro@qq.com
      • 信息保存位置:~/.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

项目经理:

  1. 项目经理搭建项目的框架。
  2. 搭建完项目框架之后,项目经理把项目框架代码放到服务器。

普通员工:

  1. 在自己的电脑上,生成ssh公钥,然后把公钥给项目经理,项目经理把它添加的服务器上面。
  2. 项目经理会给每个组员的项目代码的地址,组员把代码下载到自己的电脑上。
  3. 创建本地的分支dev,在dev分支中进行每天的开发。
  4. 每一个员工开发完自己的代码之后,都需要将代码发布远程的dev分支上。

Master:用户保存发布的项目代码。V1.0,V2.0

Dev:保存开发过程中的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值