2012-09-26 31 views
4

感覺很愚蠢,但我無法弄清楚在這裏要做什麼。GIT無法拉動:符號鏈接'路徑/文件名'失敗:文件名太長

我有存儲在遠程服務器上的存儲庫的本地副本。遠程服務器有我需要的更改,並且我已對本地副本進行了更改。我無法推送,因爲我需要合併來自服務器上存在的較新版本的更改。當我拉,我得到這個錯誤:

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

'ls -la path/to'?這個文件可能有些時髦嗎? – nneonneo

+0

嘗試使用「git fetch origin」,然後「git rebase origin/master」 – Filipe

+0

我認爲'path.to/filename'或者'path/to/filename'不是實際的路徑。如果您向我們展示實際路徑,它可能會有所幫助。路徑符號鏈接中有* any *目錄嗎? –

回答

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作爲一個純文件。
這可能是致命錯誤消息的原因。

+0

這完全是可能的,但我不知道如何調試問題,因爲該文件作爲文件在我的系統上啓動。一位同事一直在研究同一個項目,我認爲他的回購是在FAT驅動器上的,但是他的機器上的所有東西都正常顯示,而且他是最後一個推動的項目。 – whlteXbread

+0

這應該給'EEXIST',而不是'ENAMETOOLONG' ... – nneonneo

0

我開始從git fetch開始調試,並且只有在成功之後,纔去找git merge。據推測(正如@VonC指出的),錯誤只會發生在git merge(這是有道理的,因爲拉只是在這裏取得 - 然後合併)。由於fetch將會成功,因此您可以檢查導致失敗合併的提交,並且可能運行strace或類似的操作來觀察失敗的系統調用。

(分割成取+合併不是必需的,你可以與strace一拉,這只是它應該有助於減少不相關的污物的量梳理。)

[編輯:並再次SO已經復活了一個老問題......必須開始考慮這些時間戳!並注意到OSX標籤,使dtruss,而不是strace。]

0

我有同樣的問題,但在我的情況下,我沒有時間來檢查它將如何發生。我解決它通過使用以下命令 - 可能是會有所幫助的人:

git config core.symlinks false 

不過,我不知道這是如何工作的整個項目,所以你可以使用它只是你的責任。

相關問題