2010-09-12 13 views
80

Quiero ser capaz de hacer esto para un script. En esencia, estoy recreando todo el historial de versiones de algunos códigos en Git; actualmente usa un sistema de control de versiones diferente. Necesito que el script pueda agregar los commits a Git mientras conserva el autor original de la confirmación (y la fecha).¿Cómo se confirma el código como un usuario diferente?

Suponiendo que conozco el autor de la confirmación y la fecha/hora en que se realizó el cambio, ¿hay algún comando de Git que me permita hacerlo? Supongo que hay, porque git-p4 hace algo similar. Solo estoy preguntando cuál es la mejor manera de hacerlo.

+1

¿Ha intentado utilizar la importación rápida? – alternative

+0

Acepto, [fast-import] (http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html) es probablemente la mejor manera de hacerlo. Puede usar * git commit * (o más apropiadamente la plomería subyacente: * hash-object *, * update-index *, * write-tree *, * commit-tree *, * update-ref *, etc.), pero * importación rápida * sería, bueno, más rápido. –

+0

Pensé en la importación rápida, pero como soy bastante principiante, decidí usar los comandos básicos. Para ser sincero, no entiendo completamente qué tan rápido funciona la importación y, por lo tanto, estoy un poco indeciso de usarlo hasta que lo entiendo mejor. Sí, será mucho más lento utilizar commit, pero al menos sabré qué esperar, especialmente durante la depuración. – Carl

Respuesta

113

Mira la opción de --authorgit commit:

Desde el man page:

--author=<author>

Anular el autor comprometerse. Especifique un autor explícito utilizando el formato estándar A U Thor <[email protected]>. De lo contrario, <author> se supone que es un patrón y se utiliza para buscar un compromiso existente de por ese autor (es decir, rev-list --all -i --author=<author>); el autor del compromiso se copia desde el primero se encuentra dicha confirmación.

+12

Además, la opción '--date' para anular la fecha. –

+0

Puede dar un ejemplo específico, todo lo que intento – studgeek

+0

@Tim Henigan: Parece que la documentación ahora está alojada en [Github] (http://schacon.github.com/git/git-commit.html) por lo que el * hombre el enlace de la página * que publicaste está muerto. ¿Puedes confirmar que la nueva página es la misma (en caso de que haya otras respuestas que necesiten enlaces actualizados)? – R0MANARMY

58

Sólo para añadir a esto: La opción --author mencionado en la respuesta aceptada sólo anulará la autor, no el confirmador información de la confirmación.

Ese es el comportamiento correcto en la mayoría de los casos, pero si por alguna razón, tiene que modificar manualmente la información committer, así, utilizar las variables de entorno y GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL (hay un GIT_COMMITTER_DATE también). Ver Git-Internals-Environment-Variables

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

Esto hará que el aspecto comprometerse como si hubiera sido el autor de y cometido por el usuario especificado.

+8

... y para ver la diferencia: 'git log --pretty = fuller' – bluenote10

+0

Perfecto. Esto es lo que quería y nunca podría haber encontrado la página man de git internals. – ksp

Cuestiones relacionadas