Czy Mogę określić wielu użytkowników dla siebie w.gitconfig?

W moim ~/.gitconfig, wymieniam mój osobisty adres e-mail pod [user], ponieważ to jest to, czego chcę użyć do repozytoriów Github.

Ale ostatnio zacząłem używać Gita także do pracy. Git repo mojej firmy pozwala mi na commit, ale kiedy wysyła ogłoszenia o nowych zestawach zmian, mówi, że są one od Anonymous, ponieważ nie rozpoznaje adresu e-mail w moim .gitconfig - przynajmniej taka jest moja teoria .

Czy można określić wiele definicji [user] w .gitconfig? A może jest jakiś inny sposób nadpisania domyślnego .gitconfig dla określonego katalogu? W moim przypadku sprawdzam cały kod roboczy w ~/worksrc/ - czy jest sposób, aby określić .gitconfig tylko dla tego katalogu (i jego podkatalogów)?

 523
git
Author: Brock Boland, 2010-11-19

18 answers

Można skonfigurować indywidualny repo, aby używał określonego użytkownika / adresu e-mail, który nadpisuje konfigurację globalną. Z katalogu głównego repo, Uruchom

git config user.name "Your Name Here"
git config user.email [email protected]

Podczas gdy domyślny użytkownik / e-mail jest skonfigurowany w twoim~/.gitconfig

git config --global user.name "Your Name Here"
git config --global user.email [email protected]
 756
Author: discomurray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 11:04:03

Od git 2.13, możliwe jest rozwiązanie tego problemu przy użyciu nowo wprowadzonego warunkowego includes .

Przykład:

Global config ~/.gitconfig

[user]
    name = John Doe
    email = [email protected]

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

Work specific config ~ / work/.gitconfig

[user]
    email = [email protected]
 184
Author: Tomáš Janoušek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 21:21:50

Lub możesz dodać następujące informacje w lokalnym pliku .git/config

[user]  
    name = Your Name
    email = [email protected]
 95
Author: Rahul Prasad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-12 11:03:20

Po zainspirowaniu się postem Orra Sella na blogu napisałem hak przed zatwierdzeniem (rezydujący w ~/.git/templates/hooks), który ustawiał konkretne nazwy użytkowników i adresy e-mail na podstawie informacji wewnątrz lokalnego repozytorium ./.git/config:

Musisz umieścić ścieżkę do katalogu szablonu w swoim ~/.gitconfig:

[init]
    templatedir = ~/.git/templates

Następnie każdy git init lub git clone odbierze ten hook i zastosuje dane użytkownika podczas następnego git commit. Jeśli chcesz zastosować hook do już exisiting następnie uruchom git init wewnątrz repo, aby go ponownie zainicjować.

Oto hak, który wymyśliłem (nadal wymaga polerowania - sugestie są mile widziane). Zapisz go jako

~/.git/templates/hooks/pre_commit

Lub

~/.git/templates/hooks/post-checkout

I upewnij się, że jest wykonywalny: chmod +x ./post-checkout || chmod +x ./pre_commit

#!/usr/bin/env bash

# -------- USER CONFIG
# Patterns to match a repo's "remote.origin.url" - beginning portion of the hostname
git_remotes[0]="Github"
git_remotes[1]="Gitlab"

# Adjust names and e-mail addresses
local_id_0[0]="my_name_0"
local_id_0[1]="my_email_0"

local_id_1[0]="my_name_1"
local_id_1[1]="my_email_1"

local_fallback_id[0]="${local_id_0[0]}"
local_fallback_id[1]="${local_id_0[1]}"


# -------- FUNCTIONS
setIdentity()
{
    local current_id local_id

    current_id[0]="$(git config --get --local user.name)"
    current_id[1]="$(git config --get --local user.email)"

    local_id=("$@")

    if [[ "${current_id[0]}" == "${local_id[0]}" &&
          "${current_id[1]}" == "${local_id[1]}" ]]; then
        printf " Local identity is:\n"
        printf "»  User: %s\n»  Mail: %s\n\n" "${current_id[@]}"
    else
        printf "»  User: %s\n»  Mail: %s\n\n" "${local_id[@]}"
        git config --local user.name "${local_id[0]}"
        git config --local user.email "${local_id[1]}"
    fi

    return 0
}

# -------- IMPLEMENTATION
current_remote_url="$(git config --get --local remote.origin.url)"

