スポンサーリンク

Unable to unlink old : Permission deniedの解消方法と発生原因

ある日VisualStudioを使って開発していると、こんなメッセージが表示されました。

Unable to unlink old <file>: Permission denied

見たことないメッセージで「なんぞ…?」ってなったので、このエラーの発生原因、及び解決方法についてご紹介します!

スポンサーリンク

Unable to link old <file> : Permission deniedの発生理由

実際のコマンドラインの画面

まずこのエラーの発生している理由ですが、直接的な原因はエラーメッセージにある通り、アクセスが拒否されたことにより発生します。

今回、私は自動生成されたファイルをGit管理したくなかったのでgit stashなどを行い変更を破棄しようとしました。その結果上記エラーが発生し、ファイルの変更も破棄もできませんでした。

原因は主に3つあり、私は3番の原因に該当しました。

  1. ファイルパスの問題
  2. ファイルのアクセス権限の問題
  3. 起動中のアプリケーションによる問題

それではそれぞれ原因と、解消方法をご紹介します。

原因1 : ファイルパスの問題

ファイルの置き場所にアクセスするために管理者権限が必要で、コマンドラインから正常にアクセスできない場所などにある場合発生します。

ただGit管理するプロジェクトを管理者権限がないとアクセスできない場所に置くことはあまりないと思うので、こちらの発生頻度は非常に低いと思います。

ファイルパスの解決方法

プロジェクトの置き場所を変更しましょう。

おすすめはDocumentフォルダの中にworkspaceフォルダを作り、各プロジェクトをその中に管理する方法です。ホームディレクトリからアクセスしやすく、権限の問題も無いので自分はいつも同じ構成で管理しています。

原因2 : ファイルのアクセス権限の問題

他の人が変更したファイルをPullで取得した際、ファイルのアクセス権限が書き換わってしまっている場合に発生する可能性があります。

ファイルのアクセス権限の解決方法

chmodコマンドなどを使い、アクセス権限を編集しましょう。

もし問題の原因となっている担当者が分かる場合は、同じ問題が毎回発生しないように担当者のローカル環境や権限の設定を見直しましょう。

原因3 : 起動中のアプリケーションによる問題

起動中のアプリケーション(エディタなど)によってファイルがロックされている場合に発生します。

今回の私の例ですと、VisualStudioでプロジェクトを開いた際に生成されるファイルでエラーが発生していました。

起動中のアプリケーションによる問題の解決方法

エディタなど、現在開いている各種アプリケーションを終了させましょう。

同じエラーが繰り返し発生しないために対応すべきこと

上記のいずれかの対応で、Unable to unlink old <file> : Permission Deniedは解消できましたか?

注意点として、この問題は一度解消しても根本解決をしない限り再発するリスクが非常に高いです。また同じエラーが繰り返し発生しないよう、発生原因をしっかり潰して再発防止しましょう。

ファイルをGitで管理しないと行けないか確認しよう

このエラーが発生する大半のケースは自動生成されたファイル、もしくはエディタなどの設定ファイルが原因です。

そして多くの場合、そのような設定ファイル / 自動生成ファイルはGitで管理する必要がありません。なぜならエディタを起動、もしくはアプリをビルドした際に新しいファイルが生成されるため、古いファイルは必要ないからです。

ファイルをGit管理から除外しよう

Gitで管理が必要ない場合、思い切ってそのファイルGit管理対象から除外しましょう。

Gitは自動的にプロジェクトにある全てのファイルを管理しますが、中には管理したくないファイルも存在します。そんな時に活用されるのがGitの管理対象から除外するための設定ファイル.gitignoreです。

.gitignore.gitファイルと同じ階層(プロジェクトのルートフォルダ)に配置します。ファイルが存在しない場合は.gitignoreという名称でファイルを作成し、Git管理から除外したいファイルパスを記述します。

実際に除外するためのコマンド

例として、sample-folder/setting/autogen-setting.jsonを除外するための手順をご紹介します。

.gitignoreに1ファイル追加する

上記の通り、.gitignoreファイルが存在しない場合は作成し、除外したいファイルのパスを.gitignoreに記述するだけです。

.gitignoreの内容

上記コマンド実行後、.gitignoreの中身は上記のようになっています。
以上でファイルをGit管理対象を外す対応は完了です!

↓.gitignoreの詳しい情報、トラブルシューティングはこちらをどうぞ!↓

おわりに

いかがでしたでしょうか?

自分がこの問題に直面した時に調べても中々情報が出てこなかったため、すこしでもお役に立てていれば幸いです。

それではまたお会いしましょう!

コメント

タイトルとURLをコピーしました