Gitを現在のディレクトリに複製する方法


499

私がやっている:

git clone ssh://user@host.com/home/user/private/repos/project_hub.git ./

私は得ています:

致命的:宛先パス '。' はすでに存在し、空のディレクトリではありません。

私は道を知っています。もう存在している。そして、ディレクトリが空であることを保証できます。(私は内部でlsを実行し、何も表示しません!)

そのプロジェクトを現在のディレクトリに複製するためにここで何が欠けていますか?


16
あなたがしなければls -a、あなたは見てい.gitたディレクトリを?
Davin Tryon

2
@dtryon-いいえ。しかし、これが何であれ、DS_Storeが表示されます。多分私はそれを取り除くべきです。それをありがとう-a:s
MEM

@ありがとう4つの迅速な返信。James Maclaughlinは、空のディレクトリに複製することを確認するための美しいコマンドのようです。:)
MEM 2012年

1
私はあなたがMacを使っていると仮定しています。:この役立ちますstackoverflow.com/questions/107701/...
デーヴィントライオン

価値があるのは、Macで参照するフォルダーにこれらの小さなファイルが作成されることです。同じ共有を使用しているWindowsユーザーと、フォルダーを空にする必要がある、またはフォルダー内のすべてのファイルに対してプログラムでアクションを実行するシステム(gitなど)の両方にとって、これは非常に迷惑です。
jsims281 2012年

回答:


510

その横にドットを置くだけ

git clone git@github.com:user/my-project.git .

からgit help clone

既存のディレクトリへのクローン作成は、ディレクトリが空の場合にのみ許可されます。

したがって、ディレクトリが空であることを確認してください(で確認ls -a)。それ以外の場合、コマンドは失敗します。


18
Macでは、finderによって自動作成された.DS_Storeファイルがクローンをブロックすることに注意してください。確認ls -la
ptim

281
いいえ。これは正しい答えではありません。これは、依然として「致命的:宛先パス」を返します。はすでに存在し、空のディレクトリではありません。」
Sid Sarasvati、

16
git v1.8.3.2を使用して動作します。@SidSarasvati現在のディレクトリが空になっていますか?
Wesley Baugh

3
@SidSarasvati私にとってはディレクトリは空ではありませんが、私はそれを気にしないので、なぜGitがそうするのかわかりません。空でないディレクトリにgit cloneできないのはなぜですか?確かに機能的には、基本的なダウンロードだけです。
Nathan Hornby 14

3
mkdirハードリンクを作成する...、デフォルトではので、新しいディレクトリは、技術的にはまったく、Unixベースのシステムでは「空」ですか?つまり、できるunlink .と思いますが、unlink ..クローン後に再度リンクし忘れた場合、後で大きな問題が発生する可能性があります
。–

351

以下はおそらくすべてのケースでクローンと完全に同等ではありませんが、私にとってはトリックでした:

git init .
git remote add -t \* -f origin <repository-url>
git checkout master

私の場合、.git/configクローンを作成したときに取得するファイルと同等のファイルが生成されます。


40
さらに、これは現在のコンテンツを保持できるようにする呪文です。たとえば、ドットファイルをホームディレクトリに複製した場合などです。
rbellamy 2014

7
これで、Gitが私を赤ん坊のように扱わなくても、好きなフォルダにクローンを作成できます。*(すべてを無視する)一時的な.gitignoreも追加するgit checkout masterと、フォルダー内に既に他のファイルがあったとしても、実行できました。次に、リポジトリからコミットされたすべてのファイルが複製されました(そして一時的な.gitignoreは、リポジトリからの適切な.gitignoreによって上書きされました)。すべてうまくいきました。git clone -fまたは何かを使用することにより、それ自体でこの方法で発生するはずです。
PaulMag、2014年

1
上書きされる異なる/新しい/変更されたファイルがある場合(...ファイルはチェックアウトによって上書きされます...中止)使用:git checkout master -f
visualex

3
これ-t \*はデフォルトなので不要です。
Palec 2017年

1
git remote set-head origin -a重宝するかもしれません。これはrefs/remotes/origin/HEAD、リモートリポジトリで設定されているように、オリジンのデフォルトブランチ()を設定します。git cloneとは異なり、これは自動的に行われgit remote add -fます。
Palec 2017年

212

@Andrewはここで明確に回答しています。しかし、ディレクトリが空でなくてもこれが機能するのと同じくらい簡単です:

git init .
git remote add origin <repository-url>
git pull origin master

私は<repository-url>ローカルリポジトリとしても確認できてうれしいgit remote add origin /path/to/existing/repo
krubo

