sourcecode

Git를 현재 디렉터리로 복제하는 방법

copyscript 2023. 5. 9. 22:55
반응형

Git를 현재 디렉터리로 복제하는 방법

내가 하는 일:

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

다음과 같은 정보:

Fatal: 대상 경로 '.'가 이미 있으며 빈 디렉토리가 아닙니다.

경로가 이미 존재한다는 것을 알고 있습니다.디렉토리가 비어 있음을 확인할 수 있습니다. (안에서 작업을 수행하지만 아무것도 보이지 않습니다!)

해당 프로젝트를 현재 디렉터리로 복제하려면 여기에 무엇이 부족합니까?

간단히 그 옆에 점을 찍습니다.

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

git help clone:

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

따라서 디렉토리가 비어 있는지 확인합니다.ls -a할 것입니다.), 를 참조하십시오.

다음은 모든 경우에 복제본과 완전히 동일하지는 않지만 유용하게 사용할 수 있습니다.

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

제 경우, 이것은 다음과 같은 결과를 낳습니다..git/config복제를 수행할 때 받는 파일과 동일한 파일입니다.

@앤드류는 여기서 그것에 대해 명확하게 대답했습니다.그러나 디렉토리가 비어 있지 않은 경우에도 마찬가지로 간단하게 작동합니다.

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

git clone https://user@bitbucket.org/user/projectname.git .

디렉터리는 비어 있어야 합니다.

repo를 복제할 수 있는지 확인하려면 임시 디렉토리로 이동하여 프로젝트를 복제합니다.

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

됩니다.project_hub디렉토리입니다.

복제가 완료되면 이 디렉터리를 원하는 위치로 이동할 수 있습니다.

mv project_hub /path/to/new/location

이것은 안전하고 주변에 어떤 마법적인 것도 필요하지 않습니다.

git clone your-repo tmp && mv tmp/.git . && rm -rf tmp && git reset --hard

하려면 를 사용합니다.$(pwd)저를 위해 일했습니다.

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

Git 버전: 2.21.0

티켓 설명에 따라 빈 디렉토리가 필요합니다.


2022: UPDATE 2022를 사용할 수 ..

예.

git clone https://github.com/me/myproject.git .

버전: 2.36.1

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

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

은 솔션은다사용다니습했음을루▁the▁using다▁was▁the▁solution니습용을 사용한 것이었습니다.dot그래서:

rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .`

rm -rf .* &&디렉터리가 비어 있는 것이 확실한 경우 생략할 수 있습니다.

크레딧 대상: @James McLaughlin 댓글

@StephaneDelcroix의 답변 외에도, 다음을 사용하기 전에:

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

를 사용하여 현재 dir가 비어 있는지 확인합니다.

ls -a

저도 같은 욕구가 있었습니다.저의 경우 웹 서버 설치로 생성된 표준 웹 폴더가 있었습니다.이 그림의 목적을 위해 다음과 같이 가정합니다.

/server/webroot

및 webroot에는 다른 표준 파일 및 폴더가 포함되어 있습니다.제 레포에는 사이트별 파일(html, javascript, CFML 등)만 있습니다.

내가 해야 할 일은:

cd /server/webroot

git init

git pull [url to my repo.git]

대상 폴더에서 git init를 수행하지 않으면 다음 두 가지 작업 중 하나가 수행되기 때문에 주의해야 합니다.

  1. git pull은 단순히 nogit 파일에 대한 메시지와 함께 실패합니다. 이 경우:

fatal: not git 저장소(또는 상위 디렉터리): .git

  1. 폴더의 부모 경로 어딘가에 .git 파일이 있으면 .git 파일을 포함하는 해당 부모에 풀된 repo가 생성됩니다.이런 일이 저에게 일어났고 저는 그것에 놀랐습니다 ;-)

이것은 제 웹 루트 폴더에 있는 "표준" 파일을 방해하지는 않았지만 실수로 다음 커밋에 추가하는 것을 방지하기 위해 .gitignore 파일에 파일을 추가해야 했습니다.

이것은 비어 있지 않은 디렉토리에 "복제"하는 쉬운 방법인 것 같습니다..git 및 .gitignore 파일을 풀로 생성하지 않으려면 풀 후 삭제하면 됩니다.

@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

이것을 사용하여 현재 디렉터리에 레포를 복제했습니다. 디렉터리는 비어 있지 않았습니다.깨끗한 생활은 아니지만 일회용 도커 용기에 담겨 있었습니다.

git clone https://github.com/myself/myRepo.git temp
cp -r temp/* .
rm -rf temp

여기, 제가 사용한cp -r대신에mv숨겨진 파일과 디렉터리를 복사하기 때문입니다.그런 다음 임시 디렉토리를 삭제합니다.rm -rf

@GoZoner의 답변 개선:

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

shopt 명령은 이 SO 응답에서 가져온 것이며 Bash에서 'mv' 명령의 동작을 .git 디렉터리와 다른 숨겨진 파일을 포함해야 하는 dot 파일을 포함하도록 변경합니다.

또한 이것은 현재 디렉터리(.)가 비어 있는 경우에만 현재 상태로 작동하도록 보장되지만 복제된 저장소의 파일 중 현재 디렉터리의 파일과 동일한 이름을 가진 파일이 없는 한 작동합니다.현재 디렉터리에 무엇이 있는지 상관하지 않으면 'mv' 명령에 -f(force) 옵션을 추가할 수 있습니다.

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

사용하다.아래와 같이 당신의 명령의 끝에.

git clone URL .

제가 발견한 것은 다음과 같습니다.

다음이 표시됩니다.

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

제가 검색한 내용 중에 우연히 발견한 것은 다음과 같습니다.

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

클린턴의 출품작을 찾습니다.홀... 만약 당신이 (나처럼) 이것을 시도한다면, 당신은 아마 그것을 얻을 것입니다.access denied응답, 저의 첫 번째 단서가 있었기 때문에 (저에게) 초기 오류는 사실 잘못된 근본 문제를 피하는 것이었습니다.

Windows에서 이를 위한 솔루션: 실행해야 합니다.cmd또는git elevated그런 다음 실행:

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

위의 사항은 저의 문제였고 단순히 상승시키는 것이 저에게 효과가 있었습니다.

그래서 루트 디렉터리에서 숨겨진 .git 폴더를 삭제한 다음 root/dist 폴더의 'git clone repo'에 마침표를 추가하여 동일한 오류를 해결했습니다.이것은 vue-cli 웹 팩 프로젝트의 맥락에서 볼 수 있습니다.따라서 다른 모든 사용자가 옳다고 하는 것은 일반적으로 복제하려는 폴더나 해당 폴더의 상위 폴더 또는 루트에 깃 추적이 있음을 의미합니다!

에 대한 Windows만 하는 입니다..git보이지 않는 폴더입니다.

제거 대상

rm -rf.*

당신을 곤경에 빠뜨리거나 더 많은 오류에 빠뜨릴 수 있습니다.

/path/to/folder가 있고 폴더가 아닌 내부의 모든 항목을 제거하려면 다음을 실행합니다.

rm -rf /path/to/folder/*

만들려면 프로젝트 디렉터리를 만들어야 합니다.mkdir filename그런 음다 합니다.git clone xxxxx을 리고그파이니다합동을일그로 이동합니다.

언급URL : https://stackoverflow.com/questions/9864728/how-to-get-git-to-clone-into-current-directory

반응형