Git工具学习

版本控制

什么是版本控制?

Reversion Control是开发时用于管理对文件,目录或者工程等等内容的修改历史,方便查看更改历史记录,备份以便恢复以前版本的软件工程技术。多人开发必然使用版本控制!

主流的版本控制工具

  • 本地版本控制:记录文件每次更新,对每个版本进行快照或者是记录补丁文件,适合个人用
  • 集中版本控制(SVN) :所有的版本数据保存在服务器上,开发者从服务器上同步更新或上传自己的修改,可能会出现以下问题:
    1. 多人同时提交修改或修改起冲突
    2. 而且用户本地只有自己以前所同步的版本,不联网则连接不到服务器,无法切换版本或在某个分支工作
    3. 加之所有数据都存储在单一的服务器上,若是该服务器损坏(当然可以定期备份)
  • 分布式版本控制(Git) :所有的版本信息仓库全部同步到本地的每个用户,可以在本地查看所有版本历史,由于每个用户保存的是所有的版本数据,只要有一个用户的设备没有就可以恢复所有的数据,但这增加了本地存储空间的占用
  • Git和SVN(Subversion)区别:
    • 前者是分布式版本控制,没有中央服务器,每个用户的电脑都是一个完整的版本库,只需要互相推送自己的修改,Git可以直接看到修改的文件和文件
    • 后者是集中版本控制,版本库放置在中央服务器,对网络带宽要求较高

Git的历史

  • 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

  • Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991 - 2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

  • 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。也就是后来的 Git!

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

Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!

Git配置

打开 git官网 https://git-scm.com/ ,下载git对应操作系统的版本。

所有东西下载慢的话就可以去找镜像!

  • 官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/
  • Git Bash:Unix与Linux风格类似,使用最多
  • Git CMD:Windows风格的命令行
  • Git GUI:图形界面的Git,不建议初学者使用,先熟悉常用命令

后期使用Git Bash频率更高,所以要熟悉基本的Linux命令

  • 改变目录
    cd
  • 回退上一级目录
    cd ..
  • 显示当前所在目录路径
    pwd
  • 清屏
    clear
  • 列出当前目录下的所有文件,只不过ll所列内容更为详细
    ls /ll
  • 新建一个文件(带扩展)
    touch
  • 删除一个文件(带扩展)
    rm
  • 新建一个目录(文件夹)
    mkdir
  • 删除一个文件夹
    rm -r and rm -rf /(递归删除,不要在Linux尝试)
  • 移动文件
    mv 文件名(带扩展) 目的目录
  • 初始化终端
    reset
  • 查看历史命令行
    history
  • 推出终端
    exit
  • 注释
    #

Git配置

  • 查看配置
    git -config -l
  • 查看系统或者本地配置
    git config --system/global --list
  • 系统配置默认在Git安装目录下
  • 本地配置默认在c盘当前登录用户目录下

Git工作原理

Git分区

  • 工作目录:存放项目代码的地方
  • 暂存区:临时存放改动,事实上也是一个文件,保存即将提交到文件列表信息
  • 仓库区(或本地仓库):就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • 远程仓库:托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

工作流程

  1. 在工作目录中添加、修改文件;
  2. 将需要进行版本管理的文件放入暂存区域;
  3. 将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

Git项目搭建

对工作区开始进行版本控制

  • 本地仓库初始化
bash 复制代码
git init
  • 克隆远程仓库
bash 复制代码
git clone [url]

Git相关命令

  • 状态:
    • Untracked : 未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制。通过 git add 状态变为 Staged
    • Unmodify : 文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,而变为 Modified。如果使用 git rm 移出版本库,则成为 Untracked 文件
    • Modified : 文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过 git add 可进入暂存 staged 状态,使用 git checkout 则丢弃修改过,返回到 unmodify 状态,这个 git checkout 即从库中取出文件,覆盖当前修改!
    • Staged : 暂存状态。执行 git commit 则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为 Unmodify 状态。执行 git reset HEAD filename 取消暂存,文件状态为 Modified
  • 查看状态
bash 复制代码
- 指定文件
git status [文件名]
- 所有文件
git status
  • 提交修改
bash 复制代码
git commit -m "提交信息"
  • 忽略文件
    • 有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
    • 在主目录下建立".gitignore"文件,此文件有如下规则:
      1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
      2. 可以使用Linux通配符。例如:星号代表任意多个字符,问号(?)代表一个字符,方括号(abc)代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
      3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
      4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
      5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
    • 在.gitnore文件下设置,不会在git的管控下
bash 复制代码
*.txt # 批量txt文件被忽略
temp/ # temp目录下所有文件和目录
/temp # temp以上的所有文件和目录