program story

git 명령에서 'origin'과 'remote'의 차이점은 무엇입니까?

inputbox 2020. 11. 28. 09:15
반응형

git 명령에서 'origin'과 'remote'의 차이점은 무엇입니까?


이 질문에 이미 답변이 있습니다.

자식 용어에서,있다 originremote같은 일이? 아니면 origin로컬 디렉토리를 참조합니까?

다음의 경우 git push -u origin master: 다음 중 올바른 해석은?

  1. "모든 업스트림을 'origin'이라는 원격 저장소와 분기 'master'로 푸시합니다."
  2. " 'origin'이라는 로컬 발신 저장소에서 업스트림 '마스터'브랜치로 모든 것을 푸시합니다."

설명에 감사드립니다!

내 질문에 대한 답변으로 두 가지 문제가 명확 해졌습니다.

  1. origin원격 저장소의 로컬 복제 사본이 아닌 원격 저장소를 참조합니다. origin의 별칭이고 remote해당 시점에 생성 된 것을 읽을 때 이것은 명확하지 않습니다.git clone
  2. origin리포지토리의 git push -u origin master로컬 복사본이 암시되고 "드물게 참조"되기 때문에 의 원격 리포지토리를 나타냅니다 .

git lingo origin에서 리포지토리가 원래 복제 된 원격지의 기본 이름입니다. 똑같이 source또는 remote1또는 단지 remote.

git클라이언트 / 서버, 마스터 / 슬레이브, 상위 / 하위 관계에 대한 개념이 내장 된 것이 아니라 피어 투 피어 분산 시스템 이라는 것을 기억하십시오 (특정 시나리오에서 사용자가이를 부과 할 수 있음). .

모든 리모컨은 동일합니다. origin단순히 (그리고 문자 그대로) 동등한 것 중 첫 번째입니다 (복제 된 저장소의 경우). :)

그리고 Jan이 주석에서 지적했듯이 각 리모컨과 관련된 이름은 사용자의 편의를위한 것입니다. 이것이 origin실제로 효과가 없다고 생각 되면 변경할 수 있습니다.

push에 대한 해석에 관해서는 첫 번째가 가장 정확하지만 push 명령은 로컬 master분기를 master(로컬로 구성된) 이름으로 식별되는 원격 분기로 푸시합니다 origin.

master원격지에 분기 가 없으면 하나가 생성됩니다.

push 명령과 플래그, 옵션 등에 대한 자세한 내용은 물론 문서에 있습니다.

작업이 리포지토리의 컨텍스트에서 수행되므로 '로컬'리포지토리를 명시 적으로 참조하는 경우는 거의 없습니다.


아니요, 같은 의미가 아닙니다.

remote, in git-speak는 GitHub 또는 다른 git서버 와 같은 원격 저장소를 나타냅니다 .

origin규칙에 따라 git. 당신이 할 때 git clone <url>, <url>자동으로 이름으로 로컬 저장소에 추가됩니다 origin. 물론을 사용하여 다른 이름으로 다른 리모컨을 추가 할 수 있습니다 git remote add.

그렇게 할 때 git push -u origin master의미하는 바는 "내 로컬 마스터의 모든 것을 이름이 지정된 원격으로 푸시 origin"하는 것입니다. 이 명령의 구조는 물론,보다 일반적인 - 더 일반적인 형태는 git push -u <remote> <branch>이름 분기 밀어 것이다, branch원격 이미 (그것을이없는 경우 맨 마지막에 그것을 만들기, 원격 지정에을의 어떤 그 -u플래그 않습니다).

추가 부록 git push으로 기본적으로는 현재 분기를 origin에 해당하는로 푸시합니다 git push origin <current-branch>.


기본 "origin"과 같이 각각 다른 이름을 가진 여러 개의 리모컨을 가질 수 있습니다.

귀하의 질문은 현재 마스터 브랜치가 체크 아웃되었다고 가정합니다.

git push -u origin master

master라는 로컬 분기를 master라는 분기로 원격 "원본"에 푸시합니다. -u 플래그는 로컬 브랜치의 업스트림으로 원격 브랜치를 추적하도록 로컬 git에 지시합니다.


리모컨은 단지 단어입니다 이름이 다른 힘내 저장소 어딘가를 식별하는 데 사용할 수 있습니다.

문자열 origingit clone다른 ( "origin"-al) Git 저장소에서 복제 할 때 자동으로 입력 되는 (단일) 원격의 기본 이름입니다 . 다른 이름을 선택하거나 리모컨을 더 추가 할 수 있습니다. 각 원격에는 적어도 다른 저장소가있는 URL이 있습니다.

의 경우 git push세 번째 단어 — 여러 플래그를 추가하는 경우 필요한 경우이 숫자를 조정합니다. 이 경우 추가 -u했으므로 이제 네 번째 단어가됩니다. 일반적으로 일부 리모컨의 이름입니다.

나머지 단어는 모두 refspec 으로 요약 할 수 있습니다 (100 % 정확하지는 않지만 실제로 계산 방법에 따라 정확히 50 % 미만) . 콜론으로 구분 된 한 쌍의 분기 이름 으로 요약 할 수 있습니다 .

와 같이 브랜치 이름을 하나만 쓰는 경우 masterGit은 "업스트림이 설정되어 있으면 (일부) 사용하고, 그렇지 않으면 콜론 뒤에 같은 이름을 사용"을 의미합니다. 일반적으로 업스트림은 설정된 경우 동일한 기본 이름을 가지므로 master일반적으로 의미가 master:master있습니다. 힘내에있는 원격의 URL-커밋에서 그들을-힘내를 전송 하여 지사 (왼쪽 이름)를 입력 한 다음 설정을 요청 자신의 당신은 단지 해당 분기 추진 커밋 같은 팁 지사 (오른쪽에있는 이름) .

refspec을 입력하지 않으면 Git의 기본값은 Git 버전에 따라 다릅니다. Git 버전 2.0부터 기본값은 현재 분기 를 원격에서 동일한 이름의 분기푸시하는 것 입니다.

-u플래그는 git push푸시가 성공 하면 방금 푸시 한 브랜치의 업스트림을 설정 해야 함을 알려줍니다 .

분기 업스트림 은 원격의 이름과 해당 원격의 분기 이름의 두 부분으로 나뉩니다. git push두 항목 모두 제공 했으므로 (리모컨의 이름은 origin이고 브랜치는 master에서 암시 된 master:master것에서 두 번째 (포스트 콜론) master였으므로 성공하면에 대한 업스트림을 master설정합니다 origin/master.

( 편집 : 합법적 /으로의 업스트림 설정 에서이 (가) 어디에서 왔는지 궁금 할 수 있습니다 origin/master. 부분적으로 역사적인 유물입니다. 불행히도 엄청난 혼란을 초래합니다. 지금은 원격 , 분기원격 -트래킹 브랜치 는 Git에서 모두 다른 것입니다. 그것들은 모두 다양한 방식으로 관련되어 있습니다. 그러나 그것들이 동일하지 않고 용어가 매우 특정한 의미를 가지고 있다는 것을 기억하는 것이 중요합니다. 단어 트랙 도 과부하입니다. 새로운 용어 upstream 더 좋지만 모든 설명에서 사용하는 것은 아닙니다.)


아니요, remote의 상위 구조입니다 origin. remote저장소를 복제 할 때 생성 되는 Git 의 기본 이름입니다 .

이 질문에 대한 추가 정보 : Git에서 "원래"는 무엇입니까?

참고 URL : https://stackoverflow.com/questions/38837705/what-is-the-difference-between-origin-and-remote-in-git-commands

반응형