힘내-push.default“matching”과“simple”의 차이점은 무엇입니까?


285

나는 잠시 동안 git을 사용 해 왔지만 새로운 원격 저장소를 직접 설정할 필요는 없었으며 그렇게하는 데 궁금했습니다. 저는 튜토리얼을 읽었으며 "git push"를 작동시키는 방법에 혼란을 느낍니다.

단순히 사용 git push하면 기본 분기 (?)를 표시하도록 요청합니까? 이 두 가지 옵션의 차이점은 무엇입니까?

git config --global push.default matching
git config --global push.default simple

일치하면 내 로컬 리포지토리에있는 모든 지점을 푸시하고 일치하지 않는 경우 수동으로 새 로컬 지점을 푸시하도록 지시해야합니까? 이 모범 사례를 사용하는 것이 가장 간단합니까?



1
이제 pull.default모든 지점을 로컬로 업데이트 할 수있는 경우
Nogurenn

답변:


367

git push 이 구성에 따라 모든 분기 또는 단일 분기를 푸시 할 수 있습니다.

모든 가지를 밀어

git config --global push.default matching

모든 분기를 원격 분기로 푸시하고 병합합니다. 모든 분기를 푸시하지 않으려면 현재 분기 만 푸시 할 수 있습니다.

현재 분기 만 푸시

git config --global push.default simple

내 의견으로는이 옵션을 사용하고 분기별로 코드 분기를 푸시하는 것이 좋습니다. 분기를 수동 및 개별적으로 푸시하는 것이 좋습니다.


16
push.default current@UpAndAdam의 답변을 좋아했습니다 . 그것에 대해 모른다.
alanjds

4
참고 simple더 이상 옵션입니다. 에서 1.7.8.4당신이 밀어하려고 할 때 (이전?) 그것은 오류가 발생합니다. 그러나 current여전히 이용 가능
sixty4bit 20:48에

@ sixty4bit : git 버전 1.7.1을 사용하고 있습니다. 내가 사용하고 있습니다 tracking> 상류 지점에 현재 분기를 밀어 -.
kevinarpe

@ sixty4bit 아니요, 이후 버전의 Git에 포함되어 있습니다 .2016 년에도 (1.7)은 지옥처럼 오래되었습니다. 그런 오래된 버전을 전혀 사용하지 않는 것이 좋습니다.
Schmoudi

공감. 죄송하지만 링크 된 페이지의 설명이 simple이해가되지 않고이 답변과 모순되며 정확하지 않으므로이 답변이 혼동됩니다. 링크 된 페이지에 simple"분기를 하나씩 푸시합니다. 대부분 현재 분기와 연결되어 있습니다." 그것은 가지가 병렬이 아니라 순차적으로 가지를 밀어 넣을 것이라는 의미입니까? "주로 연결된"이란 무엇입니까? 그런 다음에 대한 설명 simple은에 대한 설명을 인용합니다. 설명 matching은에 대한 설명 matching도 적용됨을 의미합니다 simple. 그러나 그것은 사실이 아닙니다.
tvanc

91

GIT 문서에서 : Git Docs

아래는 전체 정보를 제공합니다. 간단히 말해서 리모컨에서 동일한 이름을 가진 경우 simple에만를 누른다 current working branch. 이것은 초보자에게 매우 좋은 설정이며GIT 2.0

반면 모든matching 것을 밀어 것입니다 원격에서 동일한 이름을 가진 분기를 로컬로 . (현재 작업 지점에 관계없이). 즉, 공유하고 싶지 않은 지점을 포함하여 여러 가지 지점이 푸시 될 수 있습니다.

개인적으로 사용하는 경우 일반적으로 다른 옵션을 사용합니다. current이 옵션 은 항상 현재 작업 분기를 푸시합니다 (변경 사항이 있으면 항상 분기하기 때문). 그러나 초보자에게는 제안 할 것입니다simple

push.default
refspec이 명시 적으로 지정되지 않은 경우 git push가 수행 할 동작을 정의합니다. 특정 워크 플로에 다른 값이 적합합니다. 예를 들어 순전히 중앙 워크 플로 (예 : 가져 오기 소스가 푸시 대상과 동일)에서 업스트림이 원하는 것일 수 있습니다. 가능한 값은 다음과 같습니다.

아무것도-참조 사양이 명시 적으로 지정되어 있지 않으면 아무것도 밀어 넣지 마십시오 (오류). 이것은 항상 명시 적으로 표현함으로써 실수를 피하고자하는 사람들을위한 것입니다.

current-현재 분기를 눌러 수신 측에서 동일한 이름의 분기를 업데이트하십시오. 중앙 및 비 중앙 워크 플로 모두에서 작동합니다.

