Git을 현재 디렉토리로 복제하는 방법


499

나는 일을 해요:

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

나는 얻는다 :

치명적 : 대상 경로 '.' 이미 존재하며 빈 디렉토리가 아닙니다.

나는 길을 알고있다. 이미 존재 함. 그리고 나는 디렉토리가 비어 있는지 확인할 수 있습니다. (나는 안에 있고 아무것도 볼 수 없다!)

해당 프로젝트를 현재 디렉토리에 복제하기 위해 여기에서 무엇을 놓치고 있습니까?


16
당신은이 경우 ls -a당신이 참조 할 .git디렉토리를?
Davin Tryon

2
@ dtryon-아니요. 그러나 이것이 무엇이든 DS_Store가 보입니다. 아마도 나는 그것을 제거해야합니다. 고마워요 -a : s
MEM

@ 4 빠른 답변 감사합니다. 제임스 맥 롤린 (James Maclaughlin)은 우리가 빈 디렉토리에 복제하도록하는 아름다운 명령 인 것 같습니다. :)
MEM

1
나는 당신이 Mac에 있다고 가정하고 있습니다 . 도움이
되었습니까

그만한 가치가 있다면, Mac에서 탐색하는 모든 폴더에는이 작은 파일이 만들어집니다. 동일한 공유를 사용하는 Windows 사용자와 폴더를 비우거나 폴더의 모든 파일에서 프로그래밍 방식으로 작업을 수행하는 시스템 (예 : git) 모두에게 매우 성가신 일입니다.
jsims281

답변:


509

단순히 옆에 점을 넣으십시오

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

보낸 사람 git help clone:

기존 디렉토리로의 복제는 디렉토리가 비어있는 경우에만 허용됩니다.

따라서 디렉토리가 비어 있는지 확인하십시오 (로 확인 ls -a). 그렇지 않으면 명령이 실패합니다.


18
Mac에서는 파인더가 자동으로 생성 한 .DS_Store 파일이 복제본을 차단한다는 점에 유의하십시오. 확인ls -la
ptim

281
아니. 이것은 정답이 아닙니다. 이것은 여전히 ​​"치명적 : 대상 경로 '."를 리턴합니다. 이미 존재하며 빈 디렉토리가 아닙니다. "
Sid Sarasvati

16
git v1.8.3.2를 사용하여 작동합니다. @SidSarasvati 현재 디렉토리가 비어 있습니까?
웨슬리 보

3
@SidSarasvati 나에게 directoy는 비어 있지 않지만 그것에 대해 신경 쓰지 않으므로 Git이 왜 그런지 잘 모르겠습니다. 비어 있지 않은 디렉토리로 git clone을 사용할 수없는 이유는 무엇입니까? 확실히 기능적인 것은 기본 다운로드 일뿐입니다.
Nathan Hornby

3
mkdir에 하드 링크를 생성 .하고 ..있으므로 기술적으로 유닉스 기반의 시스템에서 "비우기"새 디렉토리가 전혀이며, 기본적으로? 내 말은, 그런 것 같아요 당신은 할 수 unlink .unlink ......하지만 당신이 복제 한 후 다시 재 링크를 잊어 버린 경우이 나중에 당신에게 큰 문제가 발생할 수 있습니다
SeldomNeedy

351

다음은 아마도 모든 경우에 클론과 완전히 동일하지는 않지만 나를 위해 트릭을 수행했습니다.

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

내 경우 .git/config에는 복제를 할 때 얻는 것과 동일한 파일 이 생성 됩니다.


40
또한, 이것은 현재 콘텐츠를 유지할 수있는 주문입니다. 도트 파일을 홈 디렉토리에 복제하는 경우와 같습니다.
rbellamy

7
이것으로 나는 마침내 Git이 나를 아기처럼 대우하지 않고 내가 좋아하는 폴더에 복제 할 수 있습니다. 또한 *모든 것을 무시 하고 임시 .gitignore를 추가 git checkout master하면 폴더에 다른 파일이 이미 있어도 수행 할 수 있습니다. 그런 다음 저장소에서 커밋 된 모든 파일이 복제되었습니다 (그리고 임시 .gitignore는 저장소의 적절한 .gitignore로 덮어 썼습니다). 모두 훌륭하게 작동했습니다. 이런 식으로 git clone -f또는 무언가 를 사용하여 자체적으로 발생해야합니다 .
PaulMag

