2016-11-22 40 views
1

我打破了我的(本地)git存儲庫。問題來自我的python腳本,它添加了以'./'開頭的文件。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' 

谷歌搜索時唯一接近我的問題是這樣的解答SO question在這裏筆者有hasDotgit:包含「git的」錯誤

我跑混帳顯示a6cc7dfb40e8c513415315d6ed84143448bd4f99

./ 
./file1 
./file2 
... 
file1 
file2 
... 

而且混帳的fsck --full

warning in tree a6cc7dfb40e8c513415315d6ed84143448bd4f99: hasDot: contains '.' 

我想我已經刪除了./files在混帳混帳RM」 ./file1"刪除定期文件1文件,而不是。/文件1。如果我運行命令再次我得到這個:

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

我不知道該怎麼辦,因爲我覺得互聯網上關於這個問題絕對沒有,甚至a search in the git source code不顯示任何結果。 我寧願修復這個在純Git比再次使用Python模塊(這也給我致命︰pathspec錯誤,當我嘗試刪除文件)。

EDIT1git的LS-樹--long --abbrev --full名a6cc7dfb40e8c513415315d6ed84143448bd4f99

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

沒有./file列表

EDIT2:同樣的結果如果- 全樹而不是- 全名

+0

你可以顯示'git的LS-樹--long --abbrev --full-輸出名稱a6cc7dfb40e8c513415315d6ed84143448bd4f99'? – Roman

+0

對不起,稍微錯誤的命令。請用'--full-tree'替換'--full-name'並再次運行(輸出可能是相同的,但可以肯定)。 – Roman

+1

該檢查可以在[fsck.c]找到(https://github.com/git/git/blob/1310affe024fba407bff55dbe65cd6d670c8a32d/fsck.c#L557),它表示一個樹包含一個字面上名爲'.'的條目,它我們可以在'ls-tree'輸出中看到。我懷疑解決這個問題的最簡單方法是使用命令行git重新創建違規提交。 – Roman

回答

1

看起來像不可能恢復壞提交。

如果別人找hasDothasDotgit,你可以與修復:

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"