繁体   English   中英

GIT无法拉取:未能符号链接'path / filename':文件名太长

[英]GIT can't pull: failed to symlink 'path/filename': File name too long

感觉很傻,但我不知道该怎么做。

我有一个存储在远程服务器上的存储库的本地副本。 远程服务器有我需要的更改,并且我已在本地副本上提交了更改。 我无法推送,因为我需要合并服务器上存在的较新版本的更改。 当我拉,我得到这个错误:

 git pull origin master
 From server.name:reponame
  * branch            master     -> FETCH_HEAD
 fatal: failed to symlink 'path/to/filename ': File name too long

不知道这里会发生什么。 疯狂的是文件path/to/filename是一个实际文件,而不是符号链接。 此外, path/to/filename甚至不是最长的路径。

真的很困惑,从哪里开始调试这个问题。

我看到无法符号链接的唯一地方是merge-recursive.c文件

if (S_ISLNK(mode)) {
  char *lnk = xmemdupz(buf, size);
  safe_create_leading_directories_const(path);
  unlink(path);
  if (symlink(lnk, path))
    die_errno(_("failed to symlink '%s'"), path);
  free(lnk);
} 

看起来你要拉的远程仓库包含filename作为符号链接,而你的本地仓库包含与普通文件相同的filename
这可能是导致致命错误消息的原因。

我将从git fetch开始调试,只有在成功之后,才能进行git merge 据推测(正如@VonC所说),错误只会发生在git merge (这是有道理的,因为pull只是fetch-then-merge)。 由于fetch成功,您可以检查导致失败合并的提交,并且可能在strace或类似情况下运行整个事件以观察失败的系统调用。

(分割成fetch + merge不是必需的,你可以拉一个拉,它只是它应该有助于减少不相关的crud数量。)

[编辑:并且,再一次SO已经复活了一个老问题......要开始查看这些时间戳! 而且,注意OSX标签,使得dtruss而不是strace。

我有同样的问题,但在我的情况下,我没有时间检查它会如何发生。 我通过下面的使用命令解决了它 - 可能会对某人有所帮助:

git config core.symlinks false

但是,我不知道这对整个项目有何影响,因此您只能将其用于自己的责任。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM