簡體   English   中英

GIT無法拉取:未能符號鏈接'path / filename':文件名太長

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM