Git 配置
定制你的 Git 环境。
每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
- /etc/gitconfig 文件 : 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
- ~/.gitconfig 或 ~/.config/git/config 文件 :只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。(在 mac 下面我们可以直接操作的就这个文件)
- 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
Git 工作目录中文件有三种状态
你的文件可能处于其中之一:
- 已修改(modified): 修改了文件,但还没保存到数据库中。
- 已暂存(staged): 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交(committed): 数据已经安全的保存在本地数据库中。
工作目录下的每一个文件都不外乎这两种状态:已跟踪(git管理)或未跟踪(非git管理)
已跟踪的文件:是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。
未跟踪:工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。
初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
在项目文件夹中新创建的文件是处于未跟踪状态。
Git 文件状态和文件的生命周期
三个区域
- 工作目录 (working Directory): 对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。 ———— 我们实际可以看到的文件
- 暂存区域 (Staging Area) : 是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。
- Git 仓库 (.git directory) : Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
(暂存区域 (Staging Area) 和 Git 仓库 (.git directory) 都位于项目的 .git 文件夹中)
工作目录 (working Directory) 是我们实际可以看到的文件。
基本的 Git 工作流程如下:
- 在工作目录中修改文件。
暂存文件,将文件的快照放入暂存区域。
$ git add <参数> : 将文件添加进暂存区域(如果文件没有被跟踪,执行 git add <file> 可以将文件变为已跟踪状态) $ git add * $ git add *.c $ git add <file>
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
$ git commit -m "<文件修改的记录信息>"
展示了基本的gitworkflow
我们可以使用 $ git status
来查看项目中文件所处的状态。
$ git status
On branch master
nothing to commit, working directory clean
# 工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。
$ touch git.md # 创建一个文件
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
# 没有被追踪文件:
(use "git add <file>..." to include in what will be committed)
# 使用 git add <file>...(可以同时添加多个文件) 去添加到暂存区。那么 file 将能够被提交到版本控制。
git.md
nothing added to commit but untracked files present (use "git add" to track)
# 呈现的文件是没有被追踪的 (使用 $ git add 可以追踪文件 )
$ git add git.md # 指令没有任何提示
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
# 使用 $ git reset HEAD <file>... 可以从将文件从暂存区移除。
new file: git.md
# 显示文件已经添加到暂存区
$ git commit -m "创建了 git.md 文件。" # 提交此时此刻的版本到版本控制
[master 02e3216] 创建了 git.md 文件。
1 file changed, 0 insertions(+), 0 deletions(-)
# commit 时候的一些修改信息
create mode 100644 git.md
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ vi git.md
$ 在英文输入法状态下 按 i 键
$ 输入 Git is a very powerful tool
$ 按 shift + ;键 输入 wq 后回车
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
# 使用 $ git push 去发布你当前的 commit
Changes not staged for commit:
# 文件的修改不会被缓存暂存到这个 commit
(use "git add <file>..." to update what will be committed)
# 使用 $ git add <file>... 去更新暂存区,文件的修改就能够被提交
(use "git checkout -- <file>..." to discard changes in working directory)
# 使用 $ git checkout -- <file>... 可以丢弃这次在工作区的修改
modified: git.md
no changes added to commit (use "git add" and/or "git commit -a")
(
使用 git add 或者 git commit -a
git commit -a == git add + git commit
)
$ git add git.md # 修改后的文件添加到缓存区
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
# 使用 $ git push 去发布你当前的 commit
Changes to be committed:
# 更改提交
(use "git reset HEAD <file>..." to unstage)
# 使用 $ git reset HEAD <file>... 可以从将文件从暂存区移除。
modified: git.md
$ git commit -m "修改了 git.md"
[master 901e627] 修改了 git.md
1 file changed, 1 insertion(+)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
# 使用 $ git push 去发布你当前的 commit
nothing to commit, working tree clean
diff
$ git diff # 查看尚未暂存的文件更新了哪些部分(看暂存前后的变化)
$ git diff --cached # 查看已暂存的将要添加到下次提交里的内容(已经暂存起来的变化 --staged 和 --cached 是同义词 )
git diff --staged == git diff --cached
git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。