if [[ "$current_remote_url" ]]; then

    for service in "${git_remotes[@]}"; do

        # Disable case sensitivity for regex matching
        shopt -s nocasematch

        if [[ "$current_remote_url" =~ $service ]]; then
            case "$service" in

                "${git_remotes[0]}" )
                    printf "\n»» An Intermission\n»  %s repository found." "${git_remotes[0]}"
                    setIdentity "${local_id_0[@]}"
                    exit 0
                    ;;

                "${git_remotes[1]}" )
                    printf "\n»» An Intermission\n»  %s repository found." "${git_remotes[1]}"
                    setIdentity "${local_id_1[@]}"
                    exit 0
                    ;;

                * )
                    printf "\n»  pre-commit hook: unknown error\n» Quitting.\n"
                    exit 1
                    ;;

            esac
        fi
    done
else
    printf "\n»» An Intermission\n»  No remote repository set. Using local fallback identity:\n"
    printf "»  User: %s\n»  Mail: %s\n\n" "${local_fallback_id[@]}"

    # Get the user's attention for a second
    sleep 1

    git config --local user.name "${local_fallback_id[0]}"
    git config --local user.email "${local_fallback_id[1]}"
fi

exit 0

EDIT:

Więc przepisałem hook jako hook i polecenie w Pythonie. Dodatkowo możliwe jest również wywołanie skryptu jako polecenia Git (git passport). Możliwe jest również zdefiniowanie dowolnego liczba identyfikatorów wewnątrz pliku configfile (~/.gitpassport), które można wybrać w monicie. Projekt można znaleźć na stronie github.com: git-passport-polecenie Git i hook napisane w Pythonie do zarządzania wieloma kontami Git / tożsamościami użytkowników .

 33
Author: Saucier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-12 00:30:55

Jeśli nie chcesz mieć domyślnego adresu e-mail (adres e-mail łączy się z użytkownikiem github ), możesz skonfigurować, że chcesz zostać zapytany. Jak możesz to zrobić zależy od używanej wersji Gita, zobacz poniżej.

(zamierzoną) wadą jest to, że musisz skonfigurować swój adres e-mail (i imię) raz dla każdego repozytorium. Więc nie możesz tego zapomnieć.

Wersja
[user]
    name = Your name
    email = "(none)"

W Twojej globalnej konfiguracji ~/.gitconfig zgodnie z komentarzem dana Aloni in Orr Sella ' s blog post . Podczas próby wykonania pierwszego commita w repozytorium, git nie powiedzie się z ładnym Komunikatem:

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got '(none)')

Nazwa jest pobierana z globalnej konfiguracji, gdy adres e-mail jest ustawiony lokalnie (wiadomość nie jest idealnie dokładna).

2.7.0 ≤ Wersja

Zachowanie w wersjach Orr Sella ' s blog post . To rozwiązanie działa również dla innych wersji, ale inne rozwiązania nie dla tej wersji.

Wersja ≥ 2.8.0

Dan Aloni dodał opcję, aby osiągnąć to zachowanie (zobacz uwagi do wydania). Użyj go z:

[user]
    useConfigOnly = true

Aby to działało, nie możesz podać imienia i nazwiska ani adresu e-mail w globalnej konfiguracji. Następnie przy pierwszym zatwierdzeniu pojawia się komunikat o błędzie

fatal: user.useConfigOnly set but no name given

Więc wiadomość nie jest zbyt pouczająca, ale skoro Ustawiłeś tę opcję jawnie, powinieneś wiedzieć, co robić. W w przeciwieństwie do rozwiązania wersji

 23
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 16:09:57

Jedno polecenie github accounts switch

To rozwiązanie przyjmuje postać pojedynczego aliasu git. Po wykonaniu, bieżący użytkownik projektu zostanie przypisany do innego konta

Generowanie kluczy ssh

ssh-keygen -t rsa -C "[email protected]" -f '/Users/arnaudrinquin/.ssh/id_rsa'

[...]

ssh-keygen -t rsa -C "[email protected]" -f '/Users/arnaudrinquin/.ssh/id_rsa_pro'

Połącz je z kontami GitHub / Bitbucket

  1. kopiowanie domyślnego klucza publicznego pbcopy < ~/.ssh/id_rsa.pub
  2. Zaloguj się do konta GitHub
  3. wklej klucz na stronie add SSH key github
  4. skopiuj inny klucz publiczny pbcopy < ~/.ssh/id_rsa_pro.pub
  5. Powtórz i dostosuj kroki od 2 do 4 dla każdego innego konta

