Git 저장소를 특정 폴더에 어떻게 복제합니까?


2244

명령을 실행하면 git clone git@github.com:whatever이라는 현재 폴더에 디렉토리가 생성 whatever되고 Git 저장소의 컨텐츠가 해당 폴더에 놓입니다.

/httpdocs/whatever/public

내 문제는 웹 서버의 올바른 위치에 표시되도록 Git 저장소의 내용을 현재 디렉토리에 복제해야한다는 것입니다.

/httpdocs/public

리포지토리를 복제 한 후 파일을 이동하는 방법을 알고 있지만 Git을 중단하는 것처럼 보이며을 호출하여 업데이트 할 수 있기를 바랍니다 git pull. 어떻게해야합니까?


3
Windows에서는 리포지토리를 복제 할 폴더에서 파일을 이동할 수 있으므로 git clone 할 때 비어 있습니다 . 복제 후 파일을 뒤로 이동 [ctrl-z] 및 whoala ! 현재 폴더가 비어 있으면 git clone giturl을

43
voila 는 철자입니다
— Matthias

80
@MatthiasDailey 자보세요 는 IS 실제 철자
— silkfire

6
et voilà 는 프랑스어입니다 et
— voilà

답변:


3220

옵션 A :

git clone git@github.com:whatever folder-name

Ergo, right here사용 :

git clone git@github.com:whatever .

옵션 B :

.git폴더도 이동하십시오 . 있습니다 .git폴더가 너무 숨겨진 파일을 표시해야합니다, 대부분의 그래픽 파일 탐험가에 숨겨져 있습니다.

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

첫 번째 줄은 모든 일반 파일을 가져오고 두 번째 줄은 도트 파일을 가져옵니다. dotglob (즉 shopt -s dotglob) 를 활성화하여 한 줄로 수행하는 것이 가능 하지만이 답변이 대답하는 질문을하는 경우 나쁜 해결책 일 수 있습니다.

더 나은 아직 :

작업 사본을 다른 곳에 보관하고 기호 링크를 작성하십시오. 이처럼 :

ln -s /where/it/is/right/now /the/path/I/want/to/use

당신의 경우 이것은 다음과 같습니다.

ln -sfn /opt/projectA/prod/public /httpdocs/public

원하는 경우 테스트로 쉽게 변경할 수 있습니다.

ln -sfn /opt/projectA/test/public /httpdocs/public

파일을 옮기지 않고. 누군가이 -fn행을 복사하는 경우에 추가 됩니다 ( -f강제이므로 -n이미 존재하거나 존재하지 않는 링크와 원치 않는 상호 작용을 피하십시오).

작동하려면 옵션 A를 사용하고 다른 사람이 수행 한 작업을 보려는 경우 옵션 C를 사용하십시오.


8
나는 당신의 '아직 더 나은'옵션을 생각하지 않았으며, 왜 그런지 잘 모르겠지만 좋아합니다. 이것의 장점은 무엇입니까?
— David Smith

6
아마도 현재로서는 이점이 없지만 언젠가 물건을 옮기기로 결정하면 많은 문제를 해결할 수 있습니다.
— Can Berk Güder 2014 년

12
또한 "Better yet"옵션을 사용하여 릴리스 간을 신속하게 전환 할 수 있습니다. 이것은 특히 유용하며 서버에 사용됩니다.
— Halil Özgür

4
@MEM 나는 그가 .git에 대한 심볼릭 링크를 만드는 것을 의미한다고 생각한다.ln -s path/to/.git path/to/working/directory
— Alexander

27
누구든지 이것의 장점을 설명 할 수 있습니까 ?? 나는 오늘 조금 조밀하다. symlink를 사용하면 서버에 어떤 이점이 있습니까?
— Triple

586

많은 사람들이이 질문을하고 있다고 생각하는 예는 다음과 같습니다. 당신이 경우 에 디렉토리 당신은 자식 저장소의 내용, 실행 덤프합니다 :

git clone git@github.com:whatever .

"." 끝에는 현재 폴더를 체크 아웃 폴더로 지정합니다.


28
true이므로 복제하기 전에이 폴더에서 "git init"를 실행하고 싶지 않습니다. 그러나 그렇게 한 경우 복제하기 전에 .git 폴더를 제거하면 트릭이 수행됩니다.
— Magne

3
내 대답에 빈 디렉토리에 대한 고정
— csomakk

1
nitrous.io 에서이 작업을 수행 할 수 없었습니까? 비운 후에도 디렉토리가 비어 있지 않다는 메시지가 표시됩니다
— Tejas Manohar

@TejasManohar 숨겨진 파일도 삭제했는지 확인하십시오.
— Britic

ls -a숨겨진 파일을 포함하여 모든 파일을 표시합니다.
— Michael Dorst

