git 挂钩设置用户名和电子邮件
git hook to set username and email
是否可以编写一个 git 钩子在第一次提交之前设置用户名和电子邮件?用户名和电子邮件应根据配置的参数设置,例如存储库/域正则表达式或其他参数。
我尝试编写不同的类型,但我只成功地在第一次提交之后配置更改。
编辑
我的代码如下所示(基于 Create a global git commit hook):
.git-templates/hooks/ -> cat pre-commit
#!/bin/bash
remote=$(git config --get remote.origin.url)
if [ -n "$remote" ]; then
if [[ $remote =~ "specific_domain" ]]; then
git config user.email "myname@specific_domain.tld"
git config user.name "Firstname Lastname"
else
git config user.email "pseudonym@general_domain.tld"
git config user.name "pseudonym"
fi
fi
Git 在运行预提交挂钩时已经设置了所有信息。您可以通过编写此始终失败的预提交挂钩来观察这一点:
#! /bin/sh
echo pre-commit hook run
env | grep GIT
exit 1
观察 GIT_AUTHOR_NAME
、GIT_AUTHOR_EMAIL
和 GIT_AUTHOR_DATE
已经设置。这些是将进入提交的值。由于它们是环境变量,因此您在挂钩中所做的任何更改都不会影响父 Git 进程。
您可以 做的是编写一个预提交挂钩,检查名称和电子邮件地址是否设置正确。如果不是,它可以立即更新它们并退出 1,或者打印提醒以配置它们(连同实际的 git config
命令,适用于剪切和粘贴)并退出 1。这并不完美但会处理很多用例。
我找到了问题的别名解决方案
# Git
# gcw
# sets local username + email in repo
# Usage: gcw git-repo-to-clone
git_clone_wrapper () {
first_arg = "$ 1"
if [$ # -ne 1]
then
echo "only works with one argument (repo)"
exit
fi
git clone "$ first_arg"
python - << EOF
import os
from urlparse import urlparse
result = urlparse ("$ first_arg")
git_repo_full = result.path.rpartition ('/') [2] # get last element
git_repo_dir = git_repo_full.split ('.') [0]
os.chdir (os.getcwd () + '/' + git_repo_dir)
os.system ('git config --local user.name "Firstname Lastname"')
os.system ('git config --local user.email "myname@specific_domain.tld"')
EOF
}
alias gcw = 'git_clone_wrapper'
您可以将 gcw
用于您的私人物品和全局 git 配置,将 git clone
用于您的 public。
我写了一篇关于它的小文章here
是否可以编写一个 git 钩子在第一次提交之前设置用户名和电子邮件?用户名和电子邮件应根据配置的参数设置,例如存储库/域正则表达式或其他参数。
我尝试编写不同的类型,但我只成功地在第一次提交之后配置更改。
编辑
我的代码如下所示(基于 Create a global git commit hook):
.git-templates/hooks/ -> cat pre-commit
#!/bin/bash
remote=$(git config --get remote.origin.url)
if [ -n "$remote" ]; then
if [[ $remote =~ "specific_domain" ]]; then
git config user.email "myname@specific_domain.tld"
git config user.name "Firstname Lastname"
else
git config user.email "pseudonym@general_domain.tld"
git config user.name "pseudonym"
fi
fi
Git 在运行预提交挂钩时已经设置了所有信息。您可以通过编写此始终失败的预提交挂钩来观察这一点:
#! /bin/sh
echo pre-commit hook run
env | grep GIT
exit 1
观察 GIT_AUTHOR_NAME
、GIT_AUTHOR_EMAIL
和 GIT_AUTHOR_DATE
已经设置。这些是将进入提交的值。由于它们是环境变量,因此您在挂钩中所做的任何更改都不会影响父 Git 进程。
您可以 做的是编写一个预提交挂钩,检查名称和电子邮件地址是否设置正确。如果不是,它可以立即更新它们并退出 1,或者打印提醒以配置它们(连同实际的 git config
命令,适用于剪切和粘贴)并退出 1。这并不完美但会处理很多用例。
我找到了问题的别名解决方案
# Git
# gcw
# sets local username + email in repo
# Usage: gcw git-repo-to-clone
git_clone_wrapper () {
first_arg = "$ 1"
if [$ # -ne 1]
then
echo "only works with one argument (repo)"
exit
fi
git clone "$ first_arg"
python - << EOF
import os
from urlparse import urlparse
result = urlparse ("$ first_arg")
git_repo_full = result.path.rpartition ('/') [2] # get last element
git_repo_dir = git_repo_full.split ('.') [0]
os.chdir (os.getcwd () + '/' + git_repo_dir)
os.system ('git config --local user.name "Firstname Lastname"')
os.system ('git config --local user.email "myname@specific_domain.tld"')
EOF
}
alias gcw = 'git_clone_wrapper'
您可以将 gcw
用于您的私人物品和全局 git 配置,将 git clone
用于您的 public。
我写了一篇关于它的小文章here