[Git] 配置 Git

文章目录

在掌握了本地和远程的基本操作之后,我们来学习一些 Git 的 配置 技巧,让使用更加顺畅和个性化。


除了最开始设置用户名和邮箱,Git 还有很多可以配置的地方。其中两个非常实用的配置是忽略特殊文件和给命令设置别名。

忽略特殊文件:.gitignore

问题: 在实际项目开发中,你的项目目录里会产生一些文件,它们不应该被 Git 跟踪,更不应该被提交到远程仓库。比如:

  • 编译生成的文件: 比如 Java 的 .class 文件,Python 的 __pycache__ 目录,C++ 的 .o 文件或可执行文件。
  • 日志文件: 程序运行生成的 .log 文件。
  • 临时文件或备份文件: 编辑器产生的临时保存文件,比如 .swp 文件。
  • IDE (集成开发环境) 生成的文件: 比如 .idea/ 目录,.vscode/ 目录,.project 文件等,这些文件通常包含本地 IDE 配置,不适合共享。
  • 包含敏感信息的文件: 比如数据库连接密码、API 密钥等配置文件,它们通常不应该上传到公共或团队仓库。

如果 Git 每次都提示这些文件的变化,或者不小心把它们提交了,会非常麻烦。

解决方案: 在你的 Git 工作区根目录 下,创建一个名为 .gitignore 的特殊文件。在这个文件里,你可以列出或指定 Git 应该忽略的文件和目录的规则。Git 在检查工作区状态或准备提交时,会自动跳过这些文件。

创建 .gitignore 文件:

  • 手动创建: 在你的项目根目录手动创建一个 .gitignore 文件,用文本编辑器打开并编辑。
  • 平台生成: 像 Gitee、GitHub 等代码托管平台在创建新仓库时,通常会提供生成 .gitignore 文件的选项,并可以选择针对特定编程语言或框架的模板,这样可以省去很多手动编写的麻烦。

在 Gitee 创建新仓库页面,勾选初始化仓库,然后选择合适的 .gitignore 模板(比如 Python, Node.js, C++ 等)。

无论哪种方式,最终你都会在项目根目录得到一个 .gitignore 文件。

.gitignore** 文件内容规则:**

.gitignore 文件中,每一行就是一个忽略规则。

  • 空行或以 # 开头的行会被 Git 忽略,作为注释使用。
  • 直接写文件名:忽略指定文件。
  • 写目录名以 / 结尾:忽略指定目录及其中的所有文件和子目录。
  • 写文件名以 * 通配符:忽略匹配模式的文件。
  • ! 开头:表示不忽略(例外规则)。

示例 .gitignore 文件内容:

假设我们想忽略所有以 .so.ini 结尾的文件,以及一个叫做 my_secret_config.ini 的特定文件,内容可以这样写:

plain 复制代码
# 这是一个注释
# 忽略所有以 .so 结尾的文件
*.so
# 忽略所有以 .ini 结尾的文件
*.ini
# 但我有一个特定的 .ini 文件,我不想忽略它(这不是上面的例子,只是演示例外)
# !/path/to/my_specific.ini

# 另外,忽略整个 build 目录
build/

# 忽略特定的文件
my_secret_config.ini

(参照提供的示例内容)

plain 复制代码
# 省略选择模本的内容...
# My configurations:
*.ini
*.so

这个示例 .gitignore 文件会告诉 Git 忽略项目中所有以 .ini.so 结尾的文件。

提交 .gitignore 文件:

.gitignore 文件本身也应该被纳入版本控制!这样,所有协作的开发者都会使用相同的忽略规则。所以,创建或修改 .gitignore 文件后,记得 addcommitpush 它。

bash 复制代码
# 在工作区创建或修改 .gitignore 文件
zz@139-159-150-152:~/git_teaching$ vim .gitignore

# 添加 .gitignore 文件到暂存区
zz@139-159-150-152:~/git_teaching$ git add . # 或者 git add .gitignore

# 提交 .gitignore 文件到本地版本库
zz@139-159-150-152:~/git_teaching$ git commit -m"Add .gitignore file"
[master 97811ab] Add .gitignore file # 生成新提交
 1 file changed, 3 insertions(+) # .gitignore 文件被添加了 3 行
 create mode 100644 .gitignore

# 推送到远程仓库
zz@139-159-150-152:~/git_teaching$ git push origin master
... # 推送过程输出
To gitee.com:...
 60e6b0a..97811ab master -> master

现在,你的 .gitignore 文件已经被添加到远程仓库,所有拉取最新代码的人都会获得这个忽略规则。

验证 .gitignore 是否生效:

我们在工作区创建一些应该被忽略的文件,然后检查 git status

bash 复制代码
# 创建两个应该被忽略的文件
zz@139-159-150-152:~/git_teaching$ touch a.so b.ini

# 查看 Git 状态
zz@139-159-150-152:~/git_teaching$ git status
On branch master
Your branch is up to date with 'origin/master'. # 分支是同步的
nothing to commit, working tree clean         # 工作区是干净的

Git 并没有把 a.sob.ini 列为未跟踪的文件(Untracked files)。这证明 .gitignore 规则已经生效了! Git 自动忽略了这些文件。

