2017-02-13 4 views
5

git ls-filesのスクリプトを実行していますか? 索引ファイルを修復するか、訂正された索引ファイルからファイルのリストを抽出することは可能ですか? 正規表現では可能でしょうか?好ましくはPythonで2.7.6git ls-filesスクリプトの動作方法

+1

既存の 'git-ls-files'バイナリがどこにあるのか探したいですか?あるいは、まったく同じことをする新しいスクリプトを書いてください。 _なぜ_?これはあなたの破損したインデックスファイルにどのように関連していますか?実際のファイルは '.git/index'ですか?他に何か? – Useless

+0

はい私はgit-ls-filesと全く同じことをする新しいスクリプトを書く必要があります。悪意のある署名やハッシュをチェックすることなく、.git/indexファイル(壊れているかどうかは関係ありません)何か他のものだけ生ゴミなしのファイルリスト –

答えて

3

破損のレベルによっては、これは実行可能かどうかは関係ありません。 Gitのデータ構造と関連するツールは、それを修正するよりも、破損を検出することにもっと適しています。

特に、インデックス自体はリポジトリの一部ではなく、現在の内容から派生しているため、ほとんどの場合、削除してgit resetを作成して再作成するほうがよいでしょう。あなたの質問を読んだ人は、あなたのリポジトリがどのようにその状態になったのか疑問に思うかもしれません。ここで念頭に置いて

は、カップルの考えです:

インデックスの最後の20のバイトがそれまでのファイルの内容のSHA1です。それらが壊れている場合は、16進エディタを使用して上書きすることができます。

~$ python3 
>>> data = open('.git/index', 'rb').read() 
>>> data[-20:].hex() 
'e211d8f60209ca8571c2acc73f9a24ef523b5fa3' 
>>> hashlib.sha1(data[:-20]).hexdigest() 
'e211d8f60209ca8571c2acc73f9a24ef523b5fa3' 

これは、脳損傷を受けたツールによって引き起こされる単純な破損を修正する可能性があります。

あなたが本当に完全に破損したインデックスファイルからあなたができる何かを回復したい場合、あなたはおそらくしたい:リファレンス実装で

  1. 読むindex-format.txt
  2. parse_indexルーチンをlibgit2に見てください。
  3. インデックスファイルの特定のエラーを確認してください。
  4. 壊れないで悪いデータを続けるために、そのルーチンに慎重にパッチを当ててください。

別の方法として、ファイル名のリストを表示したい場合は、stringsユーティリティを使用することができます。関連するバイナリ情報が失われます(バイナリ情報には印刷可能なASCIIジャンクが含まれます)。

+0

文字列は非常に悪くないだけでなく、ゴミもたくさん –

関連する問題