发布于 更新于
AI总结: 本文介绍了Git数据传输的基本概念,包括工作空间、数据缓存区、本地仓库和远程仓库的结构,以及.git/config和.gitattributes文件的配置细节。配置包括用户信息、换行符处理、远程仓库设置、合并策略和差异工具等。此外,还介绍了多仓库环境的智能切换配置。
优化建议:可以考虑添加具体的使用场景和示例,以帮助用户更好地理解各项配置的实际应用。此外,建议在文中加入常见问题解答部分,以便用户快速解决可能遇到的配置问题。
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 远程仓库
[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.dom
# 比较工具
[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
# 设置文本文件的换行符处理规则
# 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 # 私人账号配置
# ~/.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