当前位置: 首页 > article >正文

Git 的特殊配置文件

文章目录

  • 1.前言
  • 2.Git 标准配置文件
    • .gitignore
      • 作用
      • 格式
      • 示例
    • .gitattributes
      • 作用
      • 格式
      • 示例
    • .gitmodules
      • 作用
      • 格式
      • 示例
    • .gitconfig
      • 作用
      • 格式
      • 示例
  • 3.非 Git 标准约定文件
    • .gitkeep
      • 简介
      • 示例
    • .gitacls
      • 作用
      • 格式
      • 示例
  • 参考文献

1.前言

Git 是一个强大的版本控制系统,它使用多个配置文件来管理项目的行为和设置。

2.Git 标准配置文件

.gitignore

作用

.gitignore 文件用于指定哪些文件或目录应被 Git 忽略,不进行版本控制。这有助于避免将不必要的文件(如临时文件、编译生成的文件、日志文件等)添加到版本库中。

格式

  • 每一行指定一个要忽略的模式。
  • 可以使用通配符:* 匹配零个或多个字符。? 匹配一个字符。** 匹配任意级别的目录。
  • 以 / 开头表示相对于仓库根目录的路径。
  • 以 # 开头的行是注释。

示例

# 忽略所有的日志文件及目录
*.log
/log/

# 忽略临时文件及目录
*.tmp
/temp/

# 忽略编译生成的文件
*.exe
/build/
/dist/

# 忽略根目录下的 .env 文件
/.env

# 忽略多层级目录
# 忽略 a/b, a/x/b, a/x/y/b 等
/a/**/b

.gitattributes

作用

.gitattributes 文件用于定义 Git 在处理特定文件或目录时的行为。可以设置文件的文本编码、行结束符、合并策略、差异输出等。

格式

  • 每一行指定一个路径模式和一个或多个属性。
  • 属性名可以是标准属性(如 text、binary、diff)或自定义属性。

示例

# 将所有的文本文件处理为 LF
*.txt text eol=lf

# 将 PNG 文件标记为二进制文件
*.png binary

# 禁用某些目录中文件的 diff 输出
internal/app/pb/** -diff

# 对于特定类型的文件使用自定义的 diff 工具
*.md diff=markdown

.gitmodules

作用

.gitmodules 文件用于管理 Git 子模块的配置信息。

子模块是指在一个 Git 仓库中嵌套的另一个 Git 仓库。此文件包含子模块的路径和 URL,允许您在主仓库中引用其他仓库。

git submodule add https://github.com/XXX [<path>]

默认情况下,子模块会将子项目放到一个与仓库同名的目录中,即“XXX”。

如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径 path。如果这时运行 git status,注意到新的.gitmodules文件。该配置文件保存了项目 URL 与已经拉取的本地目录之间的映射。

格式

  • 使用 [submodule “path”] 格式来定义子模块。

示例

[submodule "libs/some-library"]
    path = libs/some-library
    url = https://github.com/user/some-library.git

[submodule "libs/another-library"]
    path = libs/another-library
    url = https://github.com/user/another-library.git

.gitconfig

作用

.gitconfig 文件是 Git 的配置文件,它用于配置 Git 的行为和用户信息,如用户名、邮箱、颜色输出、别名等。

可通过 git config 命令进行配置,并将配置存储至 .gitconfig 文件。

根据其位置和作用级别,.gitconfig 文件可以分为三种主要类型:

  • 仓库级别的配置(.git/config)具有最高优先级。
  • 用户级别的配置(~/.gitconfig)次之。
  • 系统级别的配置(/etc/gitconfig)具有最低优先级。

格式

示例

.git/config 示例:

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = git@gitlab.foo.com:foo/foo_svr.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
        remote = origin
        merge = refs/heads/main

~/.gitconfig 示例:

[url "git@gitlab.foo.com:"]
        insteadOf = https://gitlab.foo.com/
        insteadOf = http://gitlab.foo.com/
[user]
        email = dablelv@foo.com
        name = dablelv
[core]
        autocrlf = input
        editor = vim
[alias]
    co = checkout
    br = branch
    ci = commit

/etc/gitconfig 示例:

[diff "astextplain"]
        textconv = astextplain
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
[http]
        sslBackend = openssl
        sslCAInfo = C:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
[core]
        autocrlf = true
        fscache = true
        symlinks = false
[pull]
        rebase = false
[credential]
        helper = manager
[credential "https://dev.azure.com"]
        useHttpPath = true
[init]
        defaultBranch = master

3.非 Git 标准约定文件

.gitkeep

简介

Git 默认是不跟踪空文件夹和空目录的,所以要想推送空文件夹或空目录,就必须在里面放一个文件,即使是空文件也行,但必须要有。

于是,就有了一个不成文的规定,通常我们放一个名为 .gitkeep 的文件到空文件夹或空目录,以此实现其 Git 跟踪。该规定并没有在官方文档中定义,只是一个公认的约定罢了。

.gitkeep 实则是一个空的占位文件,并没有其它特性,通俗点讲,.fu*k 可以实现和 .gitkeep 相同的功能。

示例

假设您有一个项目目录结构如下:

my_project/
├── src/
└── empty_folder/

如果您希望在 Git 中保留 empty_folder,可以在该目录中创建一个 .gitkeep 文件:

my_project/
└── empty_folder/
    └── .gitkeep

.gitacls

作用

.gitacls 文件用于定义 Git 仓库的访问控制列表(ACL,Access Control List)。虽然这个文件并不是 Git 的标准部分,但在一些特定环境中,特别是与安全性和权限管理相关的项目中,可能会使用此文件来控制对仓库中文件或目录的访问权限。

格式

具体内容和格式取决于团队的约定。

示例

# 定义哪些用户或组可以访问特定目录
# 例如,允许 user1 和 user2 访问 src/ 目录
src/ user1 user2

参考文献

Git - gitignore Documentation
Git - gitattributes Documentation
Git - gitmodules Documentation


http://www.kler.cn/a/378093.html

相关文章:

  • windows XP,ReactOS系统3.4 共享映射区(Section)---2
  • Linux curl命令下载显示时间/速度/大小
  • MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
  • Java面向对象 C语言字符串常量
  • 1.2 图像处理基本操作
  • 【C++】哈希表模拟:开散列技术与哈希冲突处理
  • FPGA实现串口升级及MultiBoot(十一)QuickBoot介绍
  • ‌MySQL中‌between and的基本用法‌、范围查询
  • 干货|前端项目一些响应式布局问题(固定宽度仍可以实现响应式)
  • CTF-pwn:libc2.27指针劫持[gyctf_2020_signin]
  • 通过不当变更导致 PostgreSQL 翻车的案例分析与防范
  • WeakReference与SoftReference以及结合ReferenceQueue实践整理
  • AppInventor2能否用网络摄像头画面作为屏幕的背景?
  • Golang--函数、包、defer、系统函数、内置函数
  • thinkphp8模型中 where数组条件大于,小于,like等条件时与tp5/6 的区别和使用示例
  • 3.3_JavaScript 对象与事件
  • 湖南(市场研究)源点咨询 市场调研公司与咨询公司有何不同?
  • Leetcode 腐烂的橘子
  • docker理论+部署(一)
  • masm汇编debug调试字符串大小写转换演示
  • 职场中这样汇报工作领导才满意
  • Milvus - 相似度量详解
  • HarmonyOS 5.0应用开发——用户文件操作
  • git入门教程9:配置Git钩子
  • 线程数组一例
  • 信息学科平台系统构建:Spring Boot框架深度解析