Punkt 1. Automatyczne przełączanie klawiszy ssh.

Możemy skonfigurować ssh, Aby wysłać użycie określonego klucza szyfrującego w zależności od host. Fajne jest to, że możesz mieć kilka aliasów dla tego samego hostname.

Zobacz przykład ~/.ssh/config plik:

# Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

# Professional github alias
Host github_pro
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_pro

Git remote configuration

Możesz teraz używać tych aliasów w git remotes zmieniając [email protected] by git@github_pro.

Możesz zmienić istniejące piloty projektów (używając czegoś takiego jak git remote origin set-url git@github_pro:foo/bar.git) lub dostosować je bezpośrednio podczas klonowania.

git clone [email protected]:ArnaudRinquin/atom-zentabs.git

Używając aliasu, staje się:

git clone git@github_pro:ArnaudRinquin/atom-zentabs.git

Punkt 2. Zmiana użytkownika git.e-mail

Ustawienia Git config mogą być globalne lub dla każdego projektu. W naszym przypadku chcemy ustawienia dla każdego projektu. Bardzo łatwo go zmienić:

git config user.email '[email protected]'

Choć jest to łatwe, to trwa długo dla jesteśmy deweloperami. Możemy do tego napisać bardzo prosty alias git.

Dodamy go do pliku ~/.gitconfig.

[user]
    name = Arnaud Rinquin
    email = [email protected]

...

[alias]
    setpromail = "config user.email '[email protected]'"

Następnie, wszystko, co musimy zrobić, to git setpromail aby zmienić nasz e-mail tylko dla tego projektu.

Punkt 3. Jeden przełącznik?!

Czy nie byłoby miło przełączyć się z domyślnego konta na określone z jednym poleceniem bez parametru? Jest to zdecydowanie możliwe. Polecenie to będzie miało dwa kroki:

  • Zmień aktualne projekty zdalne do wybranych aliasów
  • Zmień bieżącego użytkownika projektu.email config

Mamy już rozwiązanie jednego polecenia dla drugiego kroku, ale pierwszy jest o wiele trudniejszy. Jedno polecenie remote host change

Oto rozwiązanie w postaci kolejnej komendy Git alias do dodania do twojego ~/.gitconfig:

[alias]
  changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"

Pozwala to na zmianę wszystkich pilotów z jednego hosta na drugi (alias). Zobacz przykład:

$ > git remote -v
origin  [email protected]:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin  [email protected]:ArnaudRinquin/arnaudrinquin.github.io.git (push)

$ > git changeremotehost github.com github_pro

$ > git remote -v
origin  git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin  git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (push)

Połącz je wszystkie

Teraz musimy połączyć te dwie komendy w jedną, jest to dość proste. Zobacz, jak również integruję przełączanie hostów bitbucket.

[alias]
  changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
  setpromail = "config user.email '[email protected]'"
  gopro = !sh -c \"git changeremotehost github.com github_pro && git changeremotehost bitbucket.com bitbucket_pro && git setpromail\"

Link Źródłowy-Tutorial

 22
Author: Kaleem Ullah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-12 10:37:08

Inną opcją pozwalającą git pracować z wieloma nazwami / e-mailami jest aliasowanie git i użycie znacznika -c do nadpisania konfiguracji globalnej i repozytorium.

Na przykład, definiując alias:

alias git='/usr/bin/git -c user.name="Your name" -c user.email="[email protected]"'

Aby sprawdzić, czy to działa, po prostu wpisz git config user.email:

$ git config user.email
[email protected]

Zamiast aliasu, możesz również umieścić Niestandardowy git plik wykonywalny w swoim $PATH.

#!/bin/sh
/usr/bin/git -c user.name="Your name" -c user.email="[email protected]" "$@"

Zaletą tej metody w stosunku do specyficznego dla repozytorium .git/config jest to, że ma ona zastosowanie do każde repozytorium git, Gdy program custom git jest aktywny. W ten sposób możesz łatwo przełączać się między użytkownikami / nazwami bez modyfikowania żadnej (współdzielonej) konfiguracji.

 16
Author: Rob W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 21:41:10

Istnieje proste rozwiązanie, które wydaje się działać dobrze, aby uniknąć błędów.

Po Prostu Usuń sekcję [user] ze swojego ~/.gitconfig, co uniemożliwi dokonywanie zmian bez ustawiania user.name dla każdego repozytorium.

W swoim ~/.bashrc dodaj kilka prostych aliasów dla użytkownika i e-mail:

