2

git リポジトリである作業ディレクトリがあります。今日、フォルダとファイル構造を大幅に変更し、.gitディレクトリも少し移動しました。これらの変更をコミットしようとすると、次のエラーが発生します。

fatal: Not a git repository (or any parent up to mount parent )

エラーをグーグルで調べたところ、現在のディレクトリがgitリポジトリであるかどうかを判断するためにgitが使用する基準が見つかりました。.gitいくつかのファイルとフォルダーが不足していることが判明しました。

$ ls -la .git
total 36
drwxr-xr-x   5 oli oli 4096 Apr  6 10:51 .
drwxr-xr-x  10 oli oli 4096 Apr  6 11:05 ..
-rw-r-xr--   1 oli oli   30 Mar  3 13:39 COMMIT_EDITMSG
-rw-r--r--   1 oli oli   41 Mar  3 13:40 ORIG_HEAD
-rw-r--r--   1 oli oli 6612 Mar  3 13:40 index
drwxr-xr-x   2 oli oli 4096 Jan 27 19:58 info
drwxr-xr-x   3 oli oli 4096 Jan 27 19:58 logs
drwxr-xr-x 165 oli oli 4096 Mar  3 13:40 objects

別のリポジトリと比較すると、複数のオブジェクトが欠落しています。最も重要なのはHEADファイルです。どのようにしてそれらが失われたのか正確にはわかりませんが (私は常にディレクトリ全体を移動しました)、問題は、すべてを復元して、コミット ログを保持し、変更をリポジトリにコミットできるようにする方法です。

4

1 に答える 1

2

これが機能するかどうかはわかりませんが、これを試してください(バックアップを作成した後)。からのファイルが失われていないことを願っています.git/objects。そうでなければ、何かが役立つとは思えません。

  1. で空のリポジトリを作成しますgit init
  2. その上に不完全なリポジトリをコピーし、空のリポジトリにもあったファイルを上書きします。

Git リポジトリとして認識されているが、一部のコミットが欠落している場合は、次のようにします。

  1. git fsck --lost-found
  2. .git/lost-found/commitディレクトリを下に移動します.git/refs/heads
  3. 履歴を確認し、gitk --all保存したいものに対してブランチまたはタグを作成します。
  4. .git/refs/heads最後にクリーンアップ: 保存されたブランチをリモート リポジトリにプッシュするか、失われたブランチと見つかったブランチから削除します。

次に、リモート リポジトリにプッシュするか、自動バックアップ アプリケーションを使用して、バックアップを作成することを忘れないでください。;)

于 2012-04-06T10:25:56.957 に答える