根据文件夹设置 git 凭据

Set git credentials based on folder

是否可以让包含多个存储库的文件夹使用一组凭据并让另一个文件夹用户使用不同的帐户?例如,我想在我的 mac 上有一个文件夹用于工作回购和一个文件夹用于个人,并让 git 用户名和密码根据我所在的文件夹自动切换。

This 指南可能就是您要找的那个。

具体查看 git config --local 部分,这部分将在您正在执行命令的回购中应用更改。

为特定文件夹配置 git 配置太简单了。您只需使用两个 git 命令即可实现。只需输入您要更改 git 帐户信息的目录,然后执行此操作:

git config --local user.email "yourmail@example.com"

git config --local user.name "yourName"

我认为这会有所帮助。

干杯!

经过大量搜索,我找到了我要找的东西(但可能不是我最初问的)。我采用的解决方案是使用 ssh。 Github 有一些很好的帮助文档可以遵循 here (在验证中)但基本上你必须 1. Generate 每个账户一个ssh key 并添加到ssh agent* 2. Add 您 github 帐户的 ssh 密钥 3. 在 mac Update ~/.ssh/config 中的配置文件(向下滚动到 "choosing between multiple accounts on GitHub or Heroku")

  • 注意:将 ssh 密钥添加到 ssh 代理是暂时的。只要代理 运行,它们就会持续存在。如果你杀死它或重新启动你的计算机,它们就会丢失,直到你再次重新添加它们。

为了解决这个问题,我创建了一个 bash 函数,将它添加到所有 shell 的 bash rc 文件中,这样我就可以将它作为终端命令调用。代码在这里:

#!/bin/bash

function addSshKeysToAgent() {
  echo "starting ssh agent:"
  echo ""

  eval 'ssh-agent -s'
  echo ""

  echo "adding identities: "
  ssh-add -K ~/.ssh/personal_rsa
  ssh-add -K ~/.ssh/work_rsa
  echo ""

  echo "Private keys loaded into SSH: "
  ssh-add -l -E md5
  echo ""

  echo "ssh keys added to ssh agent."
}

function clone() {
  addSshKeysToAgent
  git clone gh-work:Company/
}

将 personal_rsa 和 work_rsa 替换为您的 ssh 密钥文件的名称,将 Company 替换为您的组织名称(如果这是您想要的),它来自您更新的配置文件。这是我的配置文件的样子:

Host *
 Port 22
 ServerAliveInterval 60
 ForwardAgent yes
 UseKeychain yes
 AddKeysToAgent yes
 IdentityFile ~/.ssh/personal_rsa
 IdentityFile ~/.ssh/work_rsa

Host gh-personal
  Hostname github.com
  User git
  IdentityFile ~/.ssh/personal_rsa
  AddKeysToAgent yes
  UseKeychain yes

Host gh-work
  Hostname github.com
  User git
  IdentityFile ~/.ssh/work_rsa
  AddKeysToAgent yes    
  UseKeychain yes

有了这一切,您应该能够使用以下命令从终端克隆一个 repo:

clone reponame.git

我真诚地希望这对某人有所帮助。我花了将近一整天的时间搜索和破解所有东西才能使它正常工作,并且在我撰写此回复时,我遇到了一个非常好的要点,可以完全按照我的意愿去做here

我可能错了,但我只是创建了不同的 git 配置文件并在 ~/.gitconfig 全局文件中定义了条件。它看起来像这样:

[includeIf “gitdir:<path_to_organisation1_directory_with_repos>“]
    path = <path_to_organisation1_special_git_config_file>

[includeIf “gitdir:<path_to_organisation2_directory_with_repos>“]
    path = <path_to_organisation2_special_git_config_file>