你如何以不同的用户提交代码?

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-objectupdate-indexwrite-tree i>、commit-treeupdate-ref 等),但 fast-import 会更快。 我确实想到了快速导入,但由于我自己是 git 初学者,所以我决定使用基本命令。老实说,我并不完全理解快速导入的工作原理,因此在我更好地理解它之前,我有点犹豫要不要使用它。是的,使用提交会慢很多,但至少我会知道会发生什么——尤其是在调试时。 git commit --author="Name " -a -m "commit msg" 【参考方案1】:

查看--authorgit 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_NAMEGIT_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= @ArnabBiswas 感谢您的反馈。我刚刚编辑了我的答案,因为我错误地输入了第一个示例:commit must go after of config options.

以上是关于你如何以不同的用户提交代码?的主要内容,如果未能解决你的问题,请参考以下文章

Git教程

提交表格以禁用?

如何在 Django 中访问表单提交按钮的值?

Git的常用命令

「推荐收藏」Git实战专题代码提交错误怎么办?教你如何回退版本

推荐收藏 | Git实战专题「必坑宝典」代码提交错误怎么办,教你如何回退版本