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.