모든 저장소에 대해 Git pull에서 기본적으로 rebase를 사용하는 방법은 무엇입니까?


186

git pull(로컬) 클론 --rebase에서 기본적으로 사용 하도록 호스트 Git 리포지토리를 설정하는 방법이 있습니까? Stack Overflow를 검색하여에 대해 배웠지 branch.autosetuprebase만 클론별로 개별적으로 구성해야합니다.

내 프로젝트의 흐름 등 우리가 설정되어 전에 분기를 여기에 기능 분기를 보내고. 이것은 거의 항상을 사용 하므로 이것이 기본값이 될 수 있는지 알아 내려고합니다.pulldevelopmergepull--rebase


6
왜 그걸 원해? 나는 '는 적극적 경우 (그들이 만들어 지거나 상류에서 기대하는 변화의 크기에 따라) 더 적합 할 것이다 생각하는 사용자를 가르치는 것이 더 합리적이라고 생각
조나스 Schafer 씨에게

4
@JonasWielicki 예, 동의합니다. 내 팀원 중 일부는 Git을 처음 사용하는 것이므로 초기 단계에서 문제를 피하기 위해 그것을 배우는 방법이 있는지 알고 싶습니다. 팀은 다른 시간대에서 원격으로 작업하기 때문에 문제가 발생하면 몇 시간 동안 고착 될 수 있습니다. 이것이 가능한지 궁금합니다.
Masked Man

1
특히 초기 설정의 경우 병합을 사용하는 것이 좋습니다. 코드가 실제로 다른 경우 Rebase는 훨씬 더 이상한 일을합니다. 밀 때까지 계속해서 같은 갈등을 해결해야합니다. 따라서 팀원이 일부 코드 작업을 원하고 항상 리베이스를 사용하고 완료 될 때까지 밀어 넣지 않으면 (새로운 이민자가 스스로 분기하지 않고 할 수 있음) 이미 X 번 해결 한 것과 동일한 충돌에 직면하게됩니다 .
Jonas Schäfer

3
@JonasWielicki 팀 구성원은 어떻게 그들이 작업을 각각의 새로운 기능에 대한 새로운 지점을 (이, 그들은 이미 꽤 잘 이해). 재개발의 필요성은 다른 개발자들이 자신의 변경 사항을 추진할 준비가 될 때까지 "원격"개발 지점에 전념했기 때문입니다. 따라서 변경 사항을 적용하기 전에 원격에서 풀 리베이스를 수행하고 싶습니다. 프로젝트 자체는 매우 성숙하고 팀만이 새롭습니다. :) 따라서 사람들의 관점에서만 "초기 설정"입니다. 이 시나리오에 대한 조언은 무엇입니까?
Masked Man

5
대부분의 경우 (거의 모든 경우) 첫 번째 의견에 답하면 rebase가 올바른 선택입니다. 새로운 기능 등을 철저히 테스트하는 데 많은 시간이 걸리기 때문입니다. 완료 될 때까지는 가장 확실하게 다른 개발자의 많은 커밋.
Masked Man

답변:


205

기본 풀 동작에 대한 3 가지 구성 레벨이 있습니다. 가장 일반적인 것부터 가장 세밀한 것까지 :

1. pull.rebase

이 설정 은 항상 명시 적으로로 설정 되지 않는 한 항상 동등 true함 을 의미합니다 . 리포지토리마다 또는 전체적으로 설정할 수도 있습니다.git pullgit pull --rebasebranch.<branchname>.rebasefalse

2. branch.autosetuprebase

이를 설정하면 always추적 분기가 작성 될 때마다 아래와 같은 구성 항목이 작성됩니다. 미세한 그레인 제어를 위해,이 또한 설정할 수 있습니다 never, local또는 remote및 저장소 당 또는 전 세계적으로 설정할 수 있습니다. 자세한 내용 git config --help은 참조 하십시오.

삼. branch.<branchname>.rebase

이를 설정하면 명시 적으로 사용 true하지 않는 한 특정 분기가 항상 리베이스를 통해 업스트림에서 가져옵니다 git pull --no-rebase.

결론

따라서 향후 리포지토리의 모든 복제본에 대한 기본 동작을 변경할 수 없지만을 통해 현재 사용자 (기존 및 미래)의 모든 리포지토리에 대한 기본값을 변경할 수 있습니다 git config --global pull.rebase true.


4
답변 주셔서 감사합니다. 리포지토리를 복제하는 모든 사람이 기본적으로 사용하도록 설정을 할 수 있는지 탐색 중이었습니다. 위의 설정은에 저장됩니다 ~/.gitconfig. 즉, 호스트 저장소를 복제하는 각 개발자는 명령을 실행해야합니다. 솔루션에 대해 불평하지 않습니다. 좋은 점입니다. 당신의 요점을 올바르게 이해했음을 확인하고 싶습니다.
Masked Man

