Git

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

1、版本控制

  • 概念

    • 用于管理多人协同开发的技术

    • 版本控制是在我们开发的过程中用于管理我们的文件、目录或工程等内容的修改历史,方便查看历史更改记录,备份以便恢复以前的版本的软件工程技术。

  • 优点

    • 实现跨区域多人协同开发

    • 追踪和记载一个或者多个文件的历史记录

    • 组织和保护源代码和文档

    • 统计工作量

    • 并行开发,提高开发效率

    • 跟踪记录整个软件的开发过程

    • 减轻开发人员的负担,节省时间,同时降低人为错误

  • 常见的版本控制工具

    • Git

    • SVN(Subversion):版本控制

    • CVS(Concurrent Versions System):并发版本系统

    • VSS(Microsoft Visual Sourcesafe)

    • TFS(Team Foundation Server):团队基本服务器

    • Visual Studio Online

  • 版本控制分类

    • 本地版本控制

      • 记录文件每次的更新,可以对每个版本做一个快照或是记录补丁文件,适合个人用,如RCS

      • 缺点:

        不能实现团队合作

    • 集中版本控制:SVN

      • 所有的版本控制都保存在服务器上,协同开发者从容器上同步更新或上传自己的修改

      • 缺点:

        • 所有的版本数据都在服务器上,用户的本地只有自己以前所同步的版本,如果不联网的话,用户看不到历史版本,也无法更新最新版本或在不同分支合作

        • 所有的数据都保存在单一服务器上,有很大的数据丢失的风险

    • 分布式版本控制:Git

      • 所有的版本信息仓库全部同步到用户本地上,这样就可以在本地查看所有的历史版本,可以离线在本地提交,只需在联网时push到相应的服务器或其他用户那里

      • 只要有一个用户的数据没有问题就可以恢复所有的数据

      • 缺点:

        增加了本地存储空间的占用

  • Git和SVN区别

    • SVN

      • 集中式版本控制系统

      • 版本库集中放在中央服务器

      • 联网才能工作

      • 协同工作时,首先从中央服务器上获得最新的版本,完成工作后,把最新的版本推送到中央服务器,对方从服务器上下载新版本,才能看到修改

    • Git

      • 分布式版本控制系统

      • 没有中央服务器,每个人的电脑就是版本库

      • 不需联网

      • 协同工作时,若修改了文件,只需把新版本推送给对方,对方就可以看到修改,无需推送到服务器

 

2、Git的历史

  • Linux 和 Git之父:李纳斯·托沃兹

  • 李纳斯·托沃兹 创造了Linux系统后,在1991 - 2002 年期间,整个Linux内核维护工作都花在了提交补丁和保存归档这些繁琐的事情上。

  • 2002年,整个项目组开始启用一个专门的分布式版本控制系统,BitKeeper来管理和维护代码

  • 2005年,Linux内核开源社区和BitKeeper的公司合作关系结束后,李纳斯·托沃兹用了两周的时间开发出了自己的版本系统,也就是Git

 

3、Git的安装及配置

  • 下载

  • 卸载:(以前安装过可卸载)

    • 控制面板,卸载

    • 清除环境变量

  • 安装

    • 无脑 next 即可

    • 注意两点:

      • 安装地址,尽量不要安装到C盘

      • 有个文档编辑器,可选择自己电脑上安装的编辑器,也可以默认不做修改

    • 安装成功后

      • 在开始菜单中会有Git项

      • 在任意文件夹下点击鼠标右键,也可以看到Git的程序

    • Git Bash:Unix与Linux风格的命令行,使用最多

    • Git CMD:Windows风格的命令行

    • Git GUI:图形界面的git

     

  • 环境配置

    • 环境变量的配置是为了全局使用

    • 安装Git成功后默认系统会自动在环境变量中配置

     

4、常用的Linux命令

  • cd :改变目录

  • cd... :回退到上一个目录

  • pwd :显示当前所在的目录路径

  • ls :列出当前目录中的所有文件

  • touch :新建一个文件

  • rm :删除一个文件

  • mkdir :新建一个文件夹

  • rm -r :删除一个文件夹

  • mv :移动文件,mv index.html test,把index.html移动到test文件夹下

  • reset :重新初始化终端/清屏

  • clear :清屏

  • history :查看命令历史

  • exit :退出

  • #表示注释

 

5、Git配置

  • git config -l :查看git的全部配置

  • git config --system --list :查看系统的配置

    系统配置的文件在:安装Git的目录下的 Gitetcgitconfig里

  • git config --global --list :查看用户自己的配置

    用户自定义的配置的文件在:C:Users用户名下的 .gitconfig 文件里

  • 设置自己的用户名和邮箱(必须要做)

    • git config --global user.name "用户名"

    • git config --global user.email 邮箱

 