1
덮어 쓰게 될 파일이 다르거 나 새 파일이거나 변경된 파일이있는 경우 (... 파일은 체크 아웃으로 덮어 씁니다 ... 중단됨) 사용 : git checkout master -f
visualex

3
-t \*이 기본이기 때문에 불필요합니다.
Palec

1
git remote set-head origin -a편리 할 수 ​​있습니다. refs/remotes/origin/HEAD원격 리포지토리에 설정된 원점의 기본 분기 ( )를 설정합니다. git clone와 달리 자동으로 수행합니다 git remote add -f.
Palec

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

repo를 복제하려면 임시 디렉토리로 이동하여 프로젝트를 복제하십시오.

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 Šimerda

그런 다음 숨겨진 파일을 수동으로 이동하거나 복잡한 명령을 사용해야하며 질문에 대답하지 않습니다.
블랙



15

흠 ... 절대 전류 경로를 지정 $(pwd)하면 나를 위해 일했습니다.

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

자식 버전 : 2.21.0


13

현재 디렉토리가 비어 있으면 다음과 같이 작동합니다.

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

1
내 경우에는 '.'의 일부 파일에서도 작동했습니다. 디렉토리
OSdave

2
foo 아래의 디렉토리에있는 모든 도트 파일. 이 명령으로 foo / bar / .foobar가 이동되지 않습니다. @phatblat의 답변보기
lea

10

@StephaneDelcroix의 답변 외에도 다음을 사용하십시오.

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

사용하여 현재 디렉토리가 비어 있는지 확인하십시오.

ls -a

오늘이 문제에 직면했습니다. 리포지토리를 복제하려는 디렉토리에 .git 및 .gitignore 폴더가 숨겨져있는 것으로 나타났습니다. 이 폴더를 제거하면 모든 것이 정상이었습니다.
타마라

현재 디렉토리를 비우는 명령은 무엇입니까? 나는 그것을 확인하는 것보다 더 유용하다고 생각합니다 :)
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

18
정말 SCARY 경고 표시없이 rm -rf (어떤 형태로든)를 SO 답변에 쓰는 것이 현명하지 않습니다. 경험이없는 일부 사용자는 "녹색 확인 표시"(일반적으로 가장 적합한 답변)를 찾은 다음이 명령을 복사하여 붙여 넣습니다. BTW : rm -rf ./.*현재 디렉토리 아래에 숨겨진 (도트) 파일과 디렉토리를 제거하면 "safer"입니다 (@stackunderflow가 앞에서 언급 한 것처럼). 그러나 rm -rf경험이없는 사용자에게는 위험한 명령이므로 조심하십시오! 그냥 내 2 센트.
Andrew

1.7.1에 작품 유일한 폴더 안에이었다 .gitgit init(나는 그것을 알고 있었다)
vladkras

-rf일반 파일은 삭제할 필요가 없습니다 . 이 답변을 삭제하거나 적어도 다른 답변을 수락하십시오.
Navin

6

@GoZoner의 답변 개선 :

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

shopt 명령은 이 SO 답변 에서 가져 왔으며 Bash에서 'mv'명령의 동작을 변경하여 .git 디렉토리 및 기타 숨겨진 파일을 포함 해야하는 도트 파일을 포함시킵니다.

또한 현재 디렉토리 (.)가 비어있는 경우에만 그대로 작동하지만 복제 된 저장소에있는 파일 중 현재 디렉토리에있는 파일과 이름이 같은 파일이없는 한 작동합니다. 현재 디렉토리의 내용을 신경 쓰지 않으면 'mv'명령에 -f (강제) 옵션을 추가 할 수 있습니다.


6

나는 똑같은 필요가 있었다. 필자의 경우 웹 서버 설치로 생성되는 표준 웹 폴더가 있습니다. 이 그림의 목적 상 이것이

/server/webroot

webroot에는 다른 표준 파일 및 폴더가 포함되어 있습니다. 내 저장소에는 사이트 특정 파일 (html, javascript, CFML 등)이 있습니다.

내가해야 할 일은 :

cd /server/webroot

git init

git pull [url to my repo.git]

대상 폴더에서 git init을 수행하려면 다음 두 가지 중 하나가 발생하지 않기 때문에주의해야합니다.

  1. 내 경우에는 git 파일이 없다는 메시지와 함께 git pull이 실패합니다.

