• Git


    Git

    一、Git概述

    (一)什么是Git?

    Git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS)。可以有效、高速地处理从很小到非常大的项目版本管理。

    (二)什么是版本控制系统?

    版本控制系统能追踪项目,从开始到结束的整个过程。对编程人员而言,版本控制技术是团队协作开发的桥梁,助力于多人协作同步进行大型项目开发。软件版本控制系统的核心任务:查阅项目历史操作记录、实现协同开发。

    (三)常见的版本控制系统

    ① 集中式版本控制工具
    集中式版本控制工具,版本仓库是集中存放在中央服务器的,team里每个人工作时,从中央 服务器下载代码。每个人个人修改后,提交到中央版本仓库。提交(commit)代码需要联网。如:svn
    这会造成一个明显的问题:单点故障

    image

    ② 分布式版本控制工具
    分布式版本控制系统可以没有 “中央服务器”,每个人的电脑上都是一个完整的版本仓库,这样工作的时候,不需要联网。因为版本仓库就在你自己的电脑上。多人协作只需要各自修改,开发完成即可,推送给对方【联网】,推送的时候是将整个版本仓库推过去。如:Git

    这个共享版本库一般指的是代码托管平台,比较有名就是github,gitee

    image

    (四)Git的特点

    ① 速度、简单的设计
    ② 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
    ③ 完全分布式
    ④ 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
    ⑤ 协同开发

    image

    Clone:克隆,从远程仓库中克隆代码到本地仓库,第一次操作
    Push:推送,代码完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
    Pull:拉取,从远程库拉代码到本地库,自动进行合并(merge),最后放到工作区。

    image

    checkout:将本地仓库的内容检出到工作区
    add:在提交前先将代码提交到暂存区
    commit:提交到本地仓库

    (五)基本概念

    本地仓库: 在本地主机上的一个代码库,可以独立存在,也可以与远程仓库进行关联

    工作区:对任何文件的修订(增删改),都先放在工作区,工作区不与任何仓库分支进行关联 暂存区:把修订的文件,从工作区经过add(添加)后与某一个仓库分支进行关联,只要进 入缓存区的文件才能commit(提交)到本地仓库。

    远程仓库 : 在局域网或互联网上的一个主机,存放代码库的主机或平台,比如GitHub、 Gitee.com(码云)

    分支:代码存放在仓库,默认是主分支(master),可以在主分支基础上创建很多子分支,比如 develop(开发)、bugfix(bug修复)等。

    二、Git的下载和安装

    (一)下载

    下载地址:https://git-scm.com/download
    

    image

    (二)安装

    傻瓜式安装:一路下一步。安装完成后在电脑桌面右击显示
    注:
    	Git GUI Here:Git提供的图形界面工具
    	Git Bash Here:Git提供的命令行工具
    

    image

    三、Git的基本配置

    1.安装完成 Git 后,正式使用git前,是需要进行一些全局设置的,如用户名、邮箱。
    设置全局用户名
    git config --global user.name "your name"
    设置邮箱
    git config --global user.email "your email"

    image

    以上配置信息默认存储在用户目录下,如果设置错误,可以删除以下如图文件,重新操作以上命令即
    可。

    image

    1. 查看配置信息:git config --list

    image

    1. 构建本地仓库:要使用Git对我们的代码进行版本控制,首先需要构建本地仓库
      ① 在本地初始化一个Git仓库
      ② 从远程仓库克隆一个仓库

    本地仓库的相关操作

    1. 在本地初始化一个Git仓库:
    • 在电脑的任意位置创建一个空目录作为我们的本地Git仓库
    • 进入这个目录中,点击右键打开Git bash窗口
    • 执行命令Git init
      如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
    1. 查看文件状态:
      git status [-s]

    image

    1. 将文件添加(修改)到版本库
      要将一个文件纳入到版本库管理,首先要将其添加到暂存区,然后才能提交到仓库中。
      添加单个文件到暂存区
      git add Readme.txt
      将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
      git add .
    1. 将暂存区中的文件,提交到仓库中
      如果暂存区有文件,则将其中的文件提交到仓库
      git commit
      带评论提交,用于说明提交内容、变更、作用等
      git commit -m 'your comments'
    1. 查看提交历史记录
      有的时候,是会需要查看自己做过哪些提交,来回顾自己完成的部分。或者需要寻找某个具体的提交来
      查看当时的代码。
      git log # 显示所有提交的历史记录
      git log --pretty=oneline # 单行显示提交历史记录的内容
    1. 版本回退
      有了 git log 来查看提交的历史记录,我们就可以通过 git reset --hard 来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。
      回退到 commit_id 指定的提交版本
      git reset --hard 'commit_id'
    1. 回到未来的某个提交
      当退回到某个提交的版本以后,再通过 git log 是无法显示在这之后的提交信息的。但是,通过 git reflog 可以获取到操作命令的历史。因此,想要回到未来的某个提交,先通过 git reflog 从历史命令中找到想要回到的提交版本的 ID, 然后通过 git reset --hard 来切换。
      git reflog
      git reset --hard 'commit_id'
    1. 删除文件
      在文件未添加到暂存区之前,对想删除文件可以直接物理删除。如果文件已经被提交,则需要 git rm
      来删除
      git rm Readme.txt // 删除已经被提交过的 Readme.txt
      注意: git rm 只能删除已经提交到版本库中的文件。其他状态的文件直接用这个命令操作是出错的。

    四、分支管理

    (一)查看分支

    # 查看本地分支信息
    git branch
    # 查看相对详细的本地分支信息 
    git branch -v
    # 查看包括远程仓库在内的分支信息 
    git branch -av
    
    注意:前面带有*号,这标识我们当前所在的分支
    

    (二)创建分支

    # 新建一个名称为 dev 的分支 
    git branch dev
    

    (三)切换分支

    # 新建完 dev 分支以后,通过该命令切换到 dev 分支 
    git checkout dev
    注意:当我们创建完分支以后,我们需要切换到新建的分支,否则,所有的修改,还是在原来的分支上。事实上,所有的改动,只能影响到当前所在的分支。
    

    (四)创建并切换分支

    # 新建 dev 分支,并切换到该分支上 
    git checkout -b dev
    

    (五)合并分支

    # 切换回 master 分支
    git checkout master
    # 将 dev 分支中的修改合并回 master 分支 
    git merge dev
    注意:分支修改文件中如果有换行的话会报错
    

    image

    解决:Git默认配置替换回车换行成统一的CRLF,我们只需要修改配置禁用该功能即可。
    git config --global core.autocrlf false
    

    (六)删除分支

    	当之前创建的分支,完成了它的使命,如 Bug 修复完,分支合并以后,这个分支就不在需要了,就可 以删除它。
    # 删除dev分支 
    git branch -d dev
    

    五、远程仓库

    现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远 程仓库,同时还增加了本地仓库的一个备份。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务平台来实现,其中 比较常用的有GitHub、码云等。
    -- GitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本仓库格式进行托管,故名GitHub。
    -- 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快。
    接下来我们演示如何将本地仓库中的代码同步到github。和码云的操作一模一样

    (一)注册账号

    ① 第一步,点击注册按钮
    

    image

    ② 填写真实信息
    

    image

    ③ 邮箱验证
    

    (二)登录使用

    image

    创建仓库

    image

    填写仓库详情

    image

    六、同步远程仓库

    image

    (一)ssh配置

    SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间 人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处 就是传输的数据是经过压缩的,所以可以加快传输的速度。
    注:使用SSH同步方式需要先生成密钥并在Gitee配置公钥

    执行命令,生成公钥和私钥:
    	ssh-keygen -t rsa
    执行命令完成后,在window本地用户.ssh目录C:Users用户名.ssh下面生成如下名称的公钥和私钥
    
    密钥生成后需要在gitee上配置密钥,本地才可以顺利访问。
    

    image

    image

    在git工具上输入指令 ssh-keygen -t rsa 执行后,会在C:Users用户名 下 一个名为.ssh的文件夹中找到公钥

    image

    使用记事本的方式打开id_rsa.pub 把里面的公钥内容复制到网页公钥文件域中。

    (二)添加远程仓库地址

    git remote add origin 远程仓库地址
    

    七、远程仓库的操作

    (一)推送本地内容到远程仓库

    # 在本地仓库更新内容 添加暂存区
    git add .
    # 提交内容
    git commit -m '信息'
    # 当本地仓库中,代码完成提交,就需要将代码等推送到远程仓库,这样其他协作人员可以从远程仓库同步内容。
    # 第一次推送时使用,可以简化后面的推送或者拉取命令使用 
    git push -u origin master
    # 将本地 master 分支推送到 origin 远程分支
    git push origin master
    	注意: 
    		① git push -u origin master ,第一次使用时,带上 -u 参数,在将本地的 master 分支推送 到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
    		② 推送之前,需要先pull远端仓库,如果发现提交版本不一致,出现错误
    

    (二)拉取

    在多人协作过程中,当自己完成了本地仓库中的提交,想要向远程仓库推送前,需要先获取到远程仓库的最新内容。使用如下命令
    git fetch origin master
    git pull origin master
    git fetch 和 git pull 之间的区别:
    git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。
    git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge 。

    从远程仓库拉取文件注意事项:
    如果本地仓库是手动创建,并不是从远程仓库克隆的,那么分支的关联包括远程仓库的历史记录都不会生成。需要手动配置。

    1- 建立和远程分支的关联(非必要)
    git branch --set-upstream-to=origin/master master
    2- 允许在历史记录不关联的情况下拉取文件
    git pull origin master --allow-unrelated-histories

    (三)解决合并冲突

    在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
    例如:
    A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需 要推送到远程仓库,此时B用户晚于A用户推送,故需要先拉取远程仓库代码,经过合并后才能推送代 码。在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并 冲突。

    解决:
    	① 先拉取代码
    	② 打开代码解决冲突
    	③ 再提交
        
        
    工作技巧: 推送要早,bug要少
    

    (四)从远程仓库克隆

    	Git 克隆的是该 Git 仓 库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你 执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
    	如果你本地没有仓库,希望从已有的远程仓库上复制一份代码,那么你需要 git clone 。
    	# 通过 https 协议,克隆 Github 上 git 仓库的源码
    	git clone https://github.com/lagou-zimu/repo1.git 
    	# 通过 ssh 协议,克隆 Github 上 git 仓库的源码
    	git clone git@github.com:lagou-zimu/repo1.git
    

    八、Idea中集成Git

    (一)在idea中配置Git

    image

    (二)Idea的Git操作

    1. 初始化并提交项目到远程仓库
    ① 初始化并提交项目到远程仓库 【项目leader操作】
    执行步骤:
    	1. 在GitHub/码云中创建远程仓库 
    	2. 将工程交给Git管理
    	3. 提交到本地仓库
    	4. 推送到远程仓库
    
    ② 在gitee上创建仓库
    
    ③ 将工程交给Git管理
    

    image

    ④ 配置忽略文件
    

    image

    ⑤ 提交到本地仓库
    

    image

    image

    ⑥ 推送到远程仓库
    

    image

    image

    2. 克隆远程仓库到本地【开发人员】
    ① 从远程仓库克隆
    

    image

    image

    (三)Idea中Git的常见操作【开发人员重点】

    ① 新增文件:新文件状态红色,未进入暂存区
    

    image

    加入git之后,红色变绿色,已经进入暂存区
    

    image

    ② 编辑文件:修改文件 变成蓝色
    正常编辑的文件默认放在暂存区,不需要再添加到暂存区
    

    image

    ③ 重置文件到修改前
    比如修订了某一文件,需要重置到修改文件之前的状态,选择文件,右键菜单:选择Git--->Revert
    重置后,文件颜色自动消失,说明已重置到修改之前的状态。
    

    image

    ④ 提交当前文件
    
    ⑤ 本地仓库推送到远程仓库
    操作步骤:
    	1. 推送前一定要先拉取远程仓库对应分支
    	2. 如果有冲突,先解决冲突,并提交到本地仓库 
    	3. 推送当前分支到远程仓库
    
    
    冲突:如果A、B两个分支都在操作同一文件。当A分支提交远程仓库之后,B分支再提交的话会产生冲突
    解决:先拉取,解决完冲突,再push
    

    image

    image

    image

    image

    再推送到远程仓库
    

    (四)分支操作

    操作步骤:
    	1. 创建分支
    	2. 切换分支执行操作
    	3. 执行合并操作,master合并dev
    	4. 同步远程仓库
    
    ① 创建分支
    

    image

    image

    ② 切换分支执行操作
    

    image

    ③ 执行合并操作(将dev分支合并到master分支)
    

    image

    image

    ④ 同步远程仓库
    

    image

    注意

    总结一下:本地仓库有文件,远程仓库也有文件,正确姿势:
    
    1,git remote add origin 远程仓库地址
    
    2,git pull origin master --allow-unrelated-histories
    
    3,git branch --set-upstream-to=origin/master master
    
    4,git push
    
  • 相关阅读:
    递归与尾递归总结
    JAVA基础——链表结构之双端链表
    JAVA基础——链表结构之单链表
    JAVA基础——集合Iterator迭代器的实现
    JAVA基础——Date和Calendar类
    JAVA基础——Native关键字
    Java基础——从数组到集合之间关键字的区别!!!!
    JAVA基础——集合类汇总
    Web前端性能优化——提高页面加载速度
    vue 与 angular 的区别
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/15315305.html
Copyright © 2020-2023  润新知