2016-11-22 11 views
1

私の(ローカル)gitリポジトリが壊れました。問題は私のpythonスクリプトが './'で始まる名前のファイルを追加したことに起因します。 「.git」が含ま: Gitエラー:オブジェクトxxxx:hasDot: '。'が含まれています。

Counting objects: 6, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (5/5), done. 
Writing objects: 100% (6/6), 4.03 KiB | 0 bytes/s, done. 
Total 6 (delta 1), reused 0 (delta 0) 
remote: error: object a6cc7dfb40e8c513415315d6ed84143448bd4f99: hasDot: contains '.' 
remote: fatal: Error in object 
error: unpack failed: unpack-objects abnormal exit 
To [email protected]:xxx/yyy.git 
! [remote rejected] master -> master (unpacker error) 
error: failed to push some refs to '[email protected]:xxx/yyy.git' 

近い私の問題への唯一のものをグーグルで著者はhasDotgitを持って、この未回答SO questionです

:私はGitのプッシュにしようとすると

、私はこれを取得します

エラー

は私がgitのショーa6cc7dfb40e8c513415315d6ed84143448bd4f99を走りました --full

そしてのgit fsckは:

warning in tree a6cc7dfb40e8c513415315d6ed84143448bd4f99: hasDot: contains '.' 

は私がは、正規FILE1削除「./file1" gitのが、のgitのrmに./filesを削除することがあると思いますファイルではなく、./file1です。私は再度コマンドを実行した場合、私はこれを取得:

fatal: pathspec './file1' did not match any files 

私はこの問題について、インターネット上で絶対に何も見つけないとさえa search in the git source codeはどんな結果が表示されないので、私は何をするか分かりません。 そして、私はむしろpythonモジュールを使っているよりもむしろこれを普通のgitで修正したいと思います。(ファイルを削除しようとすると、が致命的です:pathspecエラー)。

EDIT1のgit LS-ツリー--long --abbrev --full-名a6cc7dfb40e8c513415315d6ed84143448bd4f99

040000 tree 22b75ee  -  . 
100644 blob d519532 3580  file1 
... 
100644 blob 03e914c 6754  fileN 

EDIT2リストで ./fileない:同じ結果の場合- フルツリーの代わりに- フルネーム

+0

あなたはgitのLS-ツリー--long --abbrev --full- 'の出力を表示することができます名前a6cc7dfb40e8c513415315d6ed84143448bd4f99'? – Roman

+0

申し訳ありませんが、やや間違ったコマンドです。 '--full-name'を' --full-tree'に置き換えて、もう一度実行してください(出力はおそらく同じですが、確かにそうです)。 – Roman

+1

このチェックは[fsck.c](https://github.com/git/git/blob/1310affe024fba407bff55dbe65cd6d670c8a32d/fsck.c#L557)にあります。これは、文字通り '.'という名前のエントリがツリーに含まれていることを意味します。 'ls-tree'の出力で見ることができます。私は、これを修正する最も簡単な方法は、コマンドラインgitを使って問題のコミットを再作成することだと思います。 – Roman

答えて

1

悪いコミットを元に戻すことができないように見えます。他の誰かがhasDotまたはhasDotgitを探している場合

、あなたはそれを修正することができます:

git reset --soft fbc2d1cae724acc7b8d83442ca94088d836fea55 
     #delete all commits after the last good one (fbc2), but keep files (--soft) 
git rm --cached "." -r -f  #git rm all files but keep them locally (--cached) 
git add .      #git add everything back 
git commit -m "msg" 
関連する問題