GIT 无法pull:创建符号链接失败'path/filename':文件名太长

4

感觉有点傻,但我无法弄清楚该做什么。

我在远程服务器上存储了一个代码库的本地副本。远程服务器有我需要的更改,而我也对本地副本进行了提交更改。我不能推送,因为我需要合并从服务器获取的新版本更改。当我执行拉取操作时,出现以下错误:

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

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


ls -la path/to?文件可能有问题吗? - nneonneo
尝试使用 "git fetch origin" 然后 "git rebase origin/master"。 - Filipe Felisbino
我假定 path.to/filename 或者 path/to/filename 不是实际路径。如果你展示实际路径的话可能会有所帮助。路径中是否存在软链接目录? - Keith Thompson
@nneonneo —事情看起来很正常。@Keith-Thompson —你说得对,那不是实际路径。路径上的任何目录都不是符号链接,但“to”部分实际上是一个点文件夹:“.libs”。 - whlteXbread
3个回答

0

我也遇到了同样的问题,但在我的情况下,我没有时间检查它会发生什么。我通过使用以下命令解决了这个问题 - 也许对某些人有帮助:

git config core.symlinks false

然而,我不知道这对整个项目如何起作用,所以您只能将其用于您的职责范围内。


0

我唯一看到符号链接失败的地方是在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则是一个普通文件。
这可能是致命错误消息的原因。


这是完全可能的,尽管我不确定如何调试这个问题,因为文件最初在我的系统上作为一个文件开始。一个同事一直在同一个项目上工作,他的存储库在一个FAT驱动器上,我想,但在他的机器上一切都正常显示,并且他是最后一个推送的人。 - whlteXbread

0
我会从git fetch开始调试,只有在成功后才会尝试git merge。假设(如@VonC所指出的)错误只会发生在git merge时(这是有道理的,因为在这里pull只是fetch-then-merge)。由于fetch已经成功,您可以检查导致失败合并的提交,并可能在strace或类似工具下运行整个过程以观察失败的系统调用。
(将fetch+merge拆分不是必需的,您可以对pull进行strace,只是它应该有助于减少需要筛选的无关垃圾量。)
[编辑:再次SO已经恢复了一个旧问题...得开始看这些时间戳!并且,注意OSX标签,将其更改为dtruss而不是strace。]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接