Git Config

发布于 更新于

git数据传输

workspace       index          local repository      remote repository-------------commit -a---------------->|--------add------>|--------commit----->|                                        -------push-------->|<------------------------pull-------------------------------|                                       |<------fetch--------|<--------------checkout head-----------|<-----checkout----|<-----------------diff head------------|<------diff-------|
workspace            用户的工作空间   index                数据缓存区   local repository     本地仓库   remote repository    远程仓库

.git/config

[core]    # repositoryformatversion 指定 Git 仓库的版本,默认值为 0,通常不需要修改    repositoryformatversion = 0      # filemode 表示是否跟踪文件的权限变化    # true: 跟踪权限变化(适用于 Linux/macOS)    # false: 忽略权限变化(适用于 Windows)    filemode = false      # bare 表示是否为裸仓库(无工作区,仅存储 Git 数据)    # true: 裸仓库,适用于远程仓库    # false: 非裸仓库,适用于本地开发    bare = false      # logallrefupdates 表示是否记录所有引用的更新(如分支、标签等的变化)    # true: 启用,便于日志追踪    # false: 禁用    logallrefupdates = true      # ignorecase 指定是否忽略文件名的大小写差异    # true: 忽略大小写(适用于 Windows/Mac)    # false: 区分大小写(适用于 Linux)    ignorecase = false      # autocrlf 指定是否在换行符转换上启用自动化处理    # true: 提交时将 CRLF 转换为 LF,检出时将 LF 转换为 CRLF(适用于 Windows)    # input: 提交时将 CRLF 转换为 LF,检出时不做转换(适用于 Linux/Mac)    # false: 不进行任何换行符转换    autocrlf = false  [remote "origin"]    # url 是远程仓库的地址,支持 HTTP(S)、SSH 等协议    url = https://github.com/xxx/xxx.git      # fetch 定义从远程仓库抓取分支的规则    # +refs/heads/main:refs/remotes/origin/main 表示同步远程主分支到本地    fetch = +refs/heads/main:refs/remotes/origin/main  [branch "main"]    # remote 指定当前分支关联的远程仓库    remote = origin      # merge 指定当前分支与远程仓库的哪个分支进行合并    merge = refs/heads/main      # vscode-merge-base 是 Visual Studio Code 的扩展字段,用于记录分支合并基线    vscode-merge-base = origin/main  [user]    # name 是用户的 Git 提交签名用户名    name = random      # email 是用户的 Git 提交签名邮箱地址    email = r@n.om  # 比较工具[diff]    tool = diffmerge[difftool "diffmerge"]    cmd = \"D:/WinMerge/WinMergeU.exe\" \"$LOCAL\" \"$REMOTE\"[merge]    tool = diffmerge[mergetool]    keepbackup = false[mergetool "diffmerge"]    cmd = \"D:/WinMerge/WinMergeU.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"    trustexitcode = true

.gitattritubes

# 设置文本文件的换行符处理规则# text: 指定文件为文本文件,Git 将自动处理换行符# eol=lf: 仓库中保存 LF(适用于 Linux/Mac)# eol=crlf: 仓库中保存 CRLF(适用于 Windows)# auto: 根据系统自动设置换行符* text eol=lf# 为 Markdown 文件强制指定为文本文件,使用 LF 换行符*.md text eol=lf# 为批处理脚本文件强制指定为文本文件,使用 CRLF 换行符*.bat text eol=crlf# 忽略二进制文件的自动换行符处理# binary: 指定文件为二进制文件,Git 不会进行任何换行符转换*.png binary*.jpg binary*.zip binary# 禁用合并策略的处理,防止合并冲突对某些文件类型生效# merge=ours: 在合并时使用“我们”的版本,忽略对方的更改*.lock merge=ours# 为 JSON 文件指定自定义差异工具# diff=custom_json: 使用自定义工具处理 JSON 文件的差异*.json diff=custom_json# 配置大文件的存储,使用 Git LFS# filter=lfs: 启用 Git LFS(大文件存储)过滤器*.psd filter=lfs*.mp4 filter=lfs# 指定文件在合并时自动接受所有更改# merge=union: 合并时自动保留双方的更改*.txt merge=union

多仓库目录环境配置

采用 includeIf 指令实现智能切换:

# ~/.gitconfig 主配置文件[includeIf "gitdir:D:/work/"]    path = .gitconfig-work  # 工作账号配置[includeIf "gitdir:D:/personal/"]    path = .gitconfig-personal  # 私人账号配置[includeIf "onbranch:main"]    path = .gitconfig-personal[includeIf "hasconfig:remote.*.url:https://github.com/**"]    path = .gitconfig-personal 
# ~/.gitconfig-work 工作专用配置[user]    name = 公司开发者    email = work@company.com    signingkey = WORK-SIGN-KEY[core]    autocrlf = input
# ~/.gitconfig-personal 私人配置[user]    name = 个人开发者    email = me@domain.com[github]    token = xxxx-xxxx-xxxx-xxxx