Git系列-开篇

Posted Chris_166

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git系列-开篇相关的知识,希望对你有一定的参考价值。

关于Git的介绍,这里就不多说了,可以网上搜索或者参见Git入门(一)——没有版本控制意识的程序员不是一个好的程序员_Chris_166的博客-CSDN博客

目录

1. 项目的四个工作区域

2. 文件的四个状态

3. Git配置 

3.1 SSH配置

3.2 生成SSH公钥

3.3 git config


本系列主要围绕Git官网文档(Git - Documentation)介绍一些工作中常用的Git知识

1. 项目的四个工作区域

Git项目拥有如上4个工作区域(官网上没有Remote,称之为“Git项目拥有的3个阶段”)

1. WorkSpace(工作区):是对项目的某个版本独立提取出来的内容,即本地磁盘中存放项目代码的地方;
2. Index/Stage(暂存区):它只是一个文件,保存了本次改动或者说是下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”;
3. Repository(Git 仓库目录):是 Git 用来保存项目的元数据和对象数据库的地方。注意上面的Stage存放的提交的文件列表的信息,这里是保存的修改的具体内容
4. Remote(远程仓库):托管代码的服务器

 注意上图中的工作区域转换的条件,这些条件已经把转换关系描述的很清楚了,这些条件也就是我们工作中敲的git命令

2. 文件的四个状态

上面第1章介绍的是Git项目的工作区域,这里介绍的是Git项目WorkSpace区域下的文件状态。

工作区下的每一个文件都不外乎这两种状态:已跟踪(tracked) 或 未跟踪(untracked)
上图中的tracked包括Unmodified、Modified、Staged。初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们

下面再对每个状态做下简介:

文件状态说明
Untracked未跟踪。此文件在文件夹中, 但并没有加入到git库, 不参与版本控制
Unmodified未修改。此文件已经入库,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件如果被修改, 则变为Modified; 如果使用git rm移出版本库, 则成为Untracked文件
Modified已修改。仅仅是对这个文件进行了修改, 并没有进行其他的操作。 这种类型的文件通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged暂存状态。执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态,执行git reset HEAD filename取消暂存, 文件状态为Modified

下图是网上对于文件状态转换图,生动形象,可以对上面的官网图进行补充下。

 

3. Git配置 

使用Git前先来配置下Git环境。Git仓库的下载有https和ssh两种访问方式,这里介绍ssh的配置。

远程仓库存储于https://github.com/

3.1 SSH配置

1. 登录https://github.com/配置SSH公钥

Settings -> SSH and GPG keys -> SSH keys / Add new

(1) Title:任意取一个公钥名 

(2) Key:将~/.ssh/id_rsa.pub(或者自定义的其它名字)公钥文件的内容粘贴到文本区

fanff % pwd
/Users/fanff/.ssh
fanff % ls -al
total 24
drwx------   5 fanff  staff   160  7  8  2021 .
drwxr-xr-x+ 52 fanff  staff  1664  4  1 19:32 ..
-rw-------   1 fanff  staff  2610  7  8  2021 id_rsa
-rw-r--r--@  1 fanff  staff   575  7  8  2021 id_rsa.pub
-rw-r--r--   1 fanff  staff   797  2 28 17:47 known_hosts

如果本地没有id_rsa.pub,请跳转至本篇的"3.2 生成SSH公钥"章节。没有配置过的都是需要新生成公钥的。

3.2 生成SSH公钥

(由于我本地配置过了,懒得重新生成,这里直接摘取官网的配置说明)

通过运行 ssh- keygen 程序来生成秘钥对。

$ ssh-keygen -o
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa): Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is: d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local

首先 ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。 如 果你不想在使用密钥时输入口令,将其留空即可。 然而,如果你使用了密码,那么请确保添加了 -o 选项,它会 以比默认格式更能抗暴力破解的格式保存私钥。 你也可以用 ssh-agent 工具来避免每次都要输入密码。

关于在多种操作系统中生成 SSH 密钥的更深入教程: https://help.github.com/articles/generating-ssh-keys。

3.3 git config

上面只是配置了服务端,这小节对本地进行配置。本地git环境安装后只需要配置一次,以后git程序升级也会保留配置信息。

Git配置变量存储在三个不同的位置:

  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或 超级用户权限来修改它。)

  2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。

  3. 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 --local 选 项让 Git 强制读写此文件,虽然默认情况下用的就是它。 (当然,你需要进入某个 Git 仓库中才能让该选 项生效。)

每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

1. 查看所有的配置及这些配置所在的文件

git config --list --show-origin

2. 用户信息配置(必须项)

配置你的用户名和邮箱。
每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改。只有配置了用户名和邮箱才知道这个提交是你的。

$ git config --global user.name "Chris"
$ git config --global user.email "Chris@example.com"

由于使用了 --global 选项,所以该命令只需要运行一次,后面的git提交都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置

配置完之后可以通过如下命令来查看

fanff ~ % git config user.name
fanff ~ % git config user.email
fanff ~ % git config --list

删除某项配置信息

git config --global --unset user.email

以上是关于Git系列-开篇的主要内容,如果未能解决你的问题,请参考以下文章

Centos-610-Jenkins-CI系列开篇

持续集成开篇之代码发布流程

算法系列教程01 - 开篇

Grafana 系列-统一展示-1-开篇

OpenGL ES 系列之开篇

[eShopOnContainers 学习系列] - Index - 开篇索引