업스트림-현재 분기를 변경 사항이 현재 분기 (@ {upstream})에 통합 된 분기로 다시 푸시합니다. 이 모드는 일반적으로 가져 오는 것과 동일한 리포지토리 (예 : 중앙 워크 플로)로 푸시하는 경우에만 의미가 있습니다.

단순-중앙 집중식 워크 플로우에서 업스트림 지점의 이름이 로컬 이름과 다른 경우 푸시를 거부하는 안전성이 추가 된 업스트림과 같은 방식으로 작업하십시오.

일반적으로 당기는 리모컨과 다른 리모컨으로 밀 때 전류로 작동합니다. 가장 안전한 옵션이며 초보자에게 적합합니다.

이 모드는 Git 2.0에서 기본값이됩니다.

일치-같은 이름을 가진 모든 가지를 양쪽 끝에 밀어 넣으십시오. 이렇게하면 푸시 할 리포지토리가 푸시 될 분기 세트를 기억하게됩니다 (예 : 항상 메인과 마스터를 푸시하고 다른 브랜치가없는 경우 푸시하려는 리포지토리에는이 두 개의 브랜치와 로컬 메인 및 마스터가 있음) 거기에 푸시됩니다).

이 모드를 효과적으로 사용하려면 git push를 실행하기 전에 푸시하려는 모든 분기를 푸시 할 준비가되었는지 확인해야합니다.이 모드의 핵심은 모든 분기를 한 번에 푸시 할 수 있기 때문입니다. 일반적으로 한 지점에서만 작업을 완료하고 결과를 내보내는 반면 다른 지점은 완료되지 않은 경우이 모드는 적합하지 않습니다. 또한이 모드는 다른 사용자가 새 분기를 추가하거나 기존 분기의 끝을 제어 할 수 없으므로 공유 중앙 저장소로 푸시하는 데 적합하지 않습니다.

이것이 현재 기본값이지만 Git 2.0은 기본값을 simple로 변경합니다.


예, 그러나 push.default 설정을 사용하더라도 "$ git push origin master " 를 수행 하면 현재 분기가 동일한 이름을 가진 원점의 분기로만 푸시됩니다. 당신은 기본적으로 원격도 있다는 것을 언급해야한다
알렉산더 밀스

1
나는 당신이 무엇을 얻고 있는지 잘 모르겠습니다. 모든 모드 git push origin master에서 동일한 작업을 수행 한다고 말합니다 . 모드와 기본값의 요점은 일반적으로 단순히 말하고 git push원격 또는 지점에 알리지 않을 때 발생 하는 것입니다. 기본 설정은 무엇입니까? push.default의 기본 설정을 의미합니까? git 버전의 기본 설정 ... 그것을 얻지 못하면 귀하의 의견은 매우 모호합니다.
UpAndAdam

'push.default ref push가 명시 적으로 지정되지 않은 경우 git push가 수행해야 할 동작을 정의합니다.' refspec에 따라 당신은 ... 설정 git-scm.com/book/en/v2/Git-Internals-The-Refspec
UpAndAdam

2

Git v2.0 릴리즈 노트

이전 버전과의 호환성 정보

git push [$there]무엇을 푸시할지 말하지 않았을 때 , 우리는 지금까지 전통적인 "일치하는"시맨틱을 사용했습니다. Git 2.0에서 기본값은 이제 "단순한"의미론으로 다음과 같습니다.

  • 동일한 브랜치로 현재 브랜치에 대한 현재 브랜치 만 가져오고 현재 브랜치가 해당 원격 브랜치와 통합되도록 설정된 경우에만 가져옵니다. 또는

  • 일반적으로 가져 오는 곳이 아닌 원격으로 푸시하는 경우 동일한 이름의 지점으로 현재 지점 만.

구성 변수 "push.default"를 사용하여이를 변경할 수 있습니다. 예를 들어 "일치하는"의미를 계속 사용하려는 구식 타이머 인 경우 변수를 "일치하는"으로 설정할 수 있습니다. 다른 가능성에 대해서는 설명서를 읽으십시오.

git add -ugit add -A명령 줄에 추가 할 경로를 지정하지 않고 하위 디렉토리 내에서 실행, 그들은 일관성에 대한 전체 트리에서 작동 git commit -a(이 명령은 현재 디렉토리에서만 작동하는 데 사용) 및 다른 명령. 작업을 현재 디렉토리로 제한하려는 경우 git add -u .또는 말하십시오 git add -A ..

git add <path>는 현재와 동일 git add -A <path>하므로 git add dir/디렉토리에서 제거한 경로를 확인하고 제거를 기록합니다. 구 버전의 Git에서는 git add <path>제거를 무시하는 데 사용됩니다. 원하는 git add --ignore-removal <path>경우에 추가 또는 수정 된 경로 만 추가하도록 말할 수 있습니다 <path>.

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