6、Git工作区域

  • Git 的工作区域

    • 工作目录:(Working Directory)

      • 项目在电脑上存放的目录

    • 暂存区:(Stage/index)

      • 用于临时存放项目的改动

      • 只是一个文件,保存即将提交的文件列表信息

    • 资源库(本地仓库):(Repository或Git Directory)

      • 安全存放数据的位置,里面有提交的所有版本的数据

      • HEAD指向最新放入仓库的版本

    • 远程的Git 仓库:(Remote Directory)

      • 托管代码的服务器

  • 工作区域图如下:

  • Git 的工作流程

    • 1、在工作目录中添加、修改文件

    • 2、将需要进行版本管理的文件添加到暂存区

    • 3、将暂存区域的文件提交到git仓库

 

7、Git项目搭建

  • 本地仓库搭建

    • 创建全新的仓库

      在需要用Git 管理的项目的根目录中执行以下语句:git init

      执行后文件夹中多出了一个 .git 文件夹,关于版本的所有信息都在这个文件夹里

  • 克隆远程仓库

    • 将远程仓库中的镜像完全复制一份到本地

    • 在Gitee或者GitHub上复制这个项目的url

    • 输入以下命令并运行,即可

      git clone url

 

8、Git文件操作

  • 文件的4种状态

    • Untracked:未跟踪

      • 此文件在文件夹中,但是没有被git管理

      • 通过 git add files 命令变成 Staged状态

    • UnModify:文件已经入库,未修改

      • 版本库中的文件快照内容与文件夹内容完全一致

      • 若此时文件被修改,状态变为 Modify

      • 如果使用 git rm 命令移除版本库,状态变成Untracked

    • Modify:文件已修改

      • 通过 git add files 可以变成Staged状态

      • 通过 git checkout 可丢弃修改,退回到UnModify状态

    • Staged:暂存状态

      • 执行 git commit 将修改同步到库中,此时库中的文件和本地的文件又变为一致,转变成 UnModify 状态

      • 执行 git reset HEAD filename 取消暂存,文件变成Modify状态

  • 查看指定文件状态:git status filename

  • 查看所有文件状态:git status

  • 把文件添加到暂存区中:git add .

  • 把文件提交到本地仓库中:git commit -m "注释信息"

  • 忽略文件

    • 有时候不想把某些文件纳入到版本控制中,比如数据库文件、临时文件、设计文件等等,在主目录下建立 “.gitignore” 文件,此文件的规则如下:

      • 1、文件中的空行将被忽略

      • 2、以#开头的内容将被忽略

      • 3、可以使用Linux通配符:

        • *代表任意多个字符

        • ? 代表一个字符

        • []代表可选字符的范围

        • {}代表可选的字符串范围

      • 4、! 后面跟的内容将不会被忽略

      • 5、/ + 文件名,要忽略的文件在此目录下,而子目录中的文件不会被忽略

      • 6、文件名 + /,要忽略的是此目录下该名称的子目录

        //忽略所有以 .txt结尾的文件
        *.txt
        //lib.txt不被忽略
        !lib.txt
        //忽略和build在同一级目录下的其他文件
        /build
        //忽略build目录下的所有文件
        build/

 

9、码云的使用

  • 三种码云

    GitHub、Gitee、公司自己搭建的Github

  • Github 和 Gitee的注册和使用

    • 1、注册账号,完善个人信息

    • 2、设置本机绑定SSH公钥,实现免密码登录

      • 不设置免密码登录的话,每次提交到远程仓库都需要密码

      • 使用命令行生成公钥

        • Github:ssh-keygen -t rsa -C "邮箱地址",一路回车到生成密钥

        • Gitee:ssh-keygen -t rsa,一路回车到生成密钥

        • 生成的文件在:C:Users用户名.ssh中,有两个文件

          • id_rsa

          • id_rsa.pub

        • 把公钥配置在码云中

          打开.ssh文件中的id_rsa.pub,把文件中的内容复制到Github或者Gitee里的

          个人信息设置 ---> 公钥设置 ---> SSH公钥设置中

    • 3、创建远程仓库

 

10、关于Git分支说明

  • Git分支中常用指令

    • 列出所有本地分支:git branch

    • 列出所有远程分支:git branch -r

    • 新建一个分支,但依然停留在当前分支:git branch branchName

    • 新建一个分支,并切换到该分支:git checkout -b branchName

    • 合并分支到当前分支:$ git merge branchName

    • 删除分支:$ git branch -d branchName

    • 删除远程分支:

      $ git push origin --delete branchName

      $ git branch -dr branch/remote

 

Git大全

Git大全

原文地址:https://www.cnblogs.com/LittleSkinny/p/13697069.html