如何告诉git使用给定项目的正确身份(名称和电子邮件)?

问题描述 投票:107回答:7

我使用我的个人笔记本电脑进行工作和个人项目,我想将我的工作电子邮件地址用于工作中的提交(gitolite)和我的个人电子邮件地址(github)。

我读到了以下全球或临时解决方案:

一种解决方案是手动运行shell函数,将我的环境设置为工作或个人,但我很确定我会经常忘记切换到正确的身份,导致提交错误的身份。

有没有办法将某个存储库,项目名称等绑定到身份(名称,电子邮件)?人们做什么?

git github gitolite git-config
7个回答
124
投票

git config user.email "[email protected]"

在repo中执行该操作将在THAT repo上设置配置,而不是全局设置。

看起来这就是你所追求的,除非我误读你。


34
投票

您需要使用下面的本地set命令:

本地集

git config user.email [email protected]
git config user.name 'Mahmoud Zalt'

本地得到

git config --get user.email
git config --get user.name

本地配置文件位于项目目录中:.git/config

全球集

git config --global user.email [email protected]
git config --global user.name 'Mahmoud Zalt'

全球化

git config --global --get user.email
git config --global --get user.name

主目录中的全局配置文件:~/.gitconfig

记得引用空白等,例如:'FirstName LastName'


22
投票

使用“.git”文件夹编辑配置文件以维护不同的用户名和电子邮件取决于存储库

  • 转到您的存储库
  • 显示隐藏文件并转到“.git”文件夹
  • 找到“配置”文件
  • 在EOF添加以下行

[用户]

name = Bob

email = [email protected]

以下命令显示为此存储库设置的用户名和电子邮件。

git config --get user.name

git config --get user.email

示例:对于我的配置文件在D:\ workspace \ eclipse \ ipchat \ .git \ config中

这里的ipchat是我的回购名称


16
投票

如果您使用git config user.email "[email protected]",它将绑定到您当前的项目。

这就是我为我的项目所做的。我克隆/初始化repo时设置了适当的标识。这不是万无一失的(如果你在弄清楚之前忘记并推动你被冲洗了)但是如果你没有能够说git config --global user.email 'ILLEGAL_VALUE'就能得到它

实际上,你可以制造非法的价值。设置你的git config --global user.name $(perl -e 'print "x"x968;')

然后,如果您忘记设置非全局值,您将收到错误消息。

[编辑]在另一个系统上,我不得不将x的数量增加到968,以使其失败并显示“致命:不可能长的个人识别码”。相同版本的git。奇怪。


7
投票

如果不使用--global参数,它将仅为当前项目设置变量。


3
投票

从Git 2.13开始,您可以在gitconfig中使用includeIf,根据运行git命令的存储库的路径,包含具有不同配置的文件。

由于一个新的足够的Git附带Ubuntu 18.04我一直在我的~/.gitconfig非常愉快地使用它。

[include]
  path = ~/.gitconfig.alias # I like to keep global aliases separate
  path = ~/.gitconfig.defaultusername # can maybe leave values unset/empty to get warned if a below path didn't match
# If using multiple identities can use per path user/email
# The trailing / is VERY important, git won't apply the config to subdirectories without it
[includeIf "gitdir:~/projects/azure/"]
  path = ~/.gitconfig.azure # user.name and user.email for Azure
[includeIf "gitdir:~/projects/gitlab/"]
  path = ~/.gitconfig.gitlab # user.name and user.email for GitLab
[includeIf "gitdir:~/projects/foss/"]
  path = ~/.gitconfig.github # user.name and user.email for GitHub

https://motowilliams.com/conditional-includes-for-git-config#disqus_thread

要使用Git 2.13,您需要添加PPA(Ubuntu早于18.04 / Debian)或下载二进制文件并安装(Windows /其他Linux)。


0
投票

一种解决方案是手动运行shell函数,将我的环境设置为工作或个人,但我很确定我会经常忘记切换到正确的身份,导致提交错误的身份。

这正是我的问题。我写了一个钩子脚本,如果你有任何github远程并且没有定义本地用户名,它会发出警告。

以下是您设置的方式:

  1. 创建一个目录来保存全局钩子 mkdir -p ~/.git-templates/hooks
  2. 当你运行git init或者克隆时,告诉git将~/.git-templates中的所有内容复制到你的每个项目的.git目录中 git config --global init.templatedir '~/.git-templates'
  3. 现在将以下行复制到~/.git-templates/hooks/pre-commit并使文件可执行(不要忘记这个,否则git不会执行它!)
#!/bin/bash

RED='\033[0;31m' # red color
NC='\033[0m' # no color

GITHUB_REMOTE=$(git remote -v | grep github.com)
LOCAL_USERNAME=$(git config --local user.name)

if [ -n "$GITHUB_REMOTE" ] && [ -z "$LOCAL_USERNAME" ]; then
    printf "\n${RED}ATTENTION: At least one Github remote repository is configured, but no local username. "
    printf "Please define a local username that matches your Github account.${NC} [pre-commit hook]\n\n"
    exit 1
fi

如果您使用其他主机作为私有存储库,则必须根据需要替换github.com

现在,每次执行git initgit clone时,git都会将此脚本复制到存储库并在任何提交完成之前执行它。如果您尚未设置本地用户名,则会输出警告并且不会让您提交。

© www.soinside.com 2019 - 2024. All rights reserved.