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

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

4

3 回答 3

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普通文件相同的内容。
这可能是致命错误消息的原因。

于 2012-09-26T06:10:24.213 回答
0

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

git config core.symlinks false

但是,我不知道这对整个项目是如何工作的,所以你只能将它用于你的责任。

于 2015-02-17T09:37:38.590 回答
0

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

(不需要拆分成 fetch+merge,你可以 strace 一个 pull,只是它应该有助于减少不相关的 crud 梳理。)

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

于 2013-06-12T21:31:33.320 回答