답변 해주셔서 감사합니다. 실제로 이것이 가능한 한 가깝게 보입니다.
Masked Man

139

어때요?

git config --global pull.rebase true

이것은 git에게 항상 rebase를 사용하도록 지시합니다.


3
감사합니다. 기존 추적 지점에 적합합니다.
Fls'Zen

1
제거하십시오 --bool, 그것은 불필요합니다
diralik

38

내 대답은 아니오 야.

원격 저장소를 설정하는 방법은 없습니다.이를 복제하는 모든 사람이 기본 동작을 갖도록합니다. git pull 변경 .

그러나 아무도 병합 커밋을 푸시하지 않는지 확인하는 서버 측 후크를 설정할 수 있습니다 ( 이와 같은 것) 아마도 것).

관심있는 구성 옵션도 있습니다. 원격 저장소에서 복제하는 모든 개발자는 직접 구성해야합니다.

1. 옵션 branch.<name>.rebase

다음 --rebase과 같이 항상 <name>분기 이름으로 대체 하여 로컬 분기를 사용하도록 구성 할 수 있습니다 .

git config branch.<name>.rebase true

이에 실행 한 후 mastermaster섹션 .git/config이 모습을 :

[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

2. 옵션 branch.autosetuprebase

모든 Git 브랜치에 대해 이전 구성 명령을 실행하면 번거로울 수 있으므로 모든 새 브랜치에 대해 자동으로 설정하도록 Git을 구성 할 수 있습니다.

git config branch.autosetuprebase always

(당신은 또한 지정할 수 있습니다 never, remotelocal참조man git-config 자세한 내용은.)

--global옵션이 없으면 구성이에 저장되고 .git/config현재 저장소 만 영향을받습니다. 을 사용 --global하면 구성이~/.gitconfig 구성되지 않은 모든 리포지토리가 영향을받습니다.

이 옵션은 기존 분기에 영향을 미치지 않습니다.

3. 옵션 pull.rebase

git config --bool pull.rebase true

(당신은 또한 그것을 줄 수 있습니다 --global 옵션 .)

이 옵션이 true 로 설정되어 있지 않으면 running git pull은에 해당 합니다 .git pull --rebasebranch.<name>.rebasefalse


3

이것은 --rebase옵션을 발행 할 때 옵션을 기본값으로 만듭니다git pull 주어진 브랜치에서 .

@Flimm, 나는 추가해야했다. true 첫 번째 옵션이 작동 해야했습니다.

올바른 구문은 다음과 같습니다.

git config branch.<branch>.rebase true

develop지점 에서이 명령을 실행하려면

git config branch.develop.rebase true

이제 develop섹션은 .git/config다음과 같습니다.

[branch "develop"]
        remote = origin
        merge = refs/heads/develop
        rebase = true

감사합니다. 나중에 답변을 수정했습니다. 나중에 답변을 직접 수정 해주세요.
Flimm

2
Donwvoter, 당신이 누구든지 당신의 이유를 설명하십시오. 의견없이 하향 투표는 완전히 임의적이며 건설적인 것 같습니다.
Daishi

1

현재 리포지토리의 기본 정책을 설정할 수있는 방법이 없습니다.

원하는 경우 최소한 git 1.7.9를 사용하는 pull.rebase경우 다음과 같이 전역 적으로 구성을 설정할 수 있습니다 .

git config --global pull.rebase true

그러나 각 머신에서해야합니다. 한 가지 옵션은 해당 옵션을 사용하여 기본 사용자 홈 템플릿 / 골격을 구성하는 것입니다. 그러나 사용자는 해당 옵션을 변경할 수 있습니다.

병합을 원하지 않으면 병합을 통한 푸시를 거부하는 서버 측 후크를 정의 할 수 있습니다.

참고로, 그의 pull.rebase 소스 문서 는 다음과 같습니다.

true 인 경우 "git pull"이 실행될 때 기본 원격에서 기본 분기를 병합하는 대신 가져온 분기 위에 분기를 리베이스하십시오. 분기별로이를 설정하려면 "branch..rebase"를 참조하십시오.

병합 할 때 --rebase-merges 옵션을 git rebase에 전달하여 로컬 병합 커밋이 rebase에 포함되도록합니다 ( git-rebase 참조) 참조).

보존시, git pull을 실행하여 로컬 커밋 된 병합 커밋이 평탄화되지 않도록 --preserve-merges를 git rebase에 전달하십시오.

값이 대화식 인 경우 rebase는 대화식 모드에서 실행됩니다.

참고 : 이것은 위험한 작업 일 수 있습니다. 의미를 이해하지 않으면 사용하지 마십시오 (자세한 내용은 git-rebase 참조).

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