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

时间:2012-09-26 00:24:44

标签: macos git pull

感觉很傻,但我无法弄清楚该怎么做。

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

 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甚至不是最长的路径。

对于从何处开始调试此问题感到非常困惑。

3 个答案:

答案 0 :(得分:0)

我看到符号链接失败的唯一地方是merge-recursive.c file

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。 这可能是导致致命错误消息的原因。

答案 1 :(得分:0)

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

(拆分为fetch + merge不是必需的,你可以进行拉动,只是它应该有助于减少不相关的粗暴量。)

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

答案 2 :(得分:0)

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

git config core.symlinks false

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