Na mojej ~/.gitconfig
liście podam mój osobisty adres e-mail [user]
, ponieważ właśnie tego chcę używać do repozytoriów Github.
Ale ostatnio zacząłem używać git również do pracy. Repozytorium git mojej firmy pozwala mi na zatwierdzenie, ale kiedy wysyła ogłoszenia o nowych zestawach zmian, mówi, że pochodzą one od Anonimowego, ponieważ nie rozpoznaje adresu e-mail w moim .gitconfig
- przynajmniej taka jest moja teoria.
Czy można podać wiele [user]
definicji w .gitconfig
? A może jest jakiś inny sposób na zastąpienie wartości domyślnej .gitconfig
określonego katalogu? W moim przypadku sprawdzam cały kod pracy ~/worksrc/
- czy istnieje sposób na określenie .gitconfig
tylko dla tego katalogu (i jego podkatalogów)?
git
git-config
Brock Boland
źródło
źródło
Odpowiedzi:
Możesz skonfigurować indywidualne repozytorium, aby używało określonego użytkownika / adresu e-mail, który zastępuje konfigurację globalną. Z katalogu głównego repozytorium uruchom
podczas gdy domyślny użytkownik / e-mail jest skonfigurowany w twoim ~ / .gitconfig
źródło
.git/config
plikugit config --edit
igit config --global --edit
. W przypadku pominięcia komentarza Abizern , plik konfiguracyjny repozytorium znajduje się pod adresem<repo-root>/.git/config
.Git 2.13
wydanym dzisiaj.Od wersji 2.13 możliwe jest rozwiązanie tego problemu za pomocą nowo wprowadzonych Uwarunkowań warunkowych .
Przykład:
Globalna konfiguracja ~ / .gitconfig
Konfiguracja specyficzna dla pracy ~ / work / .gitconfig
źródło
git config --list
w różnych katalogach. W podkatalogach~/work/
zawierających repozytorium gitincludeIf
obowiązuje. Zauważ, że w podkatalogach~/work/
, które nie zawierają repozytorium git,includeIf
nie jest ono wykonywane.Lub możesz dodać następujące informacje do
.git/config
pliku lokalnegoźródło
Jedno polecenie przełącza konta github
To rozwiązanie ma postać pojedynczego aliasu git. Po wykonaniu bieżący użytkownik projektu zostanie przyłączony do innego konta
Wygeneruj klucze ssh
Połącz je ze swoimi kontami GitHub / Bitbucket
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
stronie githubpbcopy < ~/.ssh/id_rsa_pro.pub
Krok 1. Automatyczne przełączanie klucza ssh.
Możemy skonfigurować
ssh
wysyłanie użycia określonego klucza szyfrowania w zależności odhost
. Fajną rzeczą jest to, że możesz mieć kilka aliasów dla tego samegohostname
.Zobacz ten przykładowy
~/.ssh/config
plik:zdalna konfiguracja git
Możesz teraz używać tych aliasów w pilotach git, zmieniając
[email protected]
wedługgit@github_pro
.Możesz zmienić istniejące piloty projektów (używając czegoś podobnego
git remote set-url origin git@github_pro:foo/bar.git
) lub dostosować je bezpośrednio podczas klonowania.przy użyciu aliasu staje się:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Krok 2. Zmiana adresu e-mail git user.email
Ustawienia konfiguracji Git mogą być globalne lub dla jednego projektu. W naszym przypadku chcemy ustawienia dla każdego projektu. Bardzo łatwo to zmienić:
Choć jest to łatwe, trzeba długo czekać na to, kim jesteśmy programiści. Możemy do tego napisać bardzo prosty alias git.
Dodamy go do
~/.gitconfig
pliku.Następnie
git setpromail
wystarczy zmienić adres e-mail tylko dla tego projektu.Krok 3. Jeden przełącznik poleceń, proszę ?!
Czy nie byłoby miło przejść z domyślnego konta na określone za pomocą pojedynczego polecenia bez parametrów? Jest to zdecydowanie możliwe. To polecenie będzie miało dwa kroki:
Mamy już jedno rozwiązanie dla drugiego kroku, ale pierwsze jest o wiele trudniejsze. Zmiana zdalnego hosta za pomocą jednego polecenia
Oto rozwiązanie w postaci innego polecenia aliasu git, które można dodać do
~/.gitconfig
:Umożliwia to zmianę wszystkich pilotów z jednego hosta na inny (alias). Zobacz przykład:
Połącz je wszystkie
Teraz musimy tylko połączyć dwa polecenia w jedno, jest to dość łatwe. Zobacz, jak integruję przełączanie hostów bitbucket.
Link do źródła - samouczek
źródło
setpromail
alias robiconfig --global
zamiast tego (i mam inne ustawione aliasy do ustawiania różnych adresów e-mail). To działa!useConfigOnly = true
z drugą odpowiedzią.Po otrzymaniu inspiracji z postu na blogu Orr Selli napisałem haczyk przed zatwierdzeniem (rezyduje w
~/.git/templates/hooks
), który ustawiałby konkretne nazwy użytkowników i adresy e-mail na podstawie informacji zawartych w lokalnym repozytorium./.git/config
:Musisz umieścić ścieżkę do katalogu szablonów w swoim
~/.gitconfig
:Następnie każdy
git init
lubgit clone
odbierze ten zaczep i zastosuje dane użytkownika podczas następnegogit commit
. Jeśli chcesz zastosować hak do już istniejącychgit init
repozytoriów, po prostu uruchom repozytorium w celu ponownego zainicjowania.Oto hak, który wymyśliłem (nadal wymaga dopracowania - sugestie są mile widziane). Zapisz to jako
lub
i upewnij się, że jest wykonywalny:
chmod +x ./post-checkout || chmod +x ./pre_commit
EDYTOWAĆ:
Więc przepisałem hak jako hak i polecenie w Pythonie. Dodatkowo możliwe jest również wywołanie skryptu jako polecenia Git (
git passport
). Możliwe jest również zdefiniowanie dowolnej liczby identyfikatorów w pliku configfile (~/.gitpassport
), które można wybrać w monicie. Możesz znaleźć projekt na github.com: git-passport - Komenda Git i hak napisane w Pythonie do zarządzania wieloma kontami Git / tożsamościami użytkowników .źródło
chmod +x post-checkout
, 2.git_remotes
Wartości zaczynają część całego hosta, na przykład[email protected]
, 3.local_id
wartości powinny być edytowane przez użytkownika do odpowiednich nazw i adresów e-mail.git init
nowe projekty z IDE, takie jakeclipse
(które nie obsługują interaktywnych wyzwalaczy poprzedzających zatwierdzenie)Jeśli nie chcesz mieć domyślnego adresu e-mail (adres e- mail prowadzi do użytkownika github ), możesz skonfigurować, że chcesz być pytany. Jak to zrobić, zależy od używanej wersji git, patrz poniżej.
(Zamierzoną) wadą jest to, że musisz skonfigurować swój adres e-mail (i swoje imię) raz dla każdego repozytorium. Nie możesz więc tego zapomnieć.
Wersja <2.7.0
w globalnej konfiguracji,
~/.gitconfig
jak stwierdzono w komentarzu Dana Aloni w poście na blogu Orr Selli . Podczas próby wykonania pierwszego zatwierdzenia w repozytorium git kończy się niepowodzeniem z ładnym komunikatem:Nazwa jest pobierana z konfiguracji globalnej, gdy adres e-mail jest ustawiany lokalnie (wiadomość nie jest idealnie dokładna).
2.7.0 ≤ Wersja <2.8.0
Zachowanie w wersjach <2.7.0 nie było zamierzone i naprawione w wersji 2.7.0. Nadal możesz użyć haka przed zatwierdzeniem, jak opisano w blogu Orr Selli . To rozwiązanie działa również w przypadku innych wersji, ale inne rozwiązania nie dotyczą tej wersji.
Wersja ≥ 2.8.0
Dan Aloni dodał opcję osiągnięcia tego zachowania (patrz informacje o wersji ). Używaj go z:
Aby działało, nie możesz podać nazwy ani adresu e-mail w konfiguracji globalnej. Następnie przy pierwszym zatwierdzeniu pojawia się komunikat o błędzie
Wiadomość nie jest więc bardzo pouczająca, ale ponieważ wyraźnie ustawiłeś tę opcję, powinieneś wiedzieć, co robić. W przeciwieństwie do rozwiązania w wersji <2.7.0, zawsze musisz ręcznie ustawić zarówno nazwę, jak i adres e-mail.
źródło
git bisect
znajdowałem, że commit 19ce497c ... wprowadził to zachowanie. Jednak niezależnie od wersji (2.5 - 2.7) mogę używaćemail =
(bez argumentów) w konfiguracji i pokazuje to samo zachowanie, coemail = "(none)"
w starszych wersjach. Czy możesz to potwierdzić? Jeśli tak, zmienię swoją odpowiedź. Jestem po prostu sceptyczny, ponieważ wydaje się to tak oczywiste i wcześniej go nie używałem.email =
w wersji 2.7.0, Git nadal zgaduje adres e-mail na podstawie nazwy użytkownika i nazwy hosta. Teraz używampre-commit
podejścia na blogu Selli. Powiadomiłem również Dana Aloniego, który wpadł na ten"(none)"
pomysł w pościeZ uwarunkowanymi obejmuje zawartym w Git 2.13 możliwe jest współistnienie wielu użytkowników / wiadomości e-mail na jednym komputerze przy niewielkiej pracy.
user.gitconfig
ma moje imię i nazwisko oraz adres e-mail.work-user.gitconfig
ma moje imię i nazwisko oraz adres e-mail. Oba pliki są w~
ścieżce.Więc moje imię i nazwisko / adres e-mail mają zastosowanie domyślnie. W przypadku
c:/work/
reżimu stosowana jest nazwa mojej pracy / adres e-mail. W przypadkuc:/work/github/
reżimu stosowane jest moje imię i nazwisko / adres e-mail. Działa to po zastosowaniu ostatniego ustawienia.gitdir
rozróżnia małe i wielkie litery orazgitdir/i
wielkie litery."gitdir/i:github/"
zastosuje warunkowe dołączanie do każdego katalogu zegithub
swoją ścieżką.źródło
gitdir/i
pomogło mi (o czym jego odpowiedź nie wspomina).Inną opcją
git
pracy z wieloma nazwami / e-mailami jest aliasinggit
i korzystanie z-c
flagi do zastąpienia konfiguracji globalnej i specyficznej dla repozytorium.Na przykład, definiując alias:
Aby zobaczyć, czy to działa, po prostu wpisz
git config user.email
:Zamiast aliasu możesz również umieścić niestandardowy
git
plik wykonywalny w swoim pliku$PATH
.Zaletą tej metody w stosunku do konkretnego repozytorium
.git/config
jest to, że ma ona zastosowanie do każdegogit
repozytorium, gdygit
aktywny jest program niestandardowy . W ten sposób możesz łatwo przełączać się między użytkownikami / nazwami bez modyfikowania dowolnej (współdzielonej) konfiguracji.źródło
git aliasy (i sekcje w konfiguracjach git) na ratunek!
dodaj alias (z wiersza poleceń):
następnie ustaw na przykład
a w nowym lub sklonowanym repozytorium możesz uruchomić to polecenie:
To rozwiązanie nie jest automatyczne, ale rozbraja użytkownika i pocztę e-mail w Twojej globalnej
~/.gitconfig
konfiguracji iuser.useConfigOnly
powoduje,true
że git będzie przypominał o ustawieniu ich ręcznie w każdym nowym lub sklonowanym repozytorium.źródło
Oto pełne kroki po przeczytaniu wielu odpowiedzi tutaj
Jak skonfigurować ustawienia wielu kluczy SSH dla różnych kont github
Możesz zacząć sprawdzać obecnie zapisane klucze
Jeśli zdecydujesz się wcześniej usunąć wszystkie klucze z pamięci podręcznej ( opcjonalnie, uważaj na to )
Następnie możesz utworzyć klucz ssh pub / priv powiązany z każdym adresem e-mail / kontem, którego chcesz / potrzebujesz użyć
Po wykonaniu tych poleceń zostaną utworzone następujące pliki
Upewnij się, że agent uwierzytelniania jest uruchomiony
Dodaj wygenerowane klucze w następujący sposób (z folderu ~ / .ssh)
Teraz możesz ponownie sprawdzić zapisane klucze
Teraz potrzebujesz dodać wygenerowane klucze publiczne do swoich kluczy dostępu do serwera github / bickbuket
Sklonuj każde repozytorium do różnych folderów
Przejdź do folderu, w którym będzie działać praca użytkownika , i wykonaj to
Aby zobaczyć, co to robi, sprawdź zawartość „.git / config”
Przejdź do folderu, w którym będzie pracować użytkownik pers , i wykonaj to
Aby zobaczyć, co to robi, sprawdź zawartość „.git / config”
Po tym wszystkim będziesz mógł zatwierdzić swój osobisty i służbowy kod, po prostu przełączając się między tymi dwoma folderami
Jeśli używasz Git Bash i chcesz wygenerować klucze ssh w systemie Windows, wykonaj następujące kroki:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
źródło
Istnieje proste rozwiązanie, które wydaje się działać dobrze w celu uniknięcia błędów.
Po prostu usuń
[user]
sekcję z twojego~/.gitconfig
, co uniemożliwi ci dokonywanie jakichkolwiek zatwierdzeń bez ustawianiauser.name
dla każdego repozytorium.W swoim
~/.bashrc
dodaj kilka prostych aliasów dla użytkownika i e-maila:źródło
Ta odpowiedź jest częściowo zainspirowana postem @Saucier, ale szukałem zautomatyzowanego sposobu ustawienia
user.name
iuser.email
na zasadzie repo, opartego na pilocie, który niż pakiet paszportowy git, który opracował . Również h / t do @John dla ustawienia useConfigOnly. Oto moje rozwiązanie:.gitconfig
zmiany:hak po kasie, który należy zapisać na następującej ścieżce
~/.git-templates/hooks/post-checkout
:Używam różnych danych uwierzytelniających dla github i gitlab, ale te odniesienia w powyższym kodzie można zastąpić lub rozszerzyć dowolną usługą, z której korzystasz. Aby hak po wykonaniu transakcji automatycznie ustawiał nazwę użytkownika i adres e-mail lokalnie dla repozytorium po kasie, upewnij się, że nazwa usługi pojawia się w zdalnym adresie URL, dodaj ją do tablicy usług w
post-checkout
skrypcie i utwórz dla niej sekcję Twój.gitconfig
zawierający twoją nazwę użytkownika i adres e-mail dla tej usługi.Jeśli żadna z nazw usług nie pojawi się w zdalnym adresie URL lub w repozytorium nie ma pilota, nazwa użytkownika i adres e-mail nie zostaną ustawione lokalnie. W takich przypadkach
user.useConfigOnly
ustawienie będzie działać, co nie pozwoli na dokonywanie zatwierdzeń, dopóki nazwa użytkownika i adres e-mail nie zostaną ustawione na poziomie repo, i poprosi użytkownika o skonfigurowanie tych informacji.źródło
chmod 755
skrypcie przechwytującym. W przeciwnym razie zostanie skopiowany, ale nigdy nie zostanie wykonany.GIT_AUTHOR_EMAIL
+ lokalny.bashrc
.bashrc_local
: nie śledź tego pliku, umieść go tylko na komputerze służbowym:.bashrc
: śledź ten plik, zrób to samo na komputerach roboczych i domowych:Korzystam z https://github.com/technicalpickles/homesick do synchronizacji moich plików dot.
Gdyby tylko gitconfig zaakceptował zmienne środowiskowe: Rozszerzenie zmiennych powłoki w git config
źródło
Środowisko Windows
Dodatkowo można to zmienić
Git Extensions --> Settings --> Global Settings
, jeśli masz zainstalowany w swoich systemach.gitextension-najnowsze-wydanie
Kliknij prawym przyciskiem myszy folder / katalog w środowisku Windows, aby uzyskać dostęp do tych ustawień.
Aktualizacja : Jak przełączać / utrzymywać wiele ustawień w wersji 2.49
źródło
Może to prosty hack, ale jest użyteczny. Po prostu wygeneruj 2 klucze ssh jak poniżej.
W ten sam sposób stwórz jeszcze jeden dla osobistego. Masz więc 2 klucze ssh, pracę i firmę. Skopiuj work.pub, work, personal.pub, personal do ~ / .ssh / Directory.
Następnie utwórz skrypt powłoki z następującymi wierszami i nadaj mu nazwę crev.sh (Company Reverse) o następującej treści.
W ten sam sposób utwórz jeszcze jeden o nazwie prev.sh (Personal Reverse) o następującej treści.
w ~ / .bashrc dodaj aliasy dla tych skryptów jak poniżej
Ilekroć chcesz skorzystać z towarzystwa, po prostu zrób crev, a jeśli chcesz skorzystać z osobistego, zrób prev :-p.
Dodaj te klucze ssh do swoich kont GitHub. Upewnij się, że nie wygenerowano wcześniej id_rsa, ponieważ te skrypty zastąpią id_rsa. Jeśli już wygenerowałeś id_rsa, użyj tego dla jednego z kont. Skopiuj je jako osobiste i pomiń generowanie kluczy osobistych.
źródło
Zrobiłem funkcję bash, która to obsługuje. Oto repozytorium Github .
Do wiadomości:
źródło
Po prostu dodaj to do ~ / .bash_profile, aby przełączać się między domyślnymi kluczami dla github.com
źródło
Możesz także użyć
git commit --author "Your Name <[email protected]>"
w momencie wykonywania zatwierdzenia w repozytorium, w którym chcesz zatwierdzić jako inny użytkownik.źródło
Coś jak odpowiedź Roba W , ale dopuszczenie innego klucza ssh i działa ze starszymi wersjami git (które nie mają np. Konfiguracji core.sshCommand).
Plik utworzyłem
~/bin/git_poweruser
z uprawnieniami do wykonywania w ścieżce:Ilekroć chcę zatwierdzić lub przekazać coś jako „Użytkownik
git_poweruser
zaawansowany ”, używam zamiastgit
. Powinien działać na każdym katalogu i nie wymaga zmian.gitconfig
lub.ssh/config
przynajmniej nie w moim.źródło
Chociaż większość pytań w pewnym stopniu odpowiadała PO, po prostu musiałem przez to przejść i nawet bez googlingu byłem w stanie znaleźć najszybsze i najprostsze rozwiązanie. Oto proste kroki:
.gitconfg
z drugiego repozytorium.gitconfig
pliku, takie jak nazwa, adres e-mail i nazwa użytkownika[user] name = John email = [email protected] username = john133
.gitignore
listy, aby upewnić się, że nie zatwierdzasz.gitconfig
pliku do repozytorium pracyźródło