Git配置

一、配置gitconfig

用户可以通过配置git的config文件定义和保存偏好,config文件有多个对应不用的作用域,且优先级高的会覆盖低的:

1、三个作用域

config路径 作用域 配置命令 优先级
project/.git/config project项目 git config (–local 缺省参数)
~/.gitconfig 当前用户 git config –global
/etc/gitconfig 本机所有用户 git config –system

2、配置操作

1)查看配置文档:git help config

2)查看已有配置

命令 结果
git config -l 显示所有级别的配置内容(按由低到高的优先级
排列),即多个重复项中最后一项生效
git config –local -l 显示本项目的配置内容
git config –global -l 显示当前用户的配置内容
git config –system -l 显示本机所有用户的配置内容
git config –scope key 显示指定作用域的指定key的值,
例如:git config –global user.name

3)配置config

配置方式 操作
命令配置 例如:git config –global user.name “kivi”
编辑config文件 例如:vim ~/.gitconfig

3、配置实例

要正确使用git,只要简单配置如下即可:

git config –global user.name “kivi”

git config –global user.email shichengyx@sina.com

二、配置忽略文件

git可以配置忽略文件来忽略工作区的指定文件,例如Java项目可通过配置忽略文件来禁止class文件上传到git仓库。

1、两个配置文件

git忽略文件有两个:.gitignoreexlude文件,Git根据两个文件的内容忽略相应文件。

1).gitignore隶属于工作区,是项目的一个文件,被Git版本管理(同其他文件一样以blob对象的形式存储在.git/objects/目录下)。适合配置项目公开的忽略文件,其他开发者可见

2)exclude文件位于.git/info/exclude,不属于项目,不被Git版本管理。适合配置本地的忽略文件,其他开发者不可见

2、语法规则

git help ignore 查看详细规则

1)#起始的行为注释行

2)绝对路径和相对路径

  • 绝对路径:以/起始的路径,例如:/bin/仅忽略根目录下的bin文件下的文件。
  • 相对路径:非/起始的路径,例如:bin/忽略任意层级下的bin文件夹下的文件

3)忽略文件还是目录?

  • folderA/name:忽略folderA下的name文件和文件夹。
  • folderA/name/:忽略folderA下的name文件夹。

4)特殊字符:?***[]

  • !:排除
  • ?:匹配任意一个字符【类似regex的.
    • *:匹配任意多个字符(在Linux和Windows平台表现不同,Linux下等同与**,Windows则不等同)
    • **:匹配任意层级目录【类似regex的.*
    • []:匹配一个字符组【等同regex的[]

3、配置gitignore

vim .gitignore

1
2
3
4
5
6
7
8
# 这是一行注释
.[oa] # 忽略以.o、.a结尾的文件或文件夹
.html # 忽略以.html结尾的文件或文件夹
!foo.html # 但foo.html除外
/bin/*.class # 忽略/bin/下以.class结尾的文件,不包括/foo/bin/.class
lib/ # 忽略lib下所有文件
target/*.jar # 忽略target下以.jar结尾的文件,不包括target/foo/foo.jar
doc/**/*.txt # 忽略doc下所有以.txt结尾的文件

4、配置exclude

vim .git/info/exclude,参考.gitignore配置。

三、配置远程仓库

1、远程仓库

Git通过远程仓库的方式进行团队协作开发。
远程仓库是指托管到网络上的项目仓库,有权限的项目成员可通过拉取和推送操作来协同开发。

1)管理远程仓库

管理远程仓库

2)拉取(fetch/pull)和推送(push)

git pull 和 git push的数据流向

1、命令:git fetch [repository] [remote-branch]:[local-branch]

git fetch

2、命令:git pull相当于git fetch + git merge。即先把远程分支fetch到本地,然后和当前分支合并(分支合并将在分支章节详细说明)。

3、命令:git push [repository] [local-branch]:[remote-branch]

若执行:git push origin master:master,结果为:

1)更新远程origin仓库的refs/heads/master分支。

2)更新本地仓库的refs/remotes/origin/master分支。

git push

2、配置远程仓库

1)两个相关命令

1
2
3
4
5
// 设置跟踪分支
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]

// 取消跟踪分支
git branch --unset-upstream [<branchname>]

2).gitconfig文件

1)git init

1
2
3
4
5
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true

2)git remote add origin git@git.jd.com:wangqiwei7/git-test.git

1
2
3
4
5
6
7
8
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@git.jd.com:wangqiwei7/git-test.git
fetch = +refs/heads/*:refs/remotes/origin/*

3)git branch -u origin/dev dev

1
2
3
4
5
6
7
8
9
10
11
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@git.jd.com:wangqiwei7/git-test.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "dev"]
remote = origin
merge = refs/heads/dev

4)git branch --unset-upstream dev

1
2
3
4
5
6
7
8
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@git.jd.com:wangqiwei7/git-test.git
fetch = +refs/heads/*:refs/remotes/origin/*

参考

  1. 自定义 Git - 配置 Git

评论