Git 配置

定制你的 Git 环境。

每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

  1. /etc/gitconfig 文件 : 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  2. ~/.gitconfig 或 ~/.config/git/config 文件 :只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。(在 mac 下面我们可以直接操作的就这个文件)
  3. 当前使用仓库的 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 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。

    $ git add <参数>   :  将文件添加进暂存区域(如果文件没有被跟踪,执行 git add <file> 可以将文件变为已跟踪状态)
    
     $ git add * 
     $ git add *.c
     $ git add <file>
    
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 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 后却什么也没有,就是这个原因。

results matching ""

    No results matching ""