git에서 pull과 clone의 차이점은 무엇입니까?


237

(after mkdir repocd repo) 의 차이점은 무엇입니까?

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

git clone git://github.com/cmcculloh/repo.git

내 말은, 분명히 하나는 짧지 만 그 외에는 기본적으로 같은 일을하고 있습니까?

답변:


122

클론은 마스터뿐만 아니라 추가 원격 추적 분기를 설정한다는 점을 제외하고는 기본적으로 동일합니다. 매뉴얼 페이지를 확인 하십시오 .

저장소를 새로 작성된 디렉토리로 복제하고 복제 된 저장소의 각 분기에 대한 원격 추적 분기 (git branch -r을 사용하여 표시)를 작성하고 복제 된 저장소의 현재 활성 분기에서 분기 된 초기 분기를 작성하고 체크 아웃합니다.


10
git fetch --all은 추가 원격 추적 분기를 설정하므로 기본적으로 동일합니다.
cmcculloh

251

git clone작업 할 기존 저장소의 로컬 사본을 얻는 방법입니다. 여러 개의 작업 사본을 갖고 싶지 않은 경우 일반적으로 주어진 저장소에 대해 한 번만 사용됩니다. (또는 로컬 사본을 엉망으로 만든 후 깨끗한 사본을 얻으려고합니다 ...)

git pull(또는 git fetch+ git merge)는 원격 저장소에서 새로운 커밋으로 해당 로컬 복사본 을 업데이트 하는 방법 입니다. 다른 사람과 공동 작업하는 경우 자주 실행하는 명령입니다.

첫 번째 예제에서 알 수 있듯이 git clone다른 git 명령을 사용 하여 에뮬레이션 할 수는 있지만 실제로 git pull"기본적으로 동일한 작업"을 수행 하는 경우는 아닙니다 git clone.


4
"git pull"과 관련된 명령 시퀀스에 의해 달성되지 않은 git clone이 구체적으로 무엇입니까?
cmcculloh

21
@cmcculloh : 없음-설명하는 시퀀스는 "git clone"이하는 일을 효과적으로 수행합니다. 요점은 "git pull"은 당신이 한 것 이상의 다양한 일을하는 데 사용된다는 것입니다. "git pull"은 실제로 "git fetch; git merge <current branch> <origin / 현재 지점> ". IOW, 당신은 복제하지 않고 살 수 그리고 당신이 정말로 원한다면 당깁니다. 또한 복제 한 저장소 이외의 저장소에서 가져올 수 있습니다. 나는 '복제'를 "나를 해당 리포지토리의 로컬 복사본으로 만들기"로 생각하고 "풀 (pull)"을 "지정된 원격 장치에서 업데이트를 받도록합니다"라고 생각하고 싶습니다.
ebneter

120

평신도 언어로 말할 수 있습니다.

  • 복제 : 원격 저장소의 작업 사본을 가져옵니다.
  • :이 작업을하고 있습니다. 다른 사람들이 업데이트 할 수있는 새로운 변경 사항을 알려주십시오.

3
내가 생각하는 당신의 정의도라고 할 수있는 복제
henrywright

10
복제하지 않은 작업을 어떻게 수행 할 수 있습니까?
Jyoti Prakash

무슨 말인지 모르겠어요?
henrywright

@henrywright 희망, ebneter의 답변이 귀하의 질문을 해결할 것입니다
Mrk

41

git clone 시스템에 저장소의 사본을 작성한다는 의미입니다.

git fork 리포지토리를 Github 계정에 복사한다는 의미입니다.

git pull 마지막으로 수정 한 저장소를 가져오고 있음을 의미합니다.

git push 리포지토리를 수정 한 후 반환한다는 의미입니다.

평신도의 용어로 :

git clone다운로드 git pull중이며 새로 고침 중입니다.


9

clone : 원격 서버 저장소를 로컬 머신에 복사합니다.

끌어 오기 : 다른 변경 사항이 로컬 컴퓨터에 추가되었습니다.