alias ggmail='git config user.name "My Name";git config user.email [email protected]'
alias gwork='git config user.name "My Name";git config user.email [email protected]'
 8
Author: Zantier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 15:56:22

With conditional includes W Git 2.13, możliwe jest teraz współistnienie wielu użytkowników/e-maili na jednej maszynie z niewielką ilością pracy.

user.gitconfig ma moje nazwisko i e-mail. work-user.gitconfig ma moje służbowe imię i e-mail. Oba pliki znajdują się na ścieżce ~.

Więc moje imię/adres e-mail ma zastosowanie domyślnie. Dla katalogu c:/work/ stosuje się nazwę/adres e-mail mojej pracy. Dla katalogu c:/work/github/ stosuje się moje imię / adres e-mail. Działa to po zastosowaniu ostatniego ustawienia.

# ~/.gitconfig
[include]
    path = user.gitconfig
[includeIf "gitdir/i:c:/work/"]
    path = work-user.gitconfig
[includeIf "gitdir/i:c:/work/github/"]
    path = user.gitconfig

gitdir na rozróżnia wielkość liter i {[7] } jest niewrażliwa na wielkość liter.

"gitdir/i:github/" zastosuje include warunkowy dla dowolnego katalogu z github w jego ścieżce.

 8
Author: hIpPy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-18 00:13:26

Aliasy Git (i sekcje w GIT configs) na ratunek!

Dodaj alias (z linii poleceń):

git config --global alias.identity '! git config user.name $(git config user.$1.name); git config user.email $(git config user.$1.email); :'

Następnie Ustaw, na przykład

git config --global user.github.name "your github username"
git config --global user.github.email [email protected]

I w Nowym lub sklonowanym repo możesz uruchomić to polecenie:

git identity github

To rozwiązanie nie jest automatyczne, ale wyłącza użytkownika i e-mail w Twoim globalnym~/.gitconfig wymusiłby na git przypomnienie, aby ustawić je ręcznie w każdym nowym lub sklonowanym repo.

git config --global --unset user.name
git config --global --unset user.email
 7
Author: codesnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-24 21:01:12

Ta odpowiedź jest częściowo zainspirowana postem @Saucier, ale szukałem zautomatyzowanego sposobu, aby ustawić user.name i user.email na zasadzie per repo, w oparciu o pilota, który był nieco bardziej lekki niż pakiet Git-passport, który opracował. Również h / t do @ John dla ustawienia useConfigOnly. Oto moje rozwiązanie:

.gitconfig zmiany:

[github]
    name = <github username>
    email = <github email>
[gitlab]
    name = <gitlab username>
    email = <gitlab email>
[init]
    templatedir = ~/.git-templates
[user]
    useConfigOnly = true

Post-checkout hook który należy zapisać w następującej ścieżce: ~/.git-templates/hooks/post-checkout:

#!/usr/bin/env bash

# make regex matching below case insensitive
shopt -s nocasematch

# values in the services array should have a corresponding section in
# .gitconfig where the 'name' and 'email' for that service are specified
remote_url="$( git config --get --local remote.origin.url )"
services=(
    'github'
    'gitlab'
)

set_local_user_config() {
    local service="${1}"
    local config="${2}"
    local service_config="$( git config --get ${service}.${config} )"
    local local_config="$( git config --get --local user.${config} )"

    if [[ "${local_config}" != "${service_config}" ]]; then
        git config --local "user.${config}" "${service_config}"
        echo "repo 'user.${config}' has been set to '${service_config}'"
    fi
}

# if remote_url doesn't contain the any of the values in the services
# array the user name and email will remain unset and the
# user.useConfigOnly = true setting in .gitconfig will prompt for those
# credentials and prevent commits until they are defined
for s in "${services[@]}"; do
    if [[ "${remote_url}" =~ "${s}" ]]; then
        set_local_user_config "${s}" 'name'
        set_local_user_config "${s}" 'email'
        break
    fi
done

Używam różnych poświadczenia dla github i gitlab, ale te odniesienia w powyższym kodzie mogą zostać zastąpione lub rozszerzone o dowolną usługę, której używasz. Aby hook po kasie automatycznie ustawiał nazwę użytkownika i adres e-mail lokalnie dla repo po kasie upewnij się, że nazwa usługi pojawia się w zdalnym adresie url, dodaj ją do tablicy usług w skrypcie post-checkout i utwórz dla niej sekcję w .gitconfig, która zawiera nazwę użytkownika i adres e-mail dla tej usługi.

