Як ви вводите код як інший користувач?


112

Я хочу бути в змозі зробити це для сценарію. Я по суті відновлюю всю історію версій деякого коду в Git - він наразі використовує іншу систему контролю версій. Мені потрібен сценарій, щоб можна було додати до комітетів до Git, зберігаючи оригінальний автор комітету (та дату).

Якщо припустити, що я знаю автора комісії та дату / час, коли відбулася зміна, чи існує команда Git, яка дозволяє мені це зробити? Я припускаю, що існує, тому що git-p4 робить щось подібне. Я просто прошу найкращий спосіб це зробити.


1
Ви пробували використовувати швидкий імпорт?
альтернатива

Я згоден, швидкий імпорт , ймовірно, буде найкращим шляхом. Ви можете використовувати git commit (або, правильніше, основну сантехніку: хеш-об'єкт , оновлення-індекс , дерево запису , дерево комітів , оновлення-ref тощо), але швидкий імпорт буде, ну, швидше.
Кріс Джонсен

Я думав про швидкий імпорт, але оскільки я сам початківець git, я вирішив використовувати основні команди. Якщо чесно сказати, я не повністю розумію, як працює швидкий імпорт, і тому я трохи вагаюся використовувати його, поки я не зрозумію його краще. Так, це буде набагато повільніше за допомогою фіксації, але я принаймні буду знати, що чекати - особливо під час налагодження.
Карл

1
git commit --author = "Ім'я <ім'я@example.com>" -a -m "виконувати msg"
Масіх

Відповіді:


148

Ознайомтеся з --authorможливістю git commit:

На сторінці чоловіка :

--author=<author>

Переосмислить автор комісії. Вкажіть явного автора, використовуючи стандартний A U Thor <author@example.com>формат. В іншому випадку <author>вважається зразком і використовується для пошуку існуючого комітету цим автором (тобто rev-list --all -i --author=<author>); Потім автор комітету копіюється з першого знайденого такого комітету.


18
Також --dateможливість змінити дату.
Кріс Джонсен

Чи можете ви навести конкретний приклад, все, що я пробую
studgeek

@Tim Henigan: Схоже, зараз документація розміщена на Github, тому посилання на сторінку чоловіка, яке ви розмістили, мертве Чи можете ви підтвердити, що нова сторінка - це те саме (якщо є інші відповіді, на які потрібні посилання)?
R0MANARMY

@ R0MANARMY: я оновив URL-адресу. Сторінки GitHub правильні. Я оновив своє посилання, оскільки сторінки чоловіків більше не розміщуються на kernel.org. Дякуємо, що повідомили про зміни.
Тім Геніган

1
Ось що я закінчив:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Карл

113

Просто до цього: --authorВаріант, зазначений у прийнятій відповіді, лише перекриє автора , а не інформацію про виконавця комітету .

Це правильна поведінка в більшості випадків, але якщо з якихось причин вам також потрібно вручну переосмислити інформацію про виконувачу, скористайтеся змінними оточення GIT_COMMITTER_NAMEта GIT_COMMITTER_EMAILсередовищем (є GIT_COMMITTER_DATEтакож). Див. Змінні Git-Internals-Environment-Variables

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

Це призведе до того, що фіксація виглядає так, як його було створено та здійснено вказаним користувачем.


16
... і щоб побачити різницю:git log --pretty=fuller
bluenote10

2
Ідеально. Це те, чого я хотів, і я ніколи не міг знайти сторінку людини git Internals.
ksp

3

Відредагуйте файл ~ / .gitconfig і додайте новий псевдонім, де ви можете налаштувати користувача, який не використовується за замовчуванням, та електронну пошту.

[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

Перевірте це

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>"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.