215

폴더로 이동하십시오. 폴더가 비어 있으면 다음을 수행하십시오.

git clone git@github.com:whatever .

그밖에

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

9
실제로 이것은 이미 작성된 프로젝트를 새로 작성된 저장소로 푸시해야 할 때 가장 유용한 대답이었습니다. 명성!
— wirher

13
비어 있지 않은 폴더에 체크 아웃하는 방법을 지정하는 답변 만 감사합니다.
— Preston Badeer

2
switch -ton이 git checkout 문서에 명확하게 표시되어 있지 않기 때문에 이것은 정말 유용합니다 .
— Chetabahana

4
-t 스위치는 무엇을합니까? 체크 아웃으로 덮어 쓰지 않은 추적되지 않은 파일 목록이있는 중단 메시지가 표시됩니까? 이 상황에서 어떻게해야합니까? 해당 파일을 덮어 쓰고 싶지 않습니까?
— Momin Zahid

2
git의 -t 문서 : -t, --track 새 분기를 만들 때 "업스트림"구성을 설정하십시오. 자세한 내용은 git-branch (1)의 "--track"을 참조하십시오.
— csomakk

87

기본 Git 리포지토리 복제

당신은 저장소를 복제

git clone [url]

예를 들어, open_framework라는 Stanford University Drupal Open Framework Git 라이브러리를 복제하려면 다음과 같이하십시오.

$ git clone git://github.com/SU-SWS/open_framework.git

그러면 open_framework (현재 로컬 파일 시스템 위치에)라는 디렉토리가 생성되고 그 안에 .git 디렉토리가 초기화되고 해당 저장소의 모든 데이터가 풀다운되고 최신 버전의 작업 사본이 체크 아웃됩니다. 새로 만든 open_framework 디렉토리로 이동하면 작업 또는 사용 준비가 된 프로젝트 파일이 표시됩니다.

특정 로컬 폴더에 리포지토리 복제

open_framework 이외의 다른 디렉토리로 저장소를 복제하려는 경우 다음 명령 행 옵션으로 지정할 수 있습니다.

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

이 명령은 이전 명령과 동일하지만 대상 디렉토리를 mynewtheme이라고합니다.

Git에는 사용할 수있는 다양한 전송 프로토콜이 있습니다. 이전 예제는 git : // 프로토콜을 사용하지만 SSH 전송 프로토콜을 사용하는 http (s) : // 또는 user @ server : /path.git도 볼 수 있습니다.


현재 폴더에 자동으로 폴더가 생성되고 파일이 저장됩니다. 따라서 다른 폴더 덮어 쓰기에 대해 걱정할 필요가 없습니다.
— arn-arn

24

git 저장소를 특정 폴더에 복제하려면 다음 -C <path>과 같은 매개 변수 를 사용할 수 있습니다

git -C /httpdocs clone git@github.com:whatever

여전히 whatever폴더 위에 폴더를 만들지 만 리포지토리의 내용을 현재 디렉토리로 복제하려면 다음 구문을 사용하십시오.

cd /httpdocs
git clone git@github.com:whatever .

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

공개적으로 액세스 할 수있는 폴더로 복제하고 있으므로 웹 서버 구성 (예 : 파일) 에서 폴더를 사용 --separate-git-dir=<git dir>하거나 제외 하여 작업 트리에서 Git 저장소를 분리하는 것이 좋습니다..git.htaccess


17

작업 디렉토리 를 제시하기 위해 복제하려면 :

git clone https://github.com/link.git

에 복제하는 또 다른 디렉토리 :

git clone https://github.com/link.git ./Folder1/Folder2

그것이 도움이되기를 바랍니다 :)


이것은 나에게도 효과가있었습니다. ./폴더 경로 시작 부분이 아님
— Alon Gouldman

13

파일을 원하는 곳으로 옮길 때 .git디렉토리 도 옮기고 있습니까? OS 및 구성에 따라이 디렉토리가 숨겨져있을 수 있습니다.

/public디렉토리 에있는 프로젝트 파일 은 현재 체크 아웃 커밋 (기본적으로 마스터 브랜치)의 버전 일 뿐이며 저장소와 지원 파일이 포함되어 있습니다 .


13

클론 :

git clone git@jittre.unfuddle.com:jittre/name.git

"특정 지점"을 복제하십시오.

git clone -b [branch-name] git@jittre.unfuddle.com:jittre/name.git

13

현재 폴더로 복제하려면 다음을 시도하십시오.

git clone https://github.com/example/example.git ./

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

11

용법

git clone <repository>

<repository>에있는 저장소를 로컬 시스템으로 복제하십시오. 원래 저장소는 로컬 파일 시스템 또는 HTTP 또는 SSH를 통해 액세스 할 수있는 원격 시스템에있을 수 있습니다.