60

リポジトリを複製できることを確認するには、一時ディレクトリに移動して、プロジェクトをそこに複製します。

git clone ssh://user@host.com/home/user/private/repos/project_hub.git

これはあなたのものをproject_hubディレクトリにクローンします。

複製が完了したら、このディレクトリを好きな場所に移動できます。

mv project_hub /path/to/new/location

これは安全で、周りに魔法のようなものを必要としません。


9
これにより、既存のディレクトリにサブディレクトリが作成されますが、/path/to/new/locationこれは確かに問題ではありません。
PavelŠimerda16年

次に、隠しファイルを手動で移動するか、複雑なコマンドを使用する必要があります...そしてそれは質問に答えません。



15

うーん... $(pwd)私のために使用して使用して絶対電流パスを指定します。

git clone https://github.com/me/myproject.git $(pwd)

gitバージョン: 2.21.0


13

現在のディレクトリが空の場合、これは機能します:

git clone <repository> foo; mv foo/* foo/.git* .; rmdir foo

1
私の場合、「。」内のいくつかのファイルでも機能しました ディレクトリ
OSdave 2012

2
fooの下のディレクトリにあるすべてのdotfileに注意してください。foo / bar / .foobarは、このコマンドでは移動されません。@phatblatからの回答を参照してください
LEA

10

@StephaneDelcroixの回答に加えて、使用する前に:

git clone git@github.com.user/my-project.git .

を使用して、現在のディレクトリが空であることを確認してください

ls -a

今日この問題に直面しました。リポジトリのクローンを作成しようとしたディレクトリに.gitおよび.gitignoreフォルダーが隠されていたことがわかりました。これらのフォルダを削除したとき、すべてが大丈夫でした。
Tamara

現在のディレクトリを空にするコマンドは何ですか?私はそれをチェックするだけのほうが便利だと思います:)
pie6k

9

解決策:この場合、解決策はを使用していたdotため、次のようになります。rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .

rm -rf .* && ディレクトリが空であることが確実な場合は省略できます。

クレジットは以下に行きます:@James McLaughlin以下のコメント


10
。*には親ディレクトリが含まれているため、これは悪そうに見えます!me:〜/ tmp / tmp / tmp $ ls -d .* . .. me:〜/ tmp / tmp / tmp $
stackunderflow

チェックアウトする必要があるディレクトリに依存関係があるため、これは役に立ちません。
b01 2014年

18
REALLY SCARYの警告サインなしでrm -rfを(任意の形式で)SO回答に書き込むのが賢明かどうかはわかりません。経験の浅いユーザーが "緑のチェックマーク"(通常は最良の答え)を探してここに来て、このコマンドとコピーをコピーして貼り付けると、現在のディレクトリでハードワークが行われます。ところでrm -rf ./.*、現在のディレクトリの下にある隠し(ドット)ファイルとディレクトリを削除する場合(@stackunderflowが私の前に述べたように)、「安全」です。しかしrm -rf、経験の浅いユーザーにとっては危険なコマンドなので、注意してください。ちょうど私の2セント。
Andrew

1.7.1上の作品は唯一のフォルダ内にいた.git後にgit init(私はそれを知っていた)
vladkras

-rf通常のファイルを削除する必要はありません。この回答を削除するか、少なくとも別の回答を受け入れることを検討してください。
Navin、2016

6

@GoZonerの答えを改善する:

git clone <repository> foo; shopt -s dotglob nullglob; mv foo/* .; rmdir foo

shoptコマンドはこのSOの回答から取得され、Bashの「mv」コマンドの動作を変更してドットファイルを含めます。ドットファイルには、.gitディレクトリとその他の隠しファイルを含める必要があります。

また、これは、現在のディレクトリ(。)が空の場合に限り、そのまま動作することが保証されていますが、クローンされたリポジトリ内のどのファイルも現在のディレクトリ内のファイルと同じ名前でない限り、動作します。現在のディレクトリの内容が気にならない場合は、-f(force)オプションを 'mv'コマンドに追加できます。


6

私にも同じ必要がありました。私の場合、Webサーバーのインストールによって作成される標準のWebフォルダーがありました。この図では、これが

/server/webroot

webrootには他の標準的なファイルとフォルダーが含まれています。私のリポジトリには、サイト固有のファイル(html、javascript、CFMLなど)しかありません。

私がしなければならなかったすべては:

cd /server/webroot

git init

git pull [url to my repo.git]

ターゲットフォルダーでgit initを実行する場合は注意が必要です。そうしないと、次の2つのいずれかが発生します。

  1. 私の場合、git pullは単にgitファイルがないというメッセージで失敗します:

fatal:gitリポジトリ(または親ディレクトリ)ではありません:.git

  1. フォルダーへの親パスのどこかに.gitファイルある場合、プルされたリポジトリは、.gitファイルを含むその親に作成されます。これは私に起こり、私はそれに驚いた;-)

これは、自分のwebrootフォルダーにある「標準」ファイルのいずれにも影響を与えませんでしたが、それらを.gitignoreファイルに追加して、その後のコミットに誤って追加されないようにする必要がありました。

これは、空でないディレクトリに「クローン」する簡単な方法のようです。プルによって作成された.gitおよび.gitignoreファイルが不要な場合は、プルの後に削除してください。


5

@phatblatの答えをさらに改善する:

git clone --no-checkout <repository> tmp \
  && mv tmp/.git . \
  && rmdir tmp \
  && git checkout master

1つのライナーとして:

git clone --no-checkout <repository> tmp && mv tmp/.git . && rmdir tmp && git checkout master


2
shopt -s dotglob
git clone ssh://user@host.com/home/user/private/repos/project_hub.git tmp && mv tmp/* . && rm -rf tmp

3
コードが問題を修正する理由とそれが何をするかを説明するために、より多くの情報を提供してください。
マーティン

"git clone ... tmp"-コマンドが実行されるディレクトリに/ tmpフォルダを作成し、Gitリポジトリを複製します。次に「mv tmp / *」。-すべてのファイルを(前のコマンドが実行された)親フォルダーの/ tmpフォルダーから移動し、最後に "rm -rf tmp"-/ tmpフォルダーを削除します。
マリンスキー2018

1

以下のように、コマンドの最後に。(ドット)を使用します

git clone URL


これは、Mac上では動作しません、それはエラーが発生します fatal: destination path '.' already exists and is not an empty directory.
ペドロ・ルス

Macの場合::親ディレクトリの下で、次のように。(ドット)の代わりにフォルダ名を使用する必要があります git clone URL flodername フォルダが空であることを確認してください。
Upendra 2017年

0

ここに私が見つけたものがあります:

私はこれを見る:

fatal: destination path 'CouchPotatoServer' already exists and is not an empty directory.

私の検索の中で、私は偶然に出会いました:

https://couchpota.to/forum/viewtopic.php?t=3943

Clinton.Hallによるエントリを探してください...(私が行ったように)これを試すと、おそらくaccess denied応答が得られます。最初の手がかりがあったため、最初のエラー(私にとって)は実際には間違ったルートを回避していました問題。

Windowsでのこの解決策:cmdまたはを実行してからgit elevated、次を実行してください:

git clone https://github.com/RuudBurger/CouchPotatoServer.git

上記は私の問題であり、単に昇格することでうまくいきました。


0

の解決策Windowsは、リポジトリを他のフォルダに複製し、コピーして元の場所に貼り付けるか、単に非.git表示のフォルダをコピーすることです。


-1

で削除

rm -rf。*

トラブルやエラーが発生する可能性があります。

/ path / to / folderがあり、そのフォルダーではなく、中身をすべて削除したい場合は、次のコマンドを実行します。

rm -rf / path / to / folder / *


-1

そこで、ルートディレクトリの非表示の.gitフォルダーを削除し、ピリオドを 'git clone repo'に追加することで、この同じエラーを修正しました。私のroot / distフォルダにあります。これは、vue-cli webpackプロジェクトのコンテキストにあります。だから、他の誰もが言っていることは正しいです、それは通常、クローンを作成しようとしているフォルダー、または問題のフォルダーの親フォルダーまたはルートのいずれかにgitトラッキングがあることを意味します!


-1
git clone ssh://user@host.com/home/user/private/repos/project_hub.git $(pwd)

空でない状態でこれを実行している場合、これは質問に投稿されたのと同じエラーが引き続き発生することに注意してください( " 致命的:宛先パス 'resolved / path / of / pwd'は既に存在し、空のディレクトリではありません。 ")ディレクトリ。
ジノメンピン


-2

それはして新しいファイルを作成すると便利ですmkdir filename、その後のコマンドを実行している、git clone xxxxxそれは私のコンピュータで作業を行い、


-3

私はこの質問を何度も見ました-そして私git pullはあなたのディレクトリの中からトリックをすることを指摘したいだけです。

私がここで何かを見逃していない限り-それは私のために働いた。


5
git pullリポジトリが定義されていない場合、何も実行されません。これは、機能の重要な部分ですgit clone
hackel 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.