强制添加被忽略的文件 ( git add -f):

有时,你可能确实需要将一个通常被忽略的文件强制添加到 Git。比如你生成了一个临时的构建输出文件,想让其他开发者看看。

bash 复制代码
# 假设 a.so 被忽略,但你这次想强制添加它
$ git add -f a.so

这个命令会忽略 .gitignore 规则,强制将 a.so 添加到暂存区。但请谨慎使用,确保你知道自己在做什么。

检查忽略规则是否生效或找出原因 ( git check-ignore):

如果你不确定某个文件为什么被忽略(或者为什么没有被忽略),或者想知道是哪条规则导致了忽略,可以使用 git check-ignore 命令。

bash 复制代码
# 检查 a.so 文件是否被忽略,以及是哪条规则忽略的
zz@139-159-150-152:~/git_teaching$ git check-ignore -v a.so
.gitignore:3:*.so a.so # Git 告诉你:在 .gitignore 文件的第 3 行,*.so 规则忽略了 a.so

-v 参数(verbose)让 Git 详细地告诉你匹配的规则以及它在哪一行。这对于调试 .gitignore 文件非常有用。

.gitignore** 例外规则 (!):**

前面提到,可以使用 ! 前缀来创建例外规则,让某个文件不被之前的忽略规则忽略。

例如,如果你写了一个规则忽略所有以点开头的隐藏文件:

plain 复制代码
# 排除所有.开头的隐藏文件:
.*

但是这个规则也会把 .gitignore 文件本身忽略掉!虽然可以用 -f 强制添加,但更好的做法是添加一个例外规则:

plain 复制代码
# 排除所有.开头的隐藏文件:
.*
# 但不排除 .gitignore 文件本身
!.gitignore

这样,除了 .gitignore 文件,其他以点开头的隐藏文件都会被忽略。

掌握 .gitignore 文件,可以让你更好地管理项目文件,避免将不必要或敏感的文件提交到仓库中,保持仓库的干净和安全。

给命令配置别名:git config alias

问题: 有些 Git 命令比较长,或者一些常用操作需要组合多个命令(比如查看简洁图形日志)。每次都完整地输入这些命令会比较麻烦。Git 允许你给这些命令设置简短的"别名"(alias)。

命令: git config [--global] alias.[你想要的别名] '[原始 Git 命令]'

  • --global 参数:将这个别名应用到你这台电脑上所有 的 Git 仓库。这是最常用的方式。如果不加 --global,则只对当前所在的 Git 仓库生效。
  • [你想要的别名]:你为原始命令设置的短名称。
  • '[原始 Git 命令]':被别名代替的那个 Git 命令。如果原始命令包含空格或多个部分,需要用引号 '' 括起来。

操作演示:

  1. git status 设置别名 st
bash 复制代码
# 设置全局别名 st 为 status
$ git config --global alias.st status

设置完成后,在任何 Git 仓库里,输入 git st 就等同于输入 git status

bash 复制代码
zz@139-159-150-152:~/git_teaching$ git st # 输入 git st
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean # 效果和 git status 一样
  1. git log -1 设置别名 last git log -1 用于查看最近一次的提交。
bash 复制代码
# 设置全局别名 last 为 'log -1'
$ git config --global alias.last 'log -1'
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git last # 输入 git last
commit 97811abd1d43774aeb54fee32bf4fc76b2b08170 (HEAD -> master, origin/master, origin/HEAD)
Author: zz91 <2689241679@qq.com>
Date:   Fri May 12 17:27:06 2023 +0800
    Add .gitignore file # 显示最近一次提交的信息

这也很方便。

你还可以为更复杂的命令设置别名,比如:

  • git config --global alias.lg "log --graph --pretty=oneline --abbrev-commit":将我们常用的简洁图形日志命令设置为 git lg
  • git config --global alias.unstage 'reset HEAD --':将撤销暂存(git reset HEAD --)设置为 git unstage

虽然别名能简化操作,但正如你提到的,作为新手,在刚开始学习时,建议多敲完整的命令,这有助于你熟悉 Git 命令的原始用法和参数。等你对常用命令非常熟悉之后,再根据自己的使用习惯设置别名,可以提高效率。

总结

这一章我们学习了两个重要的 Git 配置项:

  • 使用 .gitignore** 文件**来指定 Git 应该忽略的文件和目录,保持仓库的干净和安全。
  • 使用 git config alias.[别名] '[命令]' 来为常用的 Git 命令设置别名,简化输入。
相关推荐
Franklin3 小时前
VS 版本更新git安全保护问题的解决
git
我是一只代码狗7 小时前
idea中合并git分支
git
我是一只代码狗7 小时前
idea中使用git
git·gitee·github
恋喵大鲤鱼7 小时前
git restore
git·git restore
李少兄8 小时前
Git Commit Message写错后如何修改?已Push的提交如何安全修复?
git·安全
Fireworkitte8 小时前
git stash
git
pe7er1 天前
git submodule简易指南
git
xiaocainiao8811 天前
Python 实战:构建 Git 自动化助手
git·python·自动化
Casia_Dominic2 天前
【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南
git·3d·github·点云