Zastąp skonfigurowanego użytkownika dla pojedynczego zatwierdzenia git

105

Próbuję zaangażować się w projekt na github.com z mojego roboczego laptopa, który jest już skonfigurowany dla firmowego serwera git. Czy istnieje sposób na zatwierdzenie z określeniem różnych poświadczeń autora, możliwy przy użyciu innego pliku konfiguracyjnego lub innych przełączników wiersza poleceń?

Próbowałem użyć

--author="My Name <[email protected]>" 

i otrzymałem wiadomość:

 Committer: unknown <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

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

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

ale nadal nie zaktualizowałem mojej nazwy użytkownika za zobowiązanie się do projektu github.com. Czy jest coś jeszcze, czego mogę spróbować i czy to w ogóle możliwe?

FilBot3
źródło
2
Git rozróżnia autora i committer . Aby tymczasowo ustawić committer dla jednego polecenia, użyj -c user.name=Me [email protected]. Aby użyć niestandardowej konfiguracji globalnej, zobacz to pytanie lub użyj aliasu powłoki zawierającego -copcje. Ale żadna z tych rzeczy nie jest prawdopodobnie właściwa w tej sytuacji - potrzebujesz konfiguracji per-repo.
Robin Green,
Dzięki Git 2.22 (drugi kwartał 2019 r.) Będziesz mieć dedykowane ustawienia {author,committer}.{name,email}. Zobacz moją odpowiedź poniżej
VonC

Odpowiedzi:

189

Po pierwsze, autor niekoniecznie jest tym samym, co popełniający. Git śledzi oba.

Aby ustawić nazwę używaną tylko dla tego repozytorium, możesz zrobić:

git config user.name "Your Name"
git config user.email "Your email"

Zwróć uwagę na brak --globalopcji. Spowoduje to ustawienie konfiguracji tylko w tym repozytorium.

Alternatywnie możesz to zrobić tylko dla jednego polecenia, używając -copcji:

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

Ale myślę, że lepiej jest po prostu użyć powyższych opcji konfiguracji.

John Szakmeister
źródło
7
jest to dokładnie to , czego potrzebowałem, ponieważ muszę przenieść się ze wspólnego konta (root na serwerze deweloperskim) do repozytorium git pod sobą i nie chcę, aby inni otrzymywali moje imię / adres e-mail.
andrej
60

Spróbuj dołączyć to do polecenia git:

git -c [email protected] -c user.name='Your Name'

Jest to w porządku w przypadku jednorazowego użycia, ale wolisz zapisać to w pliku .git / config lokalnego repozytorium, które sklonowałeś z git. Można to zrobić uruchamiając git config (no --global lub --system, aby ustawić je jako „lokalne dla repozytorium”) lub edytując .git/config(ma taką samą składnię jak~/.gitconfig

Asenar
źródło
1
Dziękuję Ci! Dzielę serwer z wieloma osobami i nie chcę ustawiać domyślnego użytkownika. To jest doskonałe!
horriblyUnpythonic
1
@horriblyUnpythonic, nie ma za co :) Możesz także utworzyć alias w swoim .bash_aliasesi / lub możesz również ustawić punkt zaczepienia przed zatwierdzeniem, aby odrzucał zatwierdzenie, gdy użytkownik nie jest zdefiniowany.
Asenar,
28

Można również ustawić zmienne środowiskowe GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, i GIT_AUTHOR_EMAILna zasadzie per-shell lub nawet za dowódcy.

Jesse Glick
źródło
Świetnie, ponieważ byłoby to głównie używane w scenariuszu ze współdzielonym komputerem, na sesję z automatycznym czyszczeniem jest idealne.
kmac
1
Nie działa dla mnie. Po tym autor pozostał ten sam git commit --amend. Zmienił się tylko komisarz.
Ondra Žižka
Tak samo jak jagit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD
1
Dzieje się tak, ponieważ git commit --amendzgodnie z projektem nie zmienia autora, jak mówi strona podręcznika. Rozwiązanie: git commit --amend --reset-author
kubańczyk
7

Wierzę, że mógłbyś biegać:

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

dla różnych części git. Spróbuj otworzyć folder, w którym wykonywana jest praca dla repozytorium, na serwer github.

Upewnij się, że widzisz folder .git w tym folderze roboczym. Teraz otwórz ten folder w Terminal / Console / CommandPrompt i spróbuj zmienić nazwę użytkownika i adres e-mail dla tego folderu, uruchamiając polecenia, które podałem powyżej.

Zmieniając to, możesz teraz mieć dostęp do serwera GitHub.

Spójrz tutaj: https://help.github.com/articles/setting-your-username-in-git

Uważam również, że istnieje sposób na przekazanie do zdalnego repozytorium przy użyciu nazwy użytkownika i hasła github w samym poleceniu, ale nie cytuję go, ponieważ nie zadziałało.

Joe
źródło
5

Kontynuując odpowiedź Jesse Glicka, rozszerzoną implementację, ponieważ IMO jego sugestia jest najlepszym sposobem, aby to osiągnąć.

Dodaj poniższe do swojego .bash_profile. Po pierwszym uruchomieniu dowolnego polecenia git w aktywnej powłoce zostanie wyświetlony monit o użytkownika. Następnie zapamięta użytkownika dla wszystkich kolejnych uruchomień.

(oczywiście odsyłaj wprowadzoną wartość użytkownika do dokładnych nazw i adresów e-mail dla różnych wartości git auther / name w bloku case i zaktualizuj przypisania w razie potrzeby)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    [email protected]
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}
slumtrimpet
źródło
2

Można również ustawić zmienne środowiskowe GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, i GIT_AUTHOR_EMAILna zasadzie per-shell lub nawet za dowódcy.

Właściwie od Git 2.22 (Q2 2019) masz nową opcję: {author,committer}.{name,email}Wprowadzono cztery nowe zmienne konfiguracyjne, które mają zastąpić je user.{name,email}w bardziej konkretnych przypadkach.

Zobacz commit 39ab4d0 (04 lutego 2019) autorstwa Williama Hubbsa (``) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu 4e021dc , 07 marca 2019 r.)

config: pozwala na nadanie osobnych identyfikatorów autora i autora

Te author.email, author.name, committer.emaili committer.nameustawienia są analogiczne do GIT_AUTHOR_*i GIT_COMMITTER_*środowiska zmiennych, ale dla git configsystemu.
Dzięki temu można je ustawić oddzielnie dla każdego repozytorium.

Git obsługuje ustawianie różnych informacji o autorstwie i autorach za pomocą zmiennych środowiskowych. Jednak zmienne środowiskowe są ustawiane w powłoce, więc jeśli potrzebne są różne informacje o autorstwie i autorach dla różnych repozytoriów, wymagane jest narzędzie zewnętrzne.

Dodaje wsparcie dla git config author.email, author.name, committer.emaili committer.name ustawieniach więc ta informacja może być ustawiony za repozytorium.

VonC
źródło