Gitでgit cloneを使ってリポジトリを取得するときに、fatal: destination path 'xxx' already exists and is not an empty directory.のエラーが出て困ったことはありませんか?
この記事では、このエラーについて、以下の内容をわかりやすく解説します。
- エラーの意味
- なぜ発生するのか
- 具体的な再現例
- 3つの解決方法
fatal: destination path 'xxx' already exists and is not an empty directory.の原因
fatal: destination path 'xxx' already exists and is not an empty directory.のエラーは「git cloneしようとしているフォルダ名がすでに存在していて、しかも空ではない」場合に発生します。
Gitはgit clone時に「リポジトリ名のフォルダ」を作成します。そのため同じ名前のフォルダがあると衝突してgit cloneできません。
では実際に上記のエラーを出してみましょう。
例えば、次のようなコマンドでGitHubから「Hello-World」リポジトリをgit cloneします。
git clone https://github.com/octocat/Hello-World.gitすると、カレントディレクトリにHello-Worldというフォルダができます。
次に、もう一度同じコマンドを実行してみます。
git clone https://github.com/octocat/Hello-World.gitすると次のエラーが出ます。
fatal: destination path 'Hello-World' already exists and is not an empty directory.fatal: destination path 'xxx' already exists and is not an empty directory.の解決方法
このエラーの解決方法は下記に示すようにいろいろあります。
Hello-Worldフォルダ本体を削除して、再度git cloneするHello-Worldフォルダの中身を空にして、再度git cloneするHello-Worldフォルダの名前を変更して、再度git cloneする
Hello-Worldフォルダ本体を削除して、再度git cloneする
rm -rf Hello-WorldでHello-Worldフォルダ本体を削除して、再度git cloneします。コマンドを以下に示します。
rm -rf Hello-World
git clone https://github.com/octocat/Hello-World.gitすると、エラーが表示されずに、カレントディレクトリに、Hello-Worldフォルダが生成されます。最も簡単な解決方法です。
Hello-Worldフォルダの中身を空にして、再度git cloneする
rm -rf Hello-World/{,.}でHello-Worldフォルダの中身を空にして、再度git cloneします。コマンドを以下に示します。
rm -rf Hello-World/{*,.*}
git clone https://github.com/octocat/Hello-World.gitすると、エラーが表示されずに、カレントディレクトリに、Hello-Worldフォルダが生成されます。
Hello-Worldフォルダの名前を変更して、再度git cloneする
Hello-Worldフォルダの名前を変えて(例えばHello-World → Hello-World-subなど)、再度git cloneします。
git clone https://github.com/octocat/Hello-World.gitすると、エラーが表示されずに、カレントディレクトリに、Hello-Worldフォルダが生成されます。この場合、既存フォルダはHello-World-subフォルダとして残ります。Hello-World-subフォルダは必要なければ後で削除して OK です。
本記事のまとめ
fatal: destination path 'xxx' already exists and is not an empty directory.は、clone先のフォルダが既に存在していて空ではないときに起きるエラーです。
フォルダを削除する・空にする・名前を変更するなど、いずれかの方法で簡単に解決できます。
git cloneでこのエラーが出たときは、本記事の解決方法を参考に試してみてください。
お読みいただきありがとうございました。