【问题标题】:Avoid useless policy errors on a pull request?在拉取请求中避免无用的策略错误?
【发布时间】:2016-02-28 13:38:31
【问题描述】:

我正在尝试测试拉取请求。我执行了一个全新的克隆:

$ git clone https://github.com/weidai11/cryptopp.git cryptopp-ds
$ cd cryptopp-ds

然后我发出以下拉pr:

$ git checkout -b droark-master master
$ git pull https://github.com/droark/cryptopp.git master

这会导致一个完全不相关的错误,完全没有依据来停止这个工作流程: p>

From https://github.com/droark/cryptopp
 * branch            master     -> FETCH_HEAD

*** 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.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'cryptopp@qotom.(none)')

git pull --force https://github.com/droark/cryptopp.git master 产生同样的错误。

我对作者 Git 试图强加给我的这些无用、不相关的政策决定不感兴趣。没有与此测试帐户关联的电子邮件地址。我只是想要这些文件,以便测试更改。

究竟如何拉取请求以便测试更改?

【问题讨论】:

  • 这不是无关紧要的。您正在尝试合并一个分支,因此您正在创建一个提交。提交需要作者。
  • 谢谢泽塔。如何在不创建提交的情况下获取文件?我并不想承诺任何事情。我要做的就是获取文件,以便测试更改。
  • 如果你只是想获取文件,为什么不直接克隆到另一个目录呢?
  • “如果你只是想获取文件,为什么不直接将它们克隆到另一个目录?” - 我正在按照 pr 提供的说明进行操作。如果有更好的方法,请分享。
  • Git 有有趣的命令名称,pull 意味着(本质上)向 repo 发送提交请求。

标签: git git-pull


【解决方案1】:

如果本地和远程分支发生分歧,git pull 将执行合并并提交。每个提交都需要作者,这显然不是您所指的愚蠢政策。

根据文档,git pull 有一个参数--no-commit,所以我希望你能对你有用,即:

git pull --no-commit https://github.com/droark/cryptopp.git master

不幸的是,从 Git v1.9 开始,情况并非如此。我无法用较新的版本对此进行测试,建议您尝试一下。

另一件不起作用的事情是像这样使用 fetch + merge:

git remote add droark https://github.com/droark/cryptopp.git
git fetch droark
git merge --no-commit droark/master

同样的结果,它需要用户名和电子邮件配置。似乎它做配置检查有点太早了,因为显然在这种情况下不应该进行任何提交。您可能需要为此提交错误。

目前看来,您只需要接受它并设置用户名+电子邮件即可。您不必按照错误消息的提示将其设为全局设置,您只需删除 --global 标志即可。

更新

在不提交的情况下获取更改的另一种方法是挑选要合并的提交范围:

git remote add droark https://github.com/droark/cryptopp.git
git fetch droark
git cherry-pick --no-commit ..droark/master

这应该有效,并且具有相同的结果。

【讨论】:

  • “就目前而言,您似乎只需要接受它并设置用户名+电子邮件。...” - 否定。我不为工具工作;这些工具应该对我有用。我会通过电子邮件向 Douglas 索要文件,因为这又是一个 Git 让一项简单的任务变得难以完成的案例。
  • @jww 您可以复制粘贴错误输出中的 2 行,然后在不到 10 秒的时间内继续您的业务。您没有这样做,而是花时间在这里写一个问题来提出问题,这显然比更容易的选项 A 花费的时间要长得多。看起来您实际上是在为这些工具工作:-) 无论如何,我想我为您找到了解决方案,请参阅我的更新。
  • 谢谢亚诺斯。选项 A 是错误的选择,因为没有可提供的信息。有点像这个问题的答案:How to delete “Google My Business” information that is not mine but its associate with me?。在那次问答中,有人告诉我假装它是我的,这样我就可以删除不正确的关联(具有未知的法律后果)。当然,我不是唯一一个注重细节并希望事情在实践中准确无误的人。
  • 再次感谢亚诺斯。 remote addcherry pick 有效。非常感谢。
【解决方案2】:

您无法执行git pull,因为您没有设置your Git identity

git pullgit fetch && git merge 的快捷方式。

git pull 文档:

更准确地说,git pull 使用给定的参数运行 git fetch 并调用 git merge 将检索到的分支头合并到当前分支中。使用 --rebase,它运行 git rebase 而不是 git merge。

当 Git 执行 merge 命令时,它会创建提交。因此,如果没有凭据,这是不可能的。

【讨论】:

  • 谢谢安东。 “...因为你没有设置你的 Git 身份” - 没有 Git 身份。这只是一个测试账户,它没有账户信息和其他属性,如电子邮件地址。
  • @jww 即使是测试帐户也需要电子邮件地址
  • 再次感谢安东。我想问题变成了,如何在没有拉取的情况下获取文件?我要做的就是获取文件,以便测试更改。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2011-04-09
  • 2016-03-02
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多