我使用几台具有不同gitconfig的计算机.如何停止将我的电子邮件地址泄露给GitHub?

Rot*_*ces 1 git privacy

我在那里工作的计算机$HOME/.gitconfiguser.emailRotatingPieces@work.tld.我家的电脑已经$HOME/.gitconfiguser.emailRotating.P@SuperKawaiiAnimeWeb.net.并且有虚拟机R.Pieces@DogeMemes.net.而笔记本电脑......

这些电子邮件地址对于克隆在这些计算机上的大多数存储库都是正确的.但有时我会混淆我在什么机器上做的事情.在家里和其他方面做工作.

因此,当我在我的公共GitHub/BitBucket/GitLab/Whatever仓库中执行某些操作时,我会提交为RotatingPieces@work.tld.在家工作会创建提交Rotating.P@SuperKawaiiAnimeWeb.net.因此我偶然将这两个电子邮件地址链接在一起.它总是偶然发生.

有办法阻止这个吗?在不同的计算机上使用相同的存储库时,我该怎么做才能阻止自己泄露我的电子邮件地址?

不起作用的事情:

  • 更改$HOME/.gitconfig文件.这些电子邮件地址对于克隆在这些计算机上的大多数存储库都是正确的.
  • git commit --author=....我会一直忘记这个--author选项.
  • .git/config在克隆的存储库中设置电子邮件地址.这仅适用于此存储库的此计算机.我必须记住,每次我创建一个新的克隆库.太容易忘记.

最好的解决方案是服务器端或客户端提交挂钩,您可以将其提交到存储库,然后由git运行.或者我可以在GitHub Web UI中激活一些钩子或电子邮件地址过滤器.然而,出于明显的滥用原因,可能不存在这样的事情.

有人对解决方案有任何想法吗?

Sco*_*don 5

我有一段时间遇到同样的问题:我希望将不同的电子邮件地址用于工作项目,开源项目,个人项目等等,我希望它能够根据文件夹结构自动设置而不是记住每回购一次.

此解决方案将自动执行基于每个存储库设置电子邮件的过程.我要做的一个假设是,您已根据所有者(或者更确切地说,基于您要使用的电子邮件地址)将项目划分为文件夹.例如:

code/
  work/
    (All subfolders use work email.)
  open-source/
    (All subfolders use open source email.)
  personal/
    (All subfolders use personal email.)
Run Code Online (Sandbox Code Playgroud)

根据Git Docs,post-checkout钩子在git clone命令之后运行,因此我们可以使用全局post-checkout钩子来设置每个repo的电子邮件.

首先,做:

git config --global init.templatedir '~/.git_template'
Run Code Online (Sandbox Code Playgroud)

(来自Git commit hooks - 全局设置.)

然后创建该文件夹和一个名为的子文件夹hooks.添加以下脚本~/.git_template/hooks/post-checkout:

#!/bin/bash
# Automatically set Git config values from parent folders.

dir=$(pwd)
while [ "$dir" != "/" ]
do
  # First directory would be the new Git repo, so skip it.
  dir=$(dirname $dir)
  if [ -f $dir/.gitconfig ]
  then
    for config in $(git config --file $dir/.gitconfig --list)
    do
      var=$(echo $config | cut -d = -f 1)
      value=$(echo $config | cut -d = -f 2)
      actual=$(git config $var)
      if [ "$actual" != "$value" ]
      then
        git config $var $value
      fi
    done
  fi
done
Run Code Online (Sandbox Code Playgroud)

(您也可以在我的GitHub仓库中git-template找到此脚本.

现在,对于我提到的每个文件夹,添加一个.gitconfig包含相应电子邮件的文件.例如:

git config --file /mnt/data/code/open-source/.gitconfig user.email "open-source@scott-weldon.com"
Run Code Online (Sandbox Code Playgroud)

现在,只要您git clone进入正确的文件夹,您的repos将自动在本地配置中设置正确的电子邮件地址.

奖金功能:

  1. 对于那些已经克隆过的存储库,您可以直接cd访问相关的Git目录并~/.git_template/hooks/post-checkout直接调用以更新电子邮件.

  2. 您可以向.gitconfig文件添加所需的任何配置,这些设置也将添加到仓库中.

已知的问题:

  1. 目前,它搜索目录从pwd/,当它应该颠倒顺序.这应该不难解决,所以我会在某些时候将其添加到我的解决方案中.

  2. 该脚本将在每次 checkout之后执行,而不仅仅是在初始克隆之后执行,因此可能会有很小的性能损失.但是,条件确保如果已经设置了值,或者没有.gitconfig找到文件,它将不会设置该值.

  3. 由于#2,无法使用特定于repo的值覆盖设置.