感觉很傻,但我无法弄清楚该怎么做。
我有一个存储在远程服务器上的存储库的本地副本。远程服务器有我需要的更改,并且我已在本地副本上提交了更改。我无法推送,因为我需要合并服务器上存在的较新版本的更改。当我拉,我得到这个错误:
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
甚至不是最长的路径。
对于从何处开始调试此问题感到非常困惑。
答案 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
但是,我不知道这对整个项目有何用处,因此您只能将其用于自己的责任。