Jeśli żadna z usług nazwy pojawiają się w zdalnym url lub repo nie ma Zdalnego Nazwa użytkownika i e-mail nie będą ustawiane lokalnie. W takich przypadkach zostanie uruchomione ustawienie user.useConfigOnly, które nie pozwoli na dokonywanie zmian, dopóki nazwa użytkownika i adres e-mail nie zostaną ustawione na poziomie repo i poprosi użytkownika o skonfigurowanie tych informacji.

 6
Author: Grant Humphries,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 01:35:17

GIT_AUTHOR_EMAIL + lokalne .bashrc

.bashrc_local: nie śledź tego pliku, umieść go tylko na komputerze roboczym:

export GIT_AUTHOR_EMAIL='[email protected]'
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"

.bashrc: Śledź ten plik, spraw, aby był taki sam zarówno na komputerach roboczych, jak i domowych:

F="$HOME/.bashrc_local"
if [ -r "$F" ]; then
    . "$F"
fi

Używam https://github.com/technicalpickles/homesick aby zsynchronizować moje pliki dotfiles.

Gdyby tylko gitconfig akceptował zmienne środowiskowe: rozszerzenie zmiennej powłoki w git config

 4
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:48

Środowisko Windows

Dodatkowe to może być zmodyfikowane z Git Extensions --> Settings --> Global Settings, jeśli masz go zainstalowany w swoich systemach.

Gitextensions-latest-release

Kliknij prawym przyciskiem myszy na folderze / katalogu w środowisku Windows, aby uzyskać dostęp do tych ustawień. Tutaj wpisz opis obrazka

Aktualizacja : Jak przełączać / utrzymywać wiele ustawień w wersji 2.49 Jak zmienić / utrzymać wiele ustawień w wersji 2.49

 3
Author: Abhijeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 10:09:46

Może i jest to prosty hack, ale jest przydatny. Wystarczy wygenerować 2 klucze ssh jak poniżej.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GowthamSai/.ssh/id_rsa): work
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in damsn.
Your public key has been saved in damsn.pub.
The key fingerprint is:
SHA256:CrsKDJWVVek5GTCqmq8/8RnwvAo1G6UOmQFbzddcoAY [email protected]
The key's randomart image is:
+---[RSA 4096]----+
|. .oEo+=o+.      |
|.o o+o.o=        |
|o o o.o. +       |
| =.+ .  =        |
|= *+.   S.       |
|o*.++o .         |
|=.oo.+.          |
| +. +.           |
|.o=+.            |
+----[SHA256]-----+

W ten sam sposób stwórz jeszcze jeden dla osobistego. Więc masz 2 klucze ssh, pracę i firmę. Kopia pracy.pub, praca, sprawy osobiste.pub, osobisty do ~/.Katalog ssh/.

Następnie Utwórz skrypt powłoki z następującymi liniami i nazwij go jako crev.sh (rewers firmy) o następującej treści.

cp ~/.ssh/work ~/.ssh/id_rsa
cp ~/.ssh/work.pub ~/.ssh/id_rsa.pub

W ten sam sposób, stwórz jeszcze jedną o nazwie prev.sh (personal Reverse) o następującej treści.

cp ~/.ssh/personal ~/.ssh/id_rsa
cp ~/.ssh/personal.pub ~/.ssh/id_rsa.pub

In ~/.bashrc dodaj aliasy dla tych skryptów jak poniżej

alias crev="sh ~/.ssh/crev.sh"
alias prev="sh ~/.ssh/prev.sh"
source ~/.bashrc

Kiedy chcesz korzystać z firmy, po prostu zrób crev, a jeśli chcesz korzystać z osobistego do prev: - p.

Dodaj te klucze ssh do swoich kont github. Upewnij się, że nie masz wygenerowanego id_rsa, ponieważ te skrypty nadpiszą id_rsa. Jeśli wygenerowałeś już id_rsa, użyj go dla jednego z kont. Skopiuj je jako osobiste i pomiń generowanie kluczy osobistych.

 2
Author: 7H3 IN5ID3R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-26 04:43:45

Zrobiłem funkcję bash, która to obsługuje. Oto repo Github .

Dla zapisu:

# Look for closest .gitconfig file in parent directories
# This file will be used as main .gitconfig file.
function __recursive_gitconfig_git {
    gitconfig_file=$(__recursive_gitconfig_closest)
    if [ "$gitconfig_file" != '' ]; then
        home="$(dirname $gitconfig_file)/"
        HOME=$home /usr/bin/git "$@"
    else
        /usr/bin/git "$@"
    fi
}