git clone <repo> <directory>

<repository>에있는 저장소를 로컬 시스템의 <directory> 폴더에 복제하십시오.

출처 : 저장소 설정


9

현재 디렉토리로 항목을 체크 아웃하려는 경우 .git 저장소를 제거하십시오.

rm -rf .git 그때 git clone https://github.com/symfony/symfony-sandbox.git


3

여기 내가 어떻게 할 것이지만, 나를 위해 별명을 만들었습니다.

$ cd ~Downloads/git; git clone https:git.foo/poo.git

아마도이 작업을보다 우아한 방법으로 할 수는 있지만 이것이 가장 쉬운 방법이라는 것을 알았습니다.

여기에 속도를 높이기 위해 만든 별칭이 있습니다. zsh 용으로 만들었지 만 bash 또는 fish, xyzsh, fizsh 등과 같은 다른 쉘에서는 제대로 작동합니다.

편집 ~/.zshrc, /.bashrc등 좋아하는 편집기 (I 쓰는 것, 그래서 광산, Leafpad입니다 $ leafpad ~/.zshrc).

그러나 개인적으로 선호하는 것은 zsh 플러그인을 만들어 모든 별칭을 추적하는 것입니다. 다음 명령을 실행하여 oh-my-zsh 용 개인 플러그인을 작성할 수 있습니다.

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

그런 다음 새로 작성된 빈 alises.plugin 파일에 다음 행을 추가하십시오.

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(여기에서 이름을 내 것으로 바꾸십시오.)

그런 다음 별명을 작동 시키려면 별명 (zsh와 함께)을 소스로 제공해야합니다. 이렇게하려면 사용자 정의 플러그인 문서 안에 다음을 추가하십시오.

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

oh-my-zsh 플러그인을 저장하고를 실행하십시오 allsource. 그래도 작동하지 않으면 간단하게 실행하십시오 source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. 플러그인 소스를로드하여 allsource지금 부터 사용할 수 있습니다 .


모든 별칭으로 Git 리포지토리를 만드는 중입니다. Ev 's dot-files에서 자유롭게 확인하십시오 . 귀하의 필요에 맞게 포크로 자유롭게 개선하십시오.


2

당신이 사용하는 경우 ssh에 대한 git cloning다음과 같은 명령을 사용할 수 있습니다.

git -C path clone git@github.com:path_to_repo.git

예를 들면 : git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.git의 자식 저장소를 당길 것이다 requests당신에 대한 /home/ubuntu/경로.


2

어떤 이유로 든이 구문이 두드러지지 않습니다.

git clone repo-url [folder]

여기서 folder는 로컬 폴더 (로컬 리포지토리)에 대한 선택적 경로입니다.

Git clone은 또한 pull원격 저장소에서 로컬 저장소로 코딩합니다. 실제로 그것은 사실이다 :

git clone repo-url  =  git init + git remote add origin repo-url + git pull

0

위의 모든 답변이 훌륭하지만 공개 html 디렉토리의 기호 링크 방법을 허용되는 답변에서 BEST로 제안 된 대신 새로운 방법을 제안하고 싶습니다. 서버 가상 호스트 구성에 액세스 할 수 있어야합니다.

리포지토리 디렉토리를 직접 가리키는 웹 서버의 가상 호스트 구성에 관한 것입니다. Apache에서는 다음과 같이 할 수 있습니다.

DocumentRoot / var / www / html / website / your-git-repo

다음은 가상 호스트 파일의 예입니다.

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>

0

다음 git 명령을 사용하여 사용자 정의 디렉토리 이름으로 복제 할 수 있습니다

git clone <git_repo_url> <your_custom_directory_name>

참고 : custome 디렉토리 는 자동으로 작성되므로 사용자 정의 디렉토리 를 작성할 필요가 없습니다.


-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .

-5

원래 게시물 의이 줄에 관해서 :

"리포지토리를 복제 한 후 파일을 이동하는 방법을 알고 있지만, 이건 git을 깨는 것 같습니다."

나는 그것을 할 수 있고 지금까지 내 add, commit, push, pull 작업과 관련된 문제를 보지 못했습니다.

이 접근법은 위에서 언급되었지만 단계로 나뉘 지 않았습니다. 나를 위해 작동하는 단계는 다음과 같습니다.

  1. 저장소를 새로운 임시 폴더에 복제하십시오.
  2. 로컬로 방금 복제 한 루트 폴더로 cd
  3. /.git 디렉토리를 포함하여 폴더의 전체 내용을 원하는 기존 폴더에 복사하십시오. (예를 들어, 리포지토리와 병합하려는 일식 프로젝트)

파일을 방금 복사 한 기존 폴더가 이제 git와 상호 작용할 준비가되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.