你如何以不同的用户提交代码?
Posted
技术标签:
【中文标题】你如何以不同的用户提交代码?【英文标题】:How do you commit code as a different user? 【发布时间】:2011-04-11 10:46:32 【问题描述】:我希望能够为脚本执行此操作。我本质上是在 Git 中重新创建某些代码的整个版本历史记录——它目前使用不同的版本控制系统。我需要脚本能够将提交添加到 Git,同时保留提交的原始作者(和日期)。
假设我知道提交作者和更改的日期/时间,是否有允许我执行此操作的 Git 命令?我假设有,因为 git-p4 做了类似的事情。我只是要求最好的方法来做到这一点。
【问题讨论】:
你试过使用快速导入吗? 我同意,fast-import 可能是最好的选择。您可以使用 git commit (或更准确地说是底层管道:hash-object、update-index、write-tree i>、commit-tree、update-ref 等),但 fast-import 会更快。 我确实想到了快速导入,但由于我自己是 git 初学者,所以我决定使用基本命令。老实说,我并不完全理解快速导入的工作原理,因此在我更好地理解它之前,我有点犹豫要不要使用它。是的,使用提交会慢很多,但至少我会知道会发生什么——尤其是在调试时。 git commit --author="Name查看--author
的git commit
选项:
来自man page:
--author=<author>
覆盖提交作者。指定明确的作者 使用标准的
A U Thor <author@example.com>
格式。否则<author>
被假定为一个模式 并用于搜索现有的 该作者提交(即rev-list --all -i --author=<author>
);然后从提交作者复制 找到第一个这样的提交。
【讨论】:
另外,--date
选项可以覆盖日期。
你能举个具体的例子吗,我尝试的一切
@Tim Henigan:看起来文档现在托管在 Github 上,所以您发布的 man page 链接已失效。你能确认新页面是一样的吗(以防有其他答案需要更新链接)?
@R0MANARMY:我更新了 URL。 GitHub页面是正确的。我更新了我的链接,因为手册页不再托管在 kernel.org 上。感谢您让我知道更改。
这是我最终使用的:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
【参考方案2】:
补充一点:接受的答案中提到的--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>"
这将使提交看起来像是由指定用户创作和提交的。
【讨论】:
... 看看区别:git log --pretty=fuller
完美。这就是我想要的,我永远找不到 git internals 手册页。【参考方案3】:
使用 -c 选项和 git-commit 来覆盖任何以前的配置。它不会触及您的全局/项目配置。例如,要覆盖姓名和电子邮件:
git -c user.name='My Name' -c user.email='my@email.com' commit -m "Custom message"
但是,如果您打算将其保留为附加设置,我建议您使用别名。编辑您的 ~/.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>"
【讨论】:
我收到一个错误:“致命:选项 -m 不能与 -c/-C/-F 结合使用。”删除“-m”时,出现另一个错误:“致命:无法查找提交 user.email=以上是关于你如何以不同的用户提交代码?的主要内容,如果未能解决你的问题,请参考以下文章