63

レポで git status を実行すると、fatal: Not a git repository: /my repo/.git/modules/docs

私が確認したところ、.git が存在し、適切な権限を持つ HEAD が含まれています。他のさまざまなコマンドを正常に実行できます。git gui を実行すると、正常に開き、変更されたファイルがいくつかリストされますが、多くのファイルが欠落しています。

HEAD になんらかの破損があるのではないかと推測していますが、確かではありません。レポ全体を一掃せずにこれを修正する方法はありますか?

更新: リポジトリのディレクトリの名前を変更したことに気付きました。エラーで参照されているディレクトリは、ディレクトリの古い名前です。したがって、私の現在のレポは at/new dir/.gitですが、エラーはNot a git repository: /old dir/.git/modules/docs. 多分gitは混乱していますか?

4

8 に答える 8

87

これらの 2 つのファイルには、サブモジュールの絶対パスが含まれています。

{submodule}/.git
.git/modules/{submodule}/config

そのため、リポジトリを移動すると、これら 2 つのファイルの絶対パスが無効になり、「git リポジトリではありません」というエラーが発生します。これらのファイルを手動で修正するだけです。

于 2012-12-15T15:40:36.593 に答える
9

私はついに、この問題はサブモジュールの1つに問題があることが原因であると判断しました。リポジトリディレクトリの名前を変更するだけで、そのサブモジュールとの競合が発生しました。の説明を見た後、サブモジュールを使用してgitリポジトリの名前を変更するにはどうすればよいですか?ディレクトリの名前を変更するよりも、リポジトリのクローンを作成する方が良い方法であり、サブモジュールの問題が解決したことに気付きました。

于 2012-04-16T20:02:37.860 に答える
7

私の場合、問題は .git/HEAD ファイルがどこも指していないことでした。奇妙な文字のシーケンスが含まれていました。.git/ORIG_HEAD の内容を .git/HEAD にコピーしたところ、再び機能しました。

ソース

于 2017-03-14T05:57:43.877 に答える
4

@ax003d answerに従って、次のコマンドを使用して、すべての古いパス ( old/path) を新しいパス ( ) に置き換えることができます。new/path

find . -type f \( -name ".git" -o \( -path "*.git/modules/*" -name config \) \)  -print0 | xargs -0 sed -i -e "s#old/path#new/path#g"

それらを置き換える前に、古いパスがどのように見えるかを確認したいかもしれません:

find . -type f \( -name ".git" -o \( -path "*.git/modules/*" -name config \) \)  -print0 | xargs -0 grep --colour "old/path"
于 2014-09-05T00:17:39.257 に答える