2010-09-12 8 views
80

Chcę móc to zrobić dla skryptu. Zasadniczo ponownie tworzę całą historię wersji jakiegoś kodu w Git - obecnie używa innego systemu kontroli wersji. Potrzebuję skryptu, aby móc dodać poprawki do Git, zachowując oryginalnego autora commit (i datę).Jak popełniasz kod jako inny użytkownik?

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

+1

Czy próbowałeś używać szybkiego importu? – alternative

+0

Zgadzam się, [fast-import] (http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html) prawdopodobnie będzie najlepszym sposobem. Możesz użyć * git commit * (lub dokładniej leżącego u podstaw instalacji hydraulicznej: * hash-object *, * update-index *, * write-tree *, * commit-tree *, * update-ref *, itd.), Ale * szybki import * byłby, cóż, szybszy. –

+0

Myślałem o szybkim imporcie, ale jako że jestem całkiem początkującym git, zdecydowałem się użyć podstawowych poleceń. Szczerze mówiąc nie w pełni rozumiem, jak szybko działa import i dlatego jestem trochę niezdecydowany, aby go użyć, dopóki nie zrozumiem tego lepiej. Tak, będzie to dużo wolniejsze przy użyciu commit, ale przynajmniej będę wiedział, czego się spodziewać - zwłaszcza podczas debugowania. – Carl

Odpowiedz

113

Wyjazd opcję --author dla git commit:

Z man page:

--author=<author>

Zastąp autora popełnić. Określ wyraźnego autora przy użyciu standardowego formatu A U Thor <[email protected]>. Inaczej zakłada się, że <author> jest wzorcem i jest używany do wyszukiwania istniejącego zobowiązania tego autora (tj. rev-list --all -i --author=<author>); autor zatwierdzenia jest następnie kopiowany z pierwszego takiego zatwierdzenia znalezionego.

+12

Ponadto, opcja '--date' zastępuje datę. –

+0

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

+0

@Tim Henigan: Wygląda na to, że dokumentacja jest teraz hostowana na [Github] (http://schacon.github.com/git/git-commit.html), więc * man strona * opublikowany przez Ciebie link jest martwy. Czy możesz potwierdzić, że nowa strona jest tym samym (w przypadku, gdy są inne odpowiedzi, które wymagają aktualizacji linków)? – R0MANARMY

58

Wystarczy dodać do tego: Opcja --author wspomniano w przyjętym odpowiedź zastąpi tylko autor, a nie committer Informacyjnym popełnić.

Jest to poprawne zachowanie w większości przypadków, ale jeśli z jakiegoś powodu trzeba zmienić ręcznie informacje committer także użyć zmiennych GIT_COMMITTER_NAME i GIT_COMMITTER_EMAIL środowiska (jest GIT_COMMITTER_DATE również). Zobacz Git-Internals-Environment-Variables

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="[email protected]" git commit --author="New Name <[email protected]>" 

To uczyni wygląd popełnienia jakby był autorem i popełnione przez określonego użytkownika.

+8

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

+0

Idealny. Tego właśnie chciałem i nigdy nie mogłem znaleźć strony man git internals. – ksp

Powiązane problemy