Git安装
-
Debian/Ubuntu
# apt-get install git
-
Fedora
# yum install git (up to Fedora 21)
# dnf install git (Fedora 22 and later)
-
Windows系统
官网下载Windows系统的安装文件 -
MacOS
官网下载Mac OS的安装文件
Git配置说明
Git 提供了一个叫做 git config 命令,专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
- /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
- ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
- 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
-
Git用户信息配置
首先需要配置用户信息,每次 Git 提交时都会引用用户信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
-
Git文本编辑器配置
Git 需要你输入一些额外消息的时候,会自动调用一个外部文本编辑器给你用。默认会使用操作系统指定的默认编辑器,一般可能会是 Vi 或者 Vim。如果你有其他偏好,常用的:Emacs、Sublime Text、VSCode可以重新设置:
$ git config --global core.editor emacs
-
Git差异比较&冲突解决工具配置
Git在解决合并冲突时或者对比文件差异时使用哪种差异分析工具:
# git config --global diff.tool meld
# git config --global merge.tool meld
常用的差异分析工具有Meld、Diffmerge
需要查看差异或者解决冲突合并时,使用如下命令即可:
git difftool
git mergetool
-
Git命令别名配置
Git很多命名比较长并且带比较多的参数,补全功能不那么好用的情况下每次键入完整命令还是比较痛苦的,命令别名可以简化git使用:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
上述:git ci == git commit
$ git config --global alias.unstage 'reset HEAD --'
git unstage fileA == git reset HEAD fileA
-
Git SSH配置
大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。 首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录:
秘钥文件一般为id_dsa 或 id_rsa文件,有 .pub 后缀的文件就是公钥,另一个文件则是密钥。
没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/schacon/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/schacon/.ssh/id_rsa.
Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub.
它先要求你确认保存公钥的位置(.ssh/id_rsa),然后它会让你重复一个密码两次,如果不想在使用公钥的时候输入密码,可以留空。
最后把公钥给你或者 Git 服务器的管理员(假设 SSH 服务被设定为使用公钥机制)。他们只需要复制 .pub 文件的内容然后发邮件给管理员。公钥的样子大致如下:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@agadorlaptop.local
- Git 查看配置
$ git config --list
user.name=Jokerlee
user.email=jokerlee@gmail.com
color.status=auto
color.diff=auto
...
7. Git Http 代理配置
// 查看当前代理设置
git config --global http.proxy
// 设置当前代理为 http://127.0.0.1:1080 或 socket5://127.0.0.1:1080
git config --global http.proxy 'http://127.0.0.1:1080'
git config --global https.proxy 'http://127.0.0.1:1080'
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
// 删除 proxy git config --global --unset http.proxy
git config --global --unset https.proxy
附上常用的Mac Git配置文件(~/.gitconfig)
对于能偷懒来说直接复制覆盖~/.gitconfig 文件是个好选择
[http]
postBuffer = 524288000
#proxy = http://127.0.0.1:1080
[user]
name = yourName
email = yourEmail
[core]
quotepath = false
autocrlf = input
#editor = gedit
editor = /Applications/Sublime\\ Text.app/Contents/SharedSupport/bin/subl -n -w
[color]
ui = auto
[alias]
st = status
cm = commit
cmd = commit --amend
co = checkout
br = branch
unstage = reset HEAD --
last = log -1 HEAD --decorate --stat
lt = log -1 HEAD --decorate --stat
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
ld = log --pretty=format:"%C(yellow)%h\\ %C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --all --decorate --date=short --graph
ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative
lg = log --decorate --stat
lg2 = log --decorate --stat -2
rbs = rebase
rbc = rebase --continue
rba = rebase --abort
svd = svn dcommit
svr = svn rebase
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
trustExitCode = true
cmd = open -W -a Meld --args \"$LOCAL\" \"$REMOTE\"
[merge]
tool = meld
[mergetool]
prompt = false
[mergetool "meld"]
trustExitCode = true
cmd = open -W -a Meld --args --auto-merge \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output=\"$MERGED\"
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true