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 fetch、それが成功した後にのみ、git merge. おそらく(@VonCが指摘したように)エラーは次の場合にのみ発生しますgit merge(プルはここではフェッチしてからマージするだけなので理にかなっています)。will が成功したのでfetch、失敗したマージの原因となったコミットを調べて、strace失敗したシステム コールを観察するためにすべてを実行するか、類似したものにすることができます。

(fetch+merge への分割は必須ではありません。pull をトレースすることができます。それは、関連性のないクラッドの量を減らすのに役立つはずです。)

[編集: そして、もう一度 SO は古い質問を復活させました...これらのタイムスタンプを見始めなければなりません! そして、OSX タグに注意して、dtrussstrace の代わりにそれを作成してください。]

于 2013-06-12T21:31:33.320 に答える
0

私は同じ問題を抱えていましたが、私の場合、それがどのように起こるかを確認する時間がありませんでした. 以下のコマンドを使用して解決しました-誰かにとって役立つかもしれません:

git config core.symlinks false

ただし、これがプロジェクト全体でどのように機能するかはわかりませんので、自分の責任でのみ使用してください。

于 2015-02-17T09:37:38.590 に答える