2010-09-12 14 views
80

Voglio poterlo fare per una sceneggiatura. Sto essenzialmente ricreando l'intera cronologia delle versioni di alcuni codici in Git - attualmente utilizza un diverso sistema di controllo delle versioni. Ho bisogno che lo script sia in grado di aggiungere i commit a Git preservando l'autore originale del commit (e la data).Come si esegue il commit del codice come utente diverso?

Supponendo che conosco l'autore del commit e la data/ora in cui è stata apportata la modifica, c'è un comando Git che mi consente di farlo? Presumo che ci sia, perché git-p4 fa qualcosa di simile. Sto solo chiedendo il modo migliore per farlo.

+1

Hai provato a utilizzare l'importazione rapida? – alternative

+0

Sono d'accordo, [fast-import] (http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html) è probabilmente il modo migliore per andare. È possibile utilizzare * git commit * (o più correttamente l'impianto idraulico sottostante: * hash-object *, * update-index *, * write-tree *, * commit-tree *, * update-ref *, ecc.), Ma * importazione rapida * sarebbe, beh, più veloce. –

+0

Ho pensato all'importazione rapida, ma siccome sono abbastanza io stesso un principiante, ho deciso di usare i comandi di base. Per essere perfettamente onesto, non capisco appieno quanto siano veloci i lavori di importazione e quindi sono un po 'titubante ad usarlo finché non lo comprendo meglio. Sì, sarà molto più lento usare commit, ma almeno saprò cosa aspettarmi, specialmente durante il debug. – Carl

risposta

113

Partenza l'opzione --author per git commit:

Dal man page:

--author=<author>

Override il commit autore. Specificare un autore esplicito utilizzando il formato standard A U Thor <[email protected]>. Altrimenti viene utilizzato come modello e viene utilizzato per cercare un commit esistente da tale autore (ad esempio rev-list --all -i --author=<author>); l'autore del commit viene quindi copiato dallo prima il commit trovato.

+12

Inoltre, l'opzione '--date' per sovrascrivere la data. –

+0

Puoi dare un esempio specifico, tutto quello che provo – studgeek

+0

@Tim Henigan: Sembra che la documentazione sia ora ospitata su [Github] (http://schacon.github.com/git/git-commit.html) così l'uomo * pagina * link che hai postato è morto. Puoi confermare che la nuova pagina è la stessa cosa (nel caso ci siano altre risposte che richiedono l'aggiornamento dei link)? – R0MANARMY

58

Giusto per aggiungere a questo: l'opzione --author menzionato nella risposta accettata sovrascriverà solo la autore, non il committer informazioni del commit.

Questo è il comportamento corretto nella maggior parte dei casi, ma se per qualche motivo è necessario sostituire manualmente le informazioni committer così, utilizzare le variabili di ambiente e GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL (c'è un GIT_COMMITTER_DATE pure). Vedere Git-Internals-Environment-Variables

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

Questo renderà l'aspetto impegnarsi come se fosse stato scritto e commessi dall'utente specificato.

+8

... e per vedere la differenza: 'git log --pretty = fuller' – bluenote10

+0

Perfetto. Questo è quello che volevo e non avrei mai potuto trovare la pagina man di git internals. – ksp

Problemi correlati