Learn Git One

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 文件名

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏测试驿栈

JProfiler简明使用教程

 JProfile是一款性能瓶颈分析工具,监控粒度可以细化到某一个类包,堪称神器!我安装了一下9.11的版本,并简单说说使用方法。

1.4K3
来自专栏编程心路

Github学习文档-3

学完这些基础的 Git 命令,你便可以一个人在 GitHub 上玩耍。Git 的命令上和 Linux 的命令操作有很多的相同之处,比如文件操作这一块吧,用 Gi...

1812
来自专栏河湾欢儿的专栏

tortoisegit安装与github上传

git相关概念 如果没有版本控制? 备份多个版本,费空间 难于恢复之前的版本 容易引发bug 解决代码冲突困难

912
来自专栏杨逸轩 ' sBlog

git常用命令总结

1879
来自专栏Samego开发资源

自动化运维之Fabric

2054
来自专栏云计算教程系列

如何使用Git:参考指南

开发人员和开源软件维护人员团队通常通过支持协作的分布式版本控制系统Git来管理他们的项目。

1064
来自专栏北京马哥教育

软件测试工程师必知必会Linux命令

Linux系统有着众多的优点,比如开源、非商业版本免费、多任务多用户操作,因此Linux系统在非桌面领域占有压倒性的市场份额。对于互联网技术工作者来说,掌握常用...

42613
来自专栏决胜机器学习

SVN版本控制拾遗

SVN版本控制拾遗 (原创内容,转载请注明来源,谢谢) 一、概念 仓库(repository)是代码总的存放的地方,工作副本(working copy)的每个开...

39011
来自专栏java思维导图

快速了解 Git 仓库

(1)Git是一个开源(Linus Torvalds 为了帮助管理 Linux 内核开发而开发)的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,与常...

752
来自专栏梧雨北辰的开发录

Git命令语法汇总

本文是在学习廖雪峰Git教程后对常用Git命令的使用总结,仅供在使用Git时方便查找。 ? 一、Git简介 Git是当前最为流行的分布式版本控制系统,尤其是...

3257

扫码关注云+社区

领取腾讯云代金券