git 配置笔记
XMit Lv3

起步

初次运行 git 前的配置

Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

/etc/gitconfig

系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。

~/.gitconfig

用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。

.git/config

当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

用户信息

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

1
2
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

git 基础

取得项目的 git 仓库

在工作目录初始化新仓库

1
$ git init

从现在仓库克隆

git clone 克隆仓库的命令格式为 git clone [url]

1
$ git clone git://github.com/schacon/grit.git

这会在当前目录创建一个名为grit的目录,在克隆地时候,自己定义要新建项目的目录名称时,可以在上面命令末尾指定新的名字。

1
$ git clone git://github.com/schacon/grit.git mygrit

记录每次更新到仓库

检查当前文件状态

git status

1
2
3
$ git status
On branch master
nothing to commit, working directory clean

跟踪新文件

git add

1
$ git add README

此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:

1
2
3
4
5
6
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: README

暂存已修改文件

要暂存已修改文件,需要运行 git add 命令

忽略某些文件

创建一个名为.gitignore 的文件,列出要忽略的文件模式

文件 .gitignore 的格式规范如下:

  • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
1
2
3
4
5
6
7
8
9
10
11
12
13
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt

查看已暂存和未暂存的更新

git status 列出了修改过的文件。

未暂存的文件更新了哪些部分,可以用 git diff 命令。

已经暂存文件 - 上次提交时的快照之间的差异,git diff --cached(1.6.1 及更高版本还允许使用 git diff --staged)

提交更新

git commit

1
$ git commit

这种方式会启动文本编辑器以便输入本次提交的说明.

另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:

1
$ git commit -m "本次提交的说明文字。"

跳过使用暂存区域

git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤

1
$ git commit -a -m 'added new benchmarks'

移除文件

手工移除文件时:

1
2
3
4
5
6
7
8
9
10
$ rm grit.gemspec
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

deleted: grit.gemspec

no changes added to commit (use "git add" and/or "git commit -a")

git rm 记录此次移除文件,提交时,该文件不会纳入版本控制。

1
2
3
4
5
6
7
8
$ git rm grit.gemspec
rm 'grit.gemspec'
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

deleted: grit.gemspec

想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除

1
$ git rm --cached readme.txt

移动文件

在 Git 中对文件改名

1
$ git mv file_from file_to

查看提交历史

git log

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面

git log 选项:

  • -p 按补丁格式显示每个更新之间的差异。
  • --word-diff按 word diff 格式显示差异。
  • --stat显示每次更新的文件修改统计信息。
  • --shortstat只显示 –stat 中最后的行数修改添加移除统计。
  • --name-only仅在提交信息后显示已修改的文件清单。
  • --name-status显示新增、修改、删除的文件清单。
  • --abbrev-commit仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
  • --relative-date使用较短的相对时间显示(比如,“2 weeks ago”)。
  • --graph显示 ASCII 图形表示的分支合并历史。
  • --pretty使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
  • --oneline``--pretty=oneline --abbrev-commit 的简化用法。
  • -2 则仅显示最近的两次更新;

撤消操作

修改最后一次提交

1
$ git commit --amend

取消已经暂存的文件

1
git reset HEAD <file>

取消对文件的修改

1
$ git checkout -- benchmarks.rb

远程仓库的使用

查看当前的远程库

git remote

它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库

-v 选项,显示对应的克隆地址

1
2
3
$ git remote -v
origin git://github.com/schacon/ticgit.git (fetch)
origin git://github.com/schacon/ticgit.git (push)

添加远程仓库

要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]

1
2
3
4
5
6
$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务