Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 警告是什么;重定向到";实际上是什么意思?_Git_Url_Warnings_Pull - Fatal编程技术网

Git 警告是什么;重定向到";实际上是什么意思?

Git 警告是什么;重定向到";实际上是什么意思?,git,url,warnings,pull,Git,Url,Warnings,Pull,我注意到,有时候当我启动一个项目时,会有一条消息说: "warning: redirecting to <url>" “警告:重定向到” 我试图寻找它的含义,但我发现没有什么有用的。这是什么 这是典型的Git repo URL,以Git://或http://开头,但在服务器级别重定向到https://(更安全,并允许身份验证) 这是在服务器级别(as)设置的 检查你的遥控器 git remote -v 可能您的遥控器是,并且不会以警告的含义结尾 正如其他答案所解释的,您保存的U

我注意到,有时候当我启动一个项目时,会有一条消息说:

"warning: redirecting to <url>"
“警告:重定向到”
我试图寻找它的含义,但我发现没有什么有用的。这是什么

这是典型的Git repo URL,以
Git://
http://
开头,但在服务器级别重定向到
https://
(更安全,并允许身份验证)

这是在服务器级别(as)设置的

检查你的遥控器

git remote -v
可能您的遥控器是,并且不会以警告的含义结尾 正如其他答案所解释的,您保存的URL与服务器使用的URL之间存在细微差异。“Slight”表示它存在,但可以自动修复,所以Git不会给出错误,而是给出警告

如何摆脱警告:手动。。。 要摆脱它,您可以更新您正在使用的URL,确保它与正确的URL匹配。如果要手动执行,则必须使用命令

git remote set-url <remote_name> <correct_remote_path>
如何运行它 复制脚本并将其粘贴到shell中(只需一次)后,只需转到发现问题的Git目录并输入
check\u Git\u redirection\u warning
。检查生成的命令,如果它有意义(应该是这样的,但我们要注意安全!),只需将其复制并粘贴到shell中即可

工作原理
  • 首先,它运行
    git-remote
    以获取默认远程设备的名称(通常是
    origin
  • 然后,它通过运行
    git remote get URL$remote\u name
    ,找到当前配置的URL,该URL是(或可能是)错误的
  • 然后它得到正确的URL。我还没有找到一种直接的方法来找到它,所以我就是这么做的:我使用
    --dry run
    选项运行
    git fetch
    (dry run不做任何事情,因此实际上不会获取任何内容。这有助于防止您不想更改任何内容,尽管通常没有理由避免运行fetch)。如果有警告,Git会将其打印到STDERR。为了捕获它,我使用,然后我用AWK(通常在任何系统上都可用)解析消息并获得第四个单词。我认为如果URL中有空格,这部分就会失败,但不应该有空格,所以我没有费心让它更健壮
  • 此时,它检查是否找到了警告(以及正确的URL):如果没有,则无需执行任何操作,因此它只打印一条消息并退出
  • 如果找到了正确的URL,它将打印一条显示新旧URL的消息,然后打印必须运行以应用更改的命令
变型2,不安全但全自动 如果您信任我的脚本并希望同时运行该命令,而不是仅打印它,则可以使用以下变体:

函数删除\u git\u重定向\u警告{
远程\u name=“$(git远程)”
错误的远程路径=“$(git-remote-get-url$remote\u-name)”
更正\u remote\u path=“$(git fetch--dry run 2>>(awk'/警告:重定向到/{print$4}”)”
如果[-z“${correct_remote_path-}”];则
printf“远程'%s'的路径已经正确\n”$remote\u name;
其他的
mycmd=(git远程设置url“$remote\u name”“$correct\u remote\u path”)
printf“%s”${mycmd[@]};printf“\n”;
“${mycmd[@]}”
fi
}
工作原理 它与第一个命令非常相似,但不是打印命令,而是调用
mycmd
,然后使用
“${mycmd[@]}”
运行它

如何在所有Git存储库中运行脚本 到目前为止,我们已经看到了如何在一次回购中修复警告。如果你有很多,并且想全部更新怎么办?您可以在此处使用其他脚本:

git_目录=“$(find.-name.git”-exec dirname{}\)”
对于$git_目录中的git_目录;做
printf“正在进入目录%s\n”$git\u dir
cd$git\u目录
删除\u git\u重定向\u警告
printf“\n”
光盘-
完成

它通过查找包含.git的目录(作为文件和目录:它通常是一个目录,但它是一个用于子模块的文件)来实现。然后,对于每个repo,它都会进入其中,调用函数,然后返回。

如果您从中克隆,它会给您该消息,因为它更喜欢github.com(无www)。发生在今天的我身上。

在我的例子中,唯一的区别是GitHub警告返回的URL地址后面有一个斜杠

将尾部斜杠添加到我的配置文件中使警告消失


奇怪的是,我当时正在做一个
git fetch——所有的
,只有
my
remote需要最后的斜杠,而另一个(
origin
和维护者的)GitHub repos不需要它。相当混乱。

可能git收到了来自repo的重定向响应以签入另一个URL?问题是我的情况是,在本地
.git/config
中,远程URL设置为
https://gitlab.com/group/subgroup/project
但gitlab已重定向到
https://gitlab.com/group/subgroup/project.git/
。将url直接设置为
project.git
修复了它。从www.github.com克隆将发出重定向警告,因为它更喜欢不带www前缀的github.com。
git remote -v
git remote set-url <remote_name> <correct_remote_path>