Git系列-开篇
Posted Chris_166
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git系列-开篇相关的知识,希望对你有一定的参考价值。
关于Git的介绍,这里就不多说了,可以网上搜索或者参见Git入门(一)——没有版本控制意识的程序员不是一个好的程序员_Chris_166的博客-CSDN博客
目录
本系列主要围绕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配置变量存储在三个不同的位置:
/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或 超级用户权限来修改它。)
~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。
当前使用仓库的 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系列-开篇的主要内容,如果未能解决你的问题,请参考以下文章