Jak zatwierdzasz kod jako inny użytkownik?


112

Chcę móc to zrobić dla scenariusza. Zasadniczo odtwarzam całą historię wersji jakiegoś kodu w Git - obecnie używa on innego systemu kontroli wersji. Potrzebuję skryptu, aby móc dodawać zatwierdzenia do Git, zachowując pierwotnego autora (i datę) zatwierdzenia.

Zakładając, że znam autora zatwierdzenia i datę / godzinę wprowadzenia zmiany, czy istnieje polecenie Git, które pozwala mi to zrobić? Zakładam, że tak, ponieważ git-p4 robi coś podobnego. Po prostu proszę o najlepszy sposób na zrobienie tego.


1
Czy próbowałeś użyć szybkiego importu?
alternatywny

Zgadzam się, szybki import to prawdopodobnie najlepsza droga. Mógłbyś użyć git commit (lub dokładniej podstawowa instalacja hydrauliczna: hash-object , update-index , write-tree , commit-tree , update-ref , etc.), ale szybki import byłby, no cóż, szybszy.
Chris Johnsen,

Myślałem o szybkim imporcie, ale ponieważ sam jestem początkującym gitem, zdecydowałem się użyć podstawowych poleceń. Szczerze mówiąc, nie do końca rozumiem, jak działa szybki import i dlatego trochę się waham przed jego użyciem, dopóki nie zrozumiem go lepiej. Tak, użycie commit będzie znacznie wolniejsze, ale przynajmniej będę wiedział, czego się spodziewać - szczególnie podczas debugowania.
Carl

1
git commit --author = "Name <name@example.com>" -a -m "commit msg"
Masih

Odpowiedzi:


148

Sprawdź --authoropcję dla git commit:

Od strony man :

--author=<author>

Zastąp autora zatwierdzenia. Określ wyraźnego autora, używając standardowego A U Thor <author@example.com>formatu. W przeciwnym razie <author>przyjmuje się, że jest to wzorzec i służy do wyszukiwania istniejącego zatwierdzenia tego autora (tj. rev-list --all -i --author=<author>); autor zatwierdzenia jest następnie kopiowany z pierwszego znalezionego zatwierdzenia.


18
Również --dateopcja nadpisania daty.
Chris Johnsen,

Czy możesz podać konkretny przykład, wszystko, czego próbuję
studgeek

@Tim Henigan: Wygląda na to, że dokumentacja jest teraz przechowywana na Github, więc link do strony podręcznika, który opublikowałeś, jest martwy. Czy możesz potwierdzić, że nowa strona jest taka sama (na wypadek, gdyby były inne odpowiedzi, które wymagają aktualizacji linków)?
R0MANARMY

@ R0MANARMY: Zaktualizowałem adres URL. Strony GitHub są poprawne. Zaktualizowałem swój link, ponieważ strony podręcznika nie są już hostowane na kernel.org. Dziękuję za poinformowanie mnie o zmianie.
Tim Henigan

1
Oto, czego ostatecznie użyłem:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl

113

Wystarczy dodać do tak: --authoropcja wymienionych w przyjętym odpowiedź zastąpi tylko autora , a nie committer Informacyjnym popełnić.

W większości przypadków jest to poprawne zachowanie, ale jeśli z jakiegoś powodu musisz ręcznie nadpisać również informacje o inicjatorze, użyj zmiennych środowiskowych GIT_COMMITTER_NAMEi GIT_COMMITTER_EMAIL(jest GIT_COMMITTER_DATEteż). Zobacz Git-Internals-Environment-Variables

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="name@email.com" git commit --author="New Name <name@email.com>"

To sprawi, że zatwierdzenie będzie wyglądało tak, jakby zostało utworzone i zatwierdzone przez określonego użytkownika.


16
... i zobaczyć różnicę:git log --pretty=fuller
bluenote10

2
Idealny. To jest to, czego chciałem i nigdy nie mogłem znaleźć strony podręcznika man git internals.
ksp

3

Edytuj swój plik ~ / .gitconfig i dołącz nowy alias, w którym możesz dostosować niestandardowego użytkownika i adres e-mail.

[user]
  name = My Name
  email = default@email.com

[alias]
  commit-x = -c user.name='My X Name' -c user.email='mr_x@email.com' commit
  commit-y = -c user.name='My Y Name' -c user.email='mr_y@email.com' commit
  commit-z = -c user.name='My Z Name' -c user.email='mr_z@email.com' commit

Sprawdź to

git commit -m "Custom message with committer and author My Name <default@email.com>"
git commit-x -m "Custom message with committer and author My X Name <mr_x@email.com>"
git commit-y -m "Custom message with committer and author My Y Name <mr_y@email.com>"
git commit-z -m "Custom message with committer and author My Z Name <mr_z@email.com>"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.