おそらくgitリポジトリのコンテンツのアーカイブであるファイル拡張子のない奇妙なファイルがあります。 file (1)
によると、これは「X1アーカイブ」です。
$ file my_git_repo
my_git_repo: X1 archive data
ただし、このファイルの内容を抽出または表示する方法がわかりません。私はもう試した:
tar
unzip
bzip2
xz
lzip
lzma
lzop
gzip
uncompress
しかし、これらのツールはどれも私のファイルを認識しません。 Wikipedia と Arch Wiki も調べてみましたが、どちらのページにも「X1」については触れられていません。 「X1アーカイブ」または「X1ファイルの抽出」のグーグルバリエーションも試しましたが、主に「X1」という名前の製品またはサービスの結果が得られ、「X1」というファイル形式に関連しているようには見えませんでした。最後に、strings
などのツールを使用してファイルを調べてみましたが、ファイルにはgitリポジトリにあると予想されるファイルのファイル名と、そのリポジトリ内のファイルのスニペットが含まれているので、このファイルは単なるランダムデータなどとは思わないでください。
どのような種類のファイルがあり、その内容をどのように表示できますか?
さて、私はこれを理解しました。
ファイルの最初の行に奇妙な文字列が含まれていることに気づきました。
_% head -n 1 my_git_repo | strings
X11 forwarding request failed on channel 0
_
その文字列は見覚えがあります。私のデフォルトのSSH構成はX11接続を転送しようとしますが、転送に失敗した場合(ssh経由でgitサーバーにgit操作を実行した場合など)、その文字列はstderrに出力されます。
_$ git archive --remote=ssh://[email protected]/my_git_repo.git master > my_git_repo.tar
X11 forwarding request failed on channel 0
_
Gitアーカイブを作成したライブラリは、stdoutだけでなく、stdoutとstderrの両方をキャプチャしたと思います。これは、そのファイルの最初の行がどのようになったかを説明します。
したがって、そのファイルの最初の行を削除すると、file (1)
からはるかに合理的な出力が得られます。
_$ tail -n +2 my_git_repo > my_git_repo.edit
$ file my_git_repo.edit
my_git_repo.edit: Zip archive data, at least v1.0 to extract
_
また、ファイルの名前を_my_git_repo.Zip
_に変更し、ファイルの内容を_unzip -l
_で表示しようとすると、期待するファイルが含まれていることがわかり、unzip
でアーカイブを抽出すると、欲しいファイル。
libmagic
が、このファイルが最初から「X1アーカイブ」であると考えた場所はわかりませんが、破損したファイルの最初の2文字が「X1」であることに関係していると思います。