Skip to content
Go back

如何管理多个 Git 身份

Edit page

你是否也遇到过这样的烦恼:在同一台设备上同时开发公司项目和个人项目时,需要频繁切换 Git 身份?一旦忘记切换,很可能会把代码提交到了错误的身份下,导致 Git 记录混乱,甚至影响 GitHub 的贡献统计。

有没有办法优雅地避免这种问题?答案是:有!本文将介绍两种实用的 Git 身份隔离方案,帮助你轻松在不同项目之间切换身份。

方案一:在项目中单独配置 Git 身份

你可以在项目目录下的 .git/config 文件中手动设置 Git 身份信息:

[user]
  name = YourName
  email = your.email@example.com

这种方式的优点是简单直接,不会影响其他项目的配置。

缺点:

适合小型项目或临时性配置,不推荐作为长期解决方案。

方案二:按目录自动切换 Git 身份(推荐)

这是更推荐的一种方式:通过 Git 的 includeIf 功能,按目录自动加载对应的配置文件,实现身份自动切换。

假设你的项目结构如下:

E:/Code/
├── work/    # 公司项目
   ├── project1/
   └── project2/
└── mine/     # 个人项目
    ├── project1/
    └── project2/

第一步:为不同目录分别创建 Git 配置文件

[user]
  name = YourCompanyName
  email = your.name@company.comE:/Code/work/.gitconfig-work
[user]
  name = YourPersonalName
  email = your.name@personal.comE:/Code/mine/.gitconfig-mine

第二步:修改全局 Git 配置 .gitconfig

该配置文件位于 C:/Users/YourUsername/.gitconfig,加入以下内容:

[includeIf "gitdir:E:/Code/work/"]
  path = E:/Code/work/.gitconfig-work

[includeIf "gitdir:E:/Code/mine/"]
  path = E:/Code/mine/.gitconfig-mine

这样一来:

无需手动切换,极大降低了出错概率!

补充说明

补救措施:误用身份后怎么办?

如果你已经用错误的 Git 身份提交了代码,也不必惊慌。接下来教你修改已提交的 Commit 信息中的作者身份信息。

1、通过以下命令拉取一个新的仓库

git clone --bare https://github.com/user/repo.git

cd repo.git

2、复制以下脚本,替换:旧的Email地址正确的用户名正确的邮件地址

git filter-branch --env-filter '
OLD_EMAIL="旧的Email地址"
CORRECT_NAME="正确的用户名"
CORRECT_EMAIL="正确的邮件地址"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
  export GIT_COMMITTER_NAME="$CORRECT_NAME"
  export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
  export GIT_AUTHOR_NAME="$CORRECT_NAME"
  export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

3、脚本运行成功后,查看 Commit 信息是否替换成功

git log

4、将正确的 Commit 历史推送到远程仓库

git push --force --tags origin 'refs/heads/*'

5、删除刚创建的本地仓库

cd ..

rm -rf repo.git

结语

通过为不同目录配置专属 Git 身份,你可以彻底告别频繁手动切换身份的烦恼。这样一来,你在摸鱼写自己代码的时候就不会被发现了,赶紧去试试吧!

doge

如果你有更优雅的方式,也欢迎留言分享~


Edit page
Share this post on:

Previous Post
如何判断没有后缀名的文件类型