3 min read

Git的一些使用场景

备份软件的配置文件(dotfiles)

许多应用软件都使用配置文件的方式对其进行个性化设置。在Linux和Unix上,以点(.)开头的文件被视为隐藏文件(仅使用ls命令无法看到)。用这些点文件(dotfiles)作为软件的配置文件是一种“惯例“。例如zsh和bash的一种配置文件:.zshrc和.bashrc,Vim的配置文件:.vimrc等。

Git除了可以用来做文件的版本控制之外,还支持远程仓库和裸仓库(bare repo)结合这两个特性和自定义Git的工作目录(worktree)我们就可以用远程仓库作为“存储”用Git进行“上传”和“同步”。下面这篇文章详细的介绍了操作步骤。

How to Store Dotfiles - A Bare Git Repository | Atlassian Git Tutorial
It's time to find a better way to store your dotfiles. Learn why you should start using a bare Git repository instead.

隔离工作用途和个人用途

Git在每次commit时会根据所配置的用户名和邮箱来识别不同的提交人。公司的集中仓库(如GitLab)会进行某些安全设置来预防任何人对集中仓库的修改,例如仅允许邮箱后缀为@company.com的用户更新集中仓库。

我习惯于将Git的全局配置设置为私人的邮箱,将某一特定文件夹专门用于存放工作项目,只有在这个文件夹下建立的Git仓库,它的账户配置才会为公司的邮箱。

为了做到这一点,需要使用到.gitconfig来对Git进行配置。

在我的$HOME/.gitconfig中有如下配置

[user]
  name=luozxdotorg
  email=personal@email.com

[includeIf "gitdir:~/Project/compay.com/"]
  path = ~/Project/compay.com/.gitconfig
~/.gitconfig

对[user]部分的设置会被Git视为全局的配置。真正发挥魔力的地方是Git的includeIf

在.gitconfig使用includeIf可以实现嵌入另一个不同位置的.gitconfig。~/.gitconfig文件告诉Git:

  1. 默认情况下,都使用luozxdotorg作为用户名,personal@email.com作为邮箱。
  2. 如果Git仓库在~/Project/compay.com/目录下,那么请使用~/Project/compay.com/.gitconfig作为新的配置,来复盖默认配置。

所以在我们的~/Project/compay.com/.gitconfig中我们就可以配置公司的邮箱:

[user]
  name=Bob
  email=bob@company.com
~/Project/compay.com/.gitconfig
配置includeIf有一些细节需要注意:
  • gitdir:和目标目录中间不应该有空格。
#错误配置
[includeIf "gitdir: F:/Work/CompanyName/"]

#正确配置
[includeIf "gitdir:F:/Work/CompanyName/"
  • .gitconfig中对家目录的引用使用~而不是$HOME。
#错误配置
[includeIf "gitdir:$HOME/Project/compay.com/"]
  path = $HOME/Project/compay.com/.gitconfig

#正确配置
[includeIf "gitdir:~/Project/compay.com/"]
  path = ~/Project/compay.com/.gitconfig

修改已提交的用户信息

如果没有正确配置.gitconfig,很有可能会使用个人邮箱进行commit,将工作代码push到远程仓库(集中仓库)时由于安全限制就会被拒绝。

我们就需要修改最近的一次提交作者的信息。

git commit --amend --author="Bob <bob@company.com>"
使用--amend --author提供的新的作者信息,需要符合形式
"username <uername@company.com>" 中间的<>不可省略。