# Look for closest .gitconfig file in parents directories
function __recursive_gitconfig_closest {
    slashes=${PWD//[^\/]/}
    directory="$PWD"
    for (( n=${#slashes}; n>0; --n ))
    do
        test -e "$directory/.gitconfig" && echo "$directory/.gitconfig" && return 
        directory="$directory/.."
    done
}


alias git='__recursive_gitconfig_git'
 1
Author: Arount,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-07 16:48:38

Coś w stylu Rob w ' s answer , ale zezwalając na inny klucz ssh, i działa ze starszymi wersjami Gita (które nie mają np. rdzenia.sshcommand config).

Utworzyłem plik ~/bin/git_poweruser z uprawnieniami wykonywalnymi i w ścieżce:

#!/bin/bash

TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT

cat > $TMPDIR/ssh << 'EOF'
#!/bin/bash
ssh -i $HOME/.ssh/poweruserprivatekey $@
EOF

chmod +x $TMPDIR/ssh
export GIT_SSH=$TMPDIR/ssh

git -c user.name="Power User name" -c user.email="[email protected]" $@

Kiedy chcę coś zatwierdzić lub wypchnąć jako "Power User", używam git_poweruser zamiast git. Powinien działać na każdym katalogu i nie wymaga zmian w .gitconfig lub .ssh/config, przynajmniej nie w moim.

 0
Author: Jellby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 07:43:03

Oto, co właśnie znalazłem po wykonaniu kroków w wielu odpowiedzi tutaj

Jak skonfigurować ustawienia wielu kluczy SSH dla różnych kont github

Możesz zacząć sprawdzać aktualnie zapisane klucze $ ssh-add-l

Jeśli zdecydujesz się usunąć wszystkie buforowane klucze przed (opcjonalnie, uważaj na to ) $ ssh-add-d

Następnie możesz utworzyć klucz SSH pub/priv połączony z każdym e-mailem / kontem, które chcesz / potrzebujesz użycie

$ cd ~/.ssh
$ ssh-keygen -t rsa -C "[email protected]" <-- save it as "id_rsa_work"
$ ssh-keygen -t rsa -C "[email protected]" <-- save it as "id_rsa_pers"

Po wykonaniu tego polecenia zostaną utworzone następujące pliki

~/.ssh/id_rsa_work      
~/.ssh/id_rsa_work.pub

~/.ssh/id_rsa_pers
~/.ssh/id_rsa_pers.pub 

Upewnij się, że agent uwierzytelniania Działa

$ eval `ssh-agent -s`

Dodaj wygenerowane klucze w następujący sposób (z~/.folder ssh)

$ ssh-add id_rsa_work
$ ssh-add id_rsa_pers

Teraz możesz ponownie sprawdzić zapisane klucze

$ ssh-add -l

Teraz musisz dodać wygenerowane klucze publiczne do kluczy dostępu serwera github / bickbuket

Klonowanie każdego z repozytoriów do różnych folderów

Przejdź do folderu gdzie user work będzie używany i zrobi to

$ git config user.name "Working Hard"
$ git config user.email "[email protected]" 

Aby zobaczyć, co to robi, sprawdź zawartość ".git/ config "

Przejdź do folderu, w którym zostanie użyty użytkownik activehacker i zrób to

$ git config user.name "Personal Account"
$ git config user.email "[email protected]" 

Aby zobaczyć, co to robi, sprawdź zawartość ".git/ config "

Po tym wszystkim będziesz mógł zatwierdzić swój osobisty i roboczy Kod przez przełącznik folderów

Jeśli masz jakieś problemy daj mi znać [email protected]

 0
Author: Mauricio Gracia Gutierrez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-25 17:33:58

Chociaż większość pytań odpowiadała na OP, po prostu musiałem przez to przejść i bez googlowania byłem w stanie znaleźć najszybsze i najprostsze rozwiązanie. Oto proste kroki:

  • skopiuj istniejące .gitconfg z innego repo
  • wklej do nowo dodanego repo
  • zmień wartości w pliku .gitconfig, takie jak nazwa, adres e-mail i nazwa użytkownika [user] name = John email = [email protected] username = john133
  • Dodaj nazwę pliku do listy .gitignore, aby upewnić się, że nie zatwierdzisz .gitconfig Pliku do repo
 0
Author: Tatarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 19:55:05