치명적 : 자식 저장소가 아니거나 부모 디렉토리가 아닙니다 : .git

  1. 폴더의 상위 경로에 .git 파일 있으면 .git 파일이 포함 된 THAT 상위에 끌어온 리포지토리가 생성됩니다. 이것은 나에게 일어 났고 나는 그것에 놀랐다. ;-)

이것은 webroot 폴더에있는 "표준"파일을 방해하지는 않았지만 후속 커밋에 부주의로 추가되는 것을 방지하기 위해 .gitignore 파일에 추가해야했습니다.

이것은 비어 있지 않은 디렉토리로 "복제"하는 쉬운 방법 인 것 같습니다. 풀에 의해 생성 된 .git 및 .gitignore 파일을 원하지 않는 경우, 풀 후 삭제하십시오.


5

@phatblat의 답변을 더 개선하십시오 :

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

하나의 라이너로 :

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
코드가 문제를 해결하는 이유와 해결 방법을 설명하는 추가 정보를 제공하십시오.
Martin

"git clone ... tmp"-명령이 실행되는 디렉토리에 / tmp 폴더를 작성하고 Git 저장소를 복제합니다. 그런 다음 "mv tmp / *." -이전 명령이 실행 된 상위 폴더의 / tmp 폴더에서 모든 파일을 이동하고 마지막으로 "rm -rf tmp"-/ tmp 폴더를 제거합니다.
Marinski

1

아래와 같이 명령 끝에. (점)을 사용하십시오.

자식 복제 URL .


이것은 Mac에서 작동하지 않습니다. 오류가 발생합니다. fatal: destination path '.' already exists and is not an empty directory.
Pedro Luz

Mac의 경우 :: 부모 디렉토리 아래에 git clone URL flodername 과 같이. (도트) 대신 폴더 이름을 사용해야합니다. 폴더가 비어 있는지 확인하십시오.
Upendra

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응답을 얻었을 것입니다. 내 첫 번째 단서가 있었으므로 초기 오류 (나를 위해)는 실제로 잘못된 루트로 뛰어 들었습니다. 발행물.

창에서 이것에 대한 해결 방법 : 실행 확인 cmd또는 git elevated다음 실행 :

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

위의 문제는 내 문제이며 단순히 높이는 것이 효과적이었습니다.


0

해결책 Windows은 리포지토리를 다른 폴더로 복제 한 다음 원래 위치로 복사하여 붙여 넣거나 .git보이지 않는 폴더를 복사하는 것입니다.


-1

로 제거

rm -rf. *

문제 또는 더 많은 오류가 발생할 수 있습니다.

/ path / to / folder가 있고 해당 폴더가 아닌 내부의 모든 것을 제거하려면 다음을 실행하십시오.

rm -rf / 경로 / to / 폴더 / *


-1

그래서 루트 디렉토리에서 숨겨진 .git 폴더를 삭제 한 다음 'git clone repo'에 마침표를 추가하여 동일한 오류를 수정했습니다. 내 루트 / dist 폴더에 이것은 vue-cli 웹팩 프로젝트와 관련이 있습니다. 따라서 다른 사람들이 말하는 것은 옳습니다. 일반적으로 복제하려는 폴더 또는 상위 폴더 또는 해당 폴더의 루트에 git 추적이 있음을 의미합니다!


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

비어 있지 않은 상태 에서이 작업을 수행하는 경우 여전히 질문에 게시 된 동일한 오류가 발생합니다 ( " 치명적 : 대상 경로 'resolved / path / of / pwd'가 이미 존재하고 비어있는 디렉토리가 아닙니다. ") . 예배 규칙서.
Gino Mempin


-2

mkdir filename다음 명령을 실행하여 새 파일을 만드는 것이 유용합니다 git clone xxxxx. 내 컴퓨터에서 작동합니다.


-3

나는이 질문을 여러 번 보았습니다 git pull. 디렉토리에서 트릭을 수행 할 것이라고 지적하고 싶습니다 .

내가 여기에 뭔가 빠진 경우가 아니면-그것은 나를 위해 일했다.


5
git pull저장소가 정의되어 있지 않으면 아무것도 git clone하지 않습니다. 이것은 중요한 역할을합니다 .
hackel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.