[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 <[email protected]>
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 命令设置别名,简化输入。
相关推荐
二个半engineer2 小时前
GitLab Web 界面创建分支后pathspec ... did not match any file(s)
git·gitlab
尽兴-4 小时前
Git 清理指南:如何从版本库中移除误提交的文件(保留本地文件)
大数据·git·gitee·gitlab
飞翔的猪猪17 小时前
GitHub Recovery Codes - 用于 GitHub Two-factor authentication (2FA) 凭据丢失时登录账号
前端·git·github
顾三殇18 小时前
【编译工具】(版本控制)Git + GitHub Actions:自动化工作流如何让我的开发效率提升200%?
git·自动化·github
绅士玖20 小时前
理解 .env 文件和 .gitignore 文件的作用与最佳实践
前端·git·代码规范
不爱学英文的码字机器1 天前
[Git] 标签管理
大数据·git·elasticsearch
小慧10241 天前
1.2 git使用
git
m0_635647482 天前
git管理github上的repository(二)
git·github
今夕节度使2 天前
通过 VS Code 连接 GitLab 并上传项目
git·elasticsearch·gitlab