使用部署令牌时如何 git 在没有默认身份的情况下拉取?

How to git pull with no default identity when using a deploy token?

我有一个 Gitlab 存储库,它有一个非常大的主分支。我只想在 repo 中使用一个文件夹,所以我创建了一个分支并删除了我想使用的文件夹以外的所有内容。然后,我使用部署令牌(具有完全权限)和分支标志克隆了分支以指定分支:

git clone --branch my_branch https://oauth2:[MY_TOKEN]@gitlab.com/my-repo.git ./save_location

这很好,我克隆 repo 完全没有问题。如果我想对推送到 master 分支的文件夹进行任何更新,我可以将 master 拉到我的分支,并设置 -X theirs 标志。我检查了 git 文档,并且在设置了分支标志的情况下进行克隆时,回购协议仍会跟踪所有其他分支,因此此拉动仍会按预期工作。所以这是命令:

git pull origin master -s recursive -X theirs

这似乎很简单,但尝试拉取会出现此错误:

 * branch            master     -> FETCH_HEAD
Committer identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.

如果我使用部署令牌访问存储库,并且该令牌具有完全权限,那么为什么仍然要求我提供身份?如何在不配置身份的情况下解决此问题?我想保证这是一个完全匿名的系统,不依赖于帐户。

您收到的提示是因为您正在进行合并提交,并且 Git 需要提交者身份才能放入提交中。 user.name 是个人姓名,不是用户名,user.email 是电子邮件。这些与您在 GitLab 上的帐户无关,与身份验证无关,并且纯粹是在本地设置的,但是为了创建提交,您必须设置它们(或使用不同的方法指定它们,例如环境变量).

如果您不创建提交,您可以在不设置作者或提交者身份的情况下工作,但如果您创建提交,则必须指定一些内容。如果您愿意,可以使用无效的电子邮件地址指定一个机器帐户(例如,nobody@example.com)。如果这是一个脚本并且您不想依赖于更改本地配置,则可以使用环境变量 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL 及其对应的提交者来指定环境中的值。 git commit manual page 解释了这些变量及其用途。