[英]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.