プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

Gitが.git/FETCH_HEADを開くことができません:権限が拒否されました解決策

Gitには、プロジェクトフォルダー内の.git/というディレクトリ内のファイルに対する書き込み権限が必要です。 Gitコマンドラインがこのフォルダーにアクセスできない場合、ファイルをプルしようとすると、「。git / FETCH_HEADを開けません:アクセスが拒否されました」などのエラーが発生します。

このガイドでは、このエラーの意味とその原因について説明します。プログラムで修正する方法を学ぶことができるように、例を見ていきます。

.git / FETCH_HEADを開くことができません:アクセスが拒否されました

Gitリポジトリには、.git/という特別なフォルダが含まれています。このフォルダは非表示になっているため、表示されていない可能性があります。このフォルダの非表示ステータスは、フォルダ名の先頭にあるピリオド(「。」)で示されます。

このフォルダーには、リポジトリに関するさまざまなメタデータが含まれています。プロジェクト固有の構成オプション、プロジェクト内の参照、現在のHEAD、およびリポジトリに関するその他の重要な情報を追跡します。

Gitには、このフォルダーへの読み取りおよび書き込みアクセス権が必要です。これは、gitconfigやgitpullなどのコマンドを実行すると内容が変わるためです。

シナリオ例

GitHubからck-gitというリポジトリのクローンを作成します。このリポジトリには、README.mdというファイルが含まれています。このリポジトリのクローンを作成するには、gitcloneコマンドを使用できます。

sudo git clone https://github.com/Career-Karma-Tutorials/ck-git

現在、README.mdファイルの内容は次のとおりです。

# ck-git

このファイルを変更して、より説明的なREADME.mdを含めます。このファイルをテキストエディタで開き、内容を次のように変更します。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

# Career Karma Git Demo

CareerKarmaのGitチュートリアルのデモファイルを含むリポジトリ。

それが良いです。私たちのファイルは、Gitリポジトリの目的をより正確に記述しています。次に、この変更をステージング領域に追加して、コミットを作成できるようにします。

sudo git add README.md

Gitは、README.mdを次のコミットに追加することを認識しています。変更をリモートリポジトリに表示するには、それらをコミットに追加する必要があります。

sudo git commit -m "docs: Make README.md more descriptive"

これで、コミットをリモートリポジトリにプッシュする準備が整いました。コードをプッシュする前に、リポジトリのリモートバージョンをプルします。これにより、リポジトリのクローンを作成してから行われた変更を最新の状態に保つことができます。

git pull

このコマンドは次を返します。

error: cannot open .git/FETCH_HEAD: Permission denied

このエラーは、Gitが構成ファイルの1つであるFETCH_HEADにアクセスできないことを示しています。

ソリューション

「sudo」コマンドを使用してck-gitリポジトリのクローンを作成しました。これは、リポジトリがrootユーザーとして複製されたことを意味します。 rootユーザーがリポジトリのクローンを作成したため、リポジトリ内のファイルはrootユーザーが所有しています。

これは、ls-laコマンドを実行することで確認できます。

total 8
drwxr-xr-x   4 root   staff   128 Sep 17 07:15 .
drwxr-xr-x+ 90 James  staff  2880 Sep 17 07:15 ..
drwxr-xr-x  12 root   staff   384 Sep 17 07:15 .git
-rw-r--r--   1 root   staff 	1 Sep 17 07:15 README.md

フォルダ内のすべてのファイルは、「staff」アカウントの一部である「root」によって所有されています。 「sudo」を使用せずにリモートリポジトリをプルしようとすると、エラーが返されます。これは、標準のユーザーアカウントに、フォルダー内のファイルを変更する権限がないためです。

この問題を修正するために、フォルダー内のファイルの所有権を変更します。これは、chownコマンドを使用して実行できます:

sudo chown -R james:staff .

このコマンドは、.git /フォルダーを含む、リポジトリ内のすべてのファイルとフォルダーの所有権の詳細を変更します。これでディレクトリの所有者になり、プロジェクトフォルダへのフルアクセス権があります。これで、コードをプルできるようになります。

git pull

このコマンドは正常に実行され、次を返します。

Already up to date.

最後にコードをプルしてから、リモートリポジトリに変更が加えられていないことがわかりました。リポジトリを作成したときに最後にコードをプルしました。

結論

プロジェクトフォルダの.git/ディレクトリに現在のユーザーがアクセスできないときに、リモートリポジトリからコードをプルしようとすると、Gitの「.git / FETCH_HEADを開けません:アクセスが拒否されました」エラーが発生します。

このエラーを解決するには、現在のユーザーが、作業しているGitリポジトリへの読み取り/書き込み権限を持っていることを確認してください。


  1. レスキューへのGitリセット

    自分で、またはチームの一員としてプロジェクトに取り組んでいる場合、コミットを元に戻したい場合があります。 git reset コマンドは、実際の命の恩人として知られているツールの1つです。 Gitの追跡メカニズム git resetに進む前に 、gitの基本構造について理解する必要があります。 Gitは、ノードとポインターを備えたツリーのような構造を介して、ファイルを管理および追跡します。 ローカルのgitリポジトリには基本的にこれらの「ツリー」が3つあります: 作業ディレクトリ :または作業ツリー。ローカルディレクトリと git statusを参照します。 作業ディレクトリの

  2. GitとGitHubの使用を開始する方法

    GitHubは現在、世界最大のオープンソースプロジェクトのホストです。 Atomテキストエディター、GoogleのTensorFlow、FacebookのReactなど、人気のあるGitHubページの例はたくさんあります。ビッグデータ、人工知能、モノのインターネットに関する高度なプロジェクトを収容することで最もよく知られていますが、アニメーション、絵文字、ゲーム、およびより単純なソフトウェアも見つけることができます。この手法は、ソフトウェアとアプリを除いて、「トレント」にいくぶん似ています。 GitHubの探索を始めたばかりの場合は、急な学習曲線があります。そのため、GitHubの世界を優し