Git入门——(一)基本概念及原理

柔情痞子 提交于 2020-01-13 07:53:46

基本概念及原理

关于版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 工作中我们对项目代码进行版本控制,但实际上,我们可以对任何类型的文件进行版本控制。

本地版本管理系统

RCS是本地版本管理系统中最流行的一种,解决人们采用复制项目或文件的古老方式来管理文件的问题。
它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中式版本管理系统

集中式版本管理系统最常用的如Subversion,解决开发者协同工作的问题;
这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

  • 优点:
    1. 可以了解项目中其他人做了什么
    2. 管理员可以掌控每个开发者的权限
    3. 轻松管理一个CVCS。
  • 缺点:中央服务器单点故障时,就无法协同工作。如果磁盘损坏,那将是毁灭性的灾难。

分布式版本管理系统

分布式版本管理系统(DVCS)面世,就是为了解决上述问题。这类系统如 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
分布式版本控制

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

Git入门

Git发展简史及特性

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)司令副官的工作流程。

Git工作原理和流程

工作原理
  • 直接记录快照,而非差异比较。
    • 1. 存储每个文件与初始版本的差异;
    • 2. 存储项目随时间改变的快照,Git 对待数据更像是一个快照流
  • 近乎所有操作都是本地执行。
    因为Git克隆操作在客户端保存了整个代码仓库,包括了历史版本提交,而不只是最新版本代码。
  • Git保证完整性
    存储时计算校验和,然后引用校验和。该种机制叫做SHA-1 散列机制,是基于Git中文件的内容和目录结构计算出的。
  • Git一般只添加数据。
    一旦你提交快照到 Git 中,就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。
  • 三种文件状态
    已提交(committed)、已修改(modified)和已暂存(staged)。已提交表示数据已经安全的保存在Git本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。由此引出三个工作区:工作目录、暂存区、Git仓库。
    工作目录、暂存区域以及 Git 仓库

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。

工作流程
  • 基本的Git工作流程如下:
    • 1. 在工作目录中修改文件;
    • 2. 暂存文件,将文件的快照放入暂存区域;
    • 3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git与svn的区别

  • Git 是分布式的,SVN 不是
  • Git 把内容按元数据方式存储,而 SVN 是按文件
  • Git 分支和 SVN 的分支不同
  • Git 没有一个全局的版本号,而 SVN 有
  • Git 的内容完整性要优于 SVN

    命令行模式

    命令行模式支持git所有命令。各种GUI工具提供的功能只是个子集,包括IDEA中集成的Git功能、小乌龟TorterseGit。学会了命令行模式,上手各种GUI工具也就不在话下。

    在IntelliJ IDEA中操作Git

    安装Git

    在各系统上不同方式安装Git(略)
    参考链接Git安装

初次运行前配置

  • 三层级别:git配置分三个级别的配置,每一级别覆盖上一级别的配置。
    • /etc/gitconfig 文件:包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
    • ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
    • .git/config :针对该仓库。

在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。

  • 配置用户信息、文本编辑器等
  • 检查配置信息:重复的变量名最后一个生效。
# 配置列表检查:
$ git config --list   
# 单项配置检查:
$ git config <key>

如何寻求帮助

git help   git --help

常用应用场景整理

bash命令方式

  1. 全局配置
git config --global user.name "userName"
git config -- global user.email "yourMail"
  1. 创建新版本库
git clone <http://repository.remote.project.git>
cd <project 项目根目录>
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master       -u:第一次push到远程时,可不加;默认远程origin
  1. 已存在本地项目推送至远程
cd existing_folder
git init        在existing_folder目录文件夹下创建本地版本库
git remote add origin http://ip:port/project.git
git add .
git commit -m "提交日志"
git push -u origin master
  1. 将已存在的本地Git版本库分支与tag推送远程
cd existing_repo
git remote rename origin old-origin
git remote add origin XXX.git
git push -u origin --all
git push -u origin --tags
  1. 基于当前分支创建目标分支并推送至远程
git checkout -b dev
git pull
git branch -a       # 查看所有分支
git status
git add .   # 添加全部文件到暂存区 或者添加指定文件到暂存区;
git commit -m "提交日志"    # 提交并记录日志信息;
git push origin dev     # push到远程dev分支;

详细Git命令使用及说明请参考Git入门——(二)常用命令及应用

常见问题

账号密码操作

解决方案:

  1. 如果账号密码有变动 用这个命令 git config --system --unset credential.helper 重新输入账号密码 应该就能解决了
  2. 如果用了第一个命令 还不能解决问题那么 用这个命令: git config --global http.emptyAuth true
  3. 记住密码命令: 避免需要多次输入密码;
    git config --global credential.helper store
  4. ssh 与 https模式 https模式需要输入账号密码;ssh本地存储私钥和公钥;

命令相关问题

  1. git clone远程项目(此时本地分支与远程分支是绑定的。并且master分支权限控制,不可以push。)
    参考Git入门——(二)常用命令及应用

GitHub访问速度慢的解决方法

  •   1、vpn
  •   2、绕过dns解析,在本地直接绑定host。打开dns查询工具网站http://tool.chinaz.com/dns 查询域名github.global.ssl.fastly.NET解析获取其IP.
  •   3、在C:\Windows\System32\drivers\etc\hosts文件中加入 151.101.88.249 github.global.ssl.fastly.Net
    http://ipaddress.com/ip_lookup/
    151.101.229.194  
    203.208.39.99  assets-cdn.github.com
    74.125.23.190 dl-ssl.google.com
    173.194.127.200 groups.google.com
    192.30.252.131 github.com
    185.31.16.185 github.global.ssl.fastly.net
    74.125.128.95 ajax.googleapis.com

附录及参考

菜鸟教程-Git
Git官方文档中文版

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!