이것이 차이점입니다.

복제는 일반적으로 원격 저장소 사본을 얻는 데 사용됩니다.

풀은 팀에서 작업하는 경우 다른 팀 동료 추가 코드를 보는 데 사용됩니다.


5

git clone 은 현재 원격 서버 저장소에서 작동하는 것을 정확하게 다운로드하여 프로젝트가있는 컴퓨터의 폴더에 저장하는 데 사용됩니다. 주로 프로젝트를 처음 업로드 할 때만 사용됩니다. 그 후 당기는 것이 더 나은 옵션입니다.

git pull 은 기본적으로 (복제 (다운로드) + 병합) 작업이며 팀워크로 작업 할 때 주로 사용됩니다. 즉, 해당 프로젝트의 최근 변경 사항을 원할 때 당길 수 있습니다.


3

미스 클론 : 지역에 새로운 사본을받습니다.

Mr Pull : 이미 로컬에 설치했으며 업데이트 만합니다.


미스 클론 : 당신이하는 일을 할 수 있습니다! 당신은 내 하위 집합입니다.

미스터 풀 : 디토!


미스 클론 : 아니요, 생성하지 않습니다. 이것이 제가하는 것입니다:

  1. 비어있는 빈 저장소 작성
  2. 원격 추적 지점 채우기
  3. 인수없이 git fetch를 실행하십시오.

당신은 # 3 만하고 병합 할 필요가 없습니다 (광산은 신선합니다).

Mr Pull : Smarty 바지, 별거 아니에요, 먼저 "git init"을하겠습니다! 그런 다음 우리는 동일합니다. 또한 기존 리포지토리에 추가 '병합'기능이 있습니다! Git에서 가장 많이 사용되는 명령은 무엇입니까?)


Git creators : --Bare 또는 --mirror를 clone 또는 init과 함께 사용하는 경우 말 풀을 잡으십시오. 병합이 발생하지 않습니다. 읽기 전용으로 남아 있습니다.


과소 평가.
sinekonata

2

흠, 복제 할 때와 같이 당기면 원격 분기 "4.2"가 보이지 않는 것은 무엇입니까? 분명히 동일하지 않습니다.

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

vs

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

나는 이것을 또한 통지했고, 시간이 지남에 따라 자식 기본값의 변화가 문제라고 생각합니다. Windows에는 1.9.5.msysgit이 있고 Mac에는 2.3.2-applegit-55가 있습니다.
AnneTheAgile

2

git clone URL ---> 완전한 프로젝트 또는 저장소가 별도의 디렉토리로 다운로드됩니다. git pull URL 변경 ---> fetch + merge-> 전체 프로젝트가 아닌 변경 사항 만 가져옵니다.


1

git fetch명령은 아직 서버에없는 모든 변경 사항을 가져 오지만 작업 디렉토리는 전혀 수정하지 않습니다. 단순히 데이터를 가져 와서 직접 병합 할 수 있습니다. 그러나 대부분의 경우 git pull기본적으로 git fetch바로 뒤에 나오는 명령 이 git merge있습니다.

더 읽기 : https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling


1
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
ekad

0

복제 -: 로컬 시스템에서 원격 저장소 프로젝트의 사본을 정확하게 복제합니다.

-: 두 사람 이상이 동일한 저장소를 공유한다고 가정하십시오. (다른 사람 이름을 Syam이라고 지정하십시오. (리포지토리는 프로젝트가 Github에 존재하는 장소입니다.) Syam가 로컬에서 동일한 프로젝트에서 일부 변경을 수행하고 원격 저장소로 푸시하면 Syam가 변경 한 내용이 무엇이든 귀하의 지역에 반영하지 마십시오. 따라서 로컬에서 이러한 새로운 변경 사항을 반영하려면 git pull을 사용해야합니다. 전반적으로 우리는 git pull을 사용하여 프로젝트를 업데이트합니다.

따라서 기본적으로 git clone을 한 번만 사용하지만 git pull을 여러 번 사용합니다.

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