Learn Git One

时间:2022-05-06
本文章向大家介绍Learn Git One,主要内容包括Git 基本原理、Git 文档库、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

Git 基本原理

Git 属于分布式版本控制系统( Distributed Version Control System,简称 DVCS )之一。客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。这样就可以指定和若干不同的远端代码仓库进行交互,你就可以在同一个项目中,分别和不同工作小组的人相互协作。Git 只关心文件数据的整体是否发生变化,而大多数其他版本管理系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接(基本原理来源于《Pro Git》中文翻译版)。 对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。

  • 已提交表示该文件已经被安全地保存在本地数据库中了。(git commit )
  • 已修改表示修改了某个文件,但还没有提交保存。(修改本地文件)
  • 已暂存表示把已修改的文件放在下次提交时要保存的清单中。(通过git add 来转移到已暂存状态)Git 配置 Git的配置文件有三个配置文件:
  • 本地git仓库下面的config文件,在.git/config
  • 全局性的git配置文件,在用户home目录~/.gitconfig,对应的git config参数是git config —global
  • 系统级别的git配置文件,在/etc/gitconfig,对应的git config的参数是git config —system。Git Config File 如果在.git/config的配置会优于全局性的git,全局性的git优于系统级别的git。 可以通过如下命令来看相应的参数:git config --system -l git config --global -l

也可以设置一些常用的用户名和邮箱,这样在你每次提交代码时都会显示你的user.name.配置如下:

git config user.name "brian"
git config user.email "test@outlook.com"
# 以上配置的是本地仓库的配置文件,当然你可以指定不同的级别的配置文件。
git config --global user.name "brian"
git config --global user.email "test@outlook.com"

git config --system user.name "brian"
git config --system user.email "test@outlook.com"

Git alias

有时Git命令太长,所以git提供了一个友好的别名方式来替代较长的git命令。例如:

# 格式 
# git config alias.别名 真实指令和选项
# 其中alias配置是git 后面的别名,“真实指令和选项”代表git 后面需要跟的指令。
git config alias.l "config -l"
#删除别名可以用
git config --unset alias.l
# 修改默认编辑器
git config [--global] core.editor emacs
#--global是可选的,core是代表git为core模块下。我们看一下git基本的配置信息:
[user]
	email = brian.lv@outlook.com
	name = lvhaifeng
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
[alias]
	l = config -l --global
[remote "origin"]
	url = git@gitlab.com:****.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

Git 文档库

Git将文件和文件夹分为以下三种方式:

  • tracked 被追踪的,默认文件和文件夹下都是tracked的,都已加入到git版本库里了。
  • ignored 忽略的,即git会忽略该文件和文件夹不会被检查。在.gitignore配置。
  • untracked 不被追踪的,新创建的文件和文件夹都是untracked。 先来讲一下ignore的一些规则吧,其中*代表所有通配符,!代表排除具体文件。Git rm/reset使用说明 在使用Git add .命令时,会把工程中所有未跟踪的文件添加到git索引中,如果此时意识到有些文件不需要commit时,可以把文件从索引中删除: git rm —cached + 文件名 或者 git reset HEAD + 文件名 那么这两者有什么区别呢? 注意:如果仓库中还没有加入任何文件,即执行git init之后,还没有执行git commit命令。那么就需要使用:git rm --cached 文件名

如果仓库中已经有一些文件,也就是执行过git commit需要使用:

git reset HEAD 文件名