-u없이 업스트림을 자동으로 설정하도록 git push를 구성하는 방법은 무엇입니까? 설정하고 . 에 대해 알고 git push

내가 원하는 git push origin로컬에서 생성 된 분기를 처음으로 푸시 할 때 업스트림 참조를 자동으로 설정하고 .

에 대해 알고 git push -u있지만 -u이전에 사용했는지 또는 업스트림 참조를 설정 했는지 여부에 대해 생각하고 싶지 않습니다 . 즉, 업스트림이 아직없는 브랜치의 푸시에 git push자동으로 영향을 미치고 싶습니다 git push -u.

이것이 가능한가? 별칭이나 유틸리티 스크립트가 필요한 경우 괜찮습니다.



답변

git config사용하여 구성 할 수 있습니다 git config --global push.default current.

문서 : https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault


답변

git config를 사용하여 이것이 가능하지 않다고 생각하므로 다음은 bash에서 수행 할 수있는 작업입니다.

[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push

현재 분기에 원격 추적 분기가 있으면 호출하고 git push그렇지 않으면 호출합니다. git push -u


답변

참고 : 새 기본 푸시 정책 ” simple 이 업스트림 브랜치를 갖는 브랜치에 의존 한다는 사실은 다음을 의미합니다.
업스트림 브랜치를 설정하는 것은 숨겨진 자동화 된 단계가 아니라 자발적인 단계로 간주됩니다.

git push [$there]“이 무엇을 푸시할지 말하지 않으면 지금까지 전통적인 “일치”의미를 사용했습니다 (이미 같은 이름의 분기가있는 한 모든 분기가 원격으로 전송되었습니다).

현재 분기가 해당 원격 분기와 통합되도록 설정된 경우에만simple 현재 분기를 동일한 이름의 분기로 푸시 하는 ” “의미 체계를 사용합니다 . 이를 변경할 수
있는 사용자 기본 설정 구성 변수 ” “이 (가) 있습니다.
push.default


따라서 Mechanicalfish대답을 바탕으로 오른쪽 큰 따옴표 ( ")를 이스케이프 ( \")로 사용하여 별칭을 정의 할 수 있습니다 .

git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"

git pu origin

Sc0ttyD 는 주석 에서 다음 별칭을 제안합니다 .

alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'

여러 줄 :

alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] &&
           git push -u origin $(git symbolic-ref --short HEAD) ||
           git push'

답변

나는 같은 문제가 있었다. 이 별칭 (.gitconfig)을 찾았습니다.

[alias]
track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"

사용량 : git track새 지점 당 한 번 (현재 체크 아웃). 그런 다음 평소대로 누르십시오 🙂


답변

@VonC 및 @Frexuz의 답변은 도움이되지만 두 솔루션 모두 저에게 오류를 생성합니다. 두 가지 답변을 모두 사용하여 저에게 적합한 것을 조합했습니다.

    [alias]
    pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push

이로 인해 업스트림 (속성 )이 정의 되었는지 여부에 따라 git push -u origin $BRANCHNAME또는 을 실행합니다 .git pushbranch.$BRANCHNAME.merge

명령 줄에이 별칭을 입력하려면 이스케이프 코드가 필요하므로 편집기를 사용하여 올바른 파일 ( $HOME/.gitconfig(global), .git/config(local) 또는 /etc/gitconfig(system)) 에 삽입하는 것이 가장 쉽습니다.


답변

이 간단한 Bash 스크립트를 사용하여이 문제를 해결했습니다. 기존 브랜치에서는 작동하지 않지만이 기능으로 모든 브랜치를 생성하면 항상 업스트림 브랜치가 자동으로 설정됩니다.

function con { git checkout -b $1 && git push --set-upstream origin $1; }

$ 1은 다음 con과 같이 전달하는 첫 번째 인수를 나타냅니다 .

git checkout -b my-new-branch && git push -u my-new-branch

… 이렇게하면 :

con my-new-branch

답변

짧은 답변

실제로 명시적이고 -u필요할 때 옵션을 사용하고 싶지만 전체를 입력하고 싶지 않은 경우 :

git push -u origin foo

그런 다음 다음 별칭을 사용할 수 있습니다.

[alias]
    push-u = !git push -u origin $(git symbolic-ref --short HEAD)

다음을 입력하면됩니다.

git push-u

긴 대답

일반적으로 -u(의 약어)에 대한 필요성 --set-upstream은 방금 새 로컬 브랜치를 생성하고 커밋하고이를 업스트림으로 푸시하려는 경우입니다. 원격 저장소에는 아직 새 브랜치가 없으므로 커밋을 푸시하기 전에 git에게 원격 브랜치를 만들고 추적하도록 지시해야합니다. 이것은 브랜치에 대한 첫 번째 푸시에만 필요합니다. 다음은 일반적인 시나리오입니다.

git checkout -b foo         # Create local branch
git commit -m "Foo"         # Create local commit
git push -u origin foo      # Create and track remote branch, and push commit
git commit -m "Bar"         # Create local commit
git push                    # Push commit

개인적으로 저는 git push -u원격 브랜치를 만들 때 명시 적이 필요하다는 점을 좋아합니다 . 완전히 새로운 브랜치를 세상에 공유하는 매우 중요한 작업입니다.

그러나 나는 명시 적으로 작성해야하는 것이 싫다 git push -u origin foo. 입력하는 것이 고통 스러울뿐만 아니라 더 중요한 것은 오류가 발생하기 쉽다는 것입니다! 지점 이름을 입력 할 때 실수하기 쉽고 새 원격 지점은 로컬 지점과 동일한 이름을 갖지 않습니다! 대부분의 경우 실제로 업스트림 저장소가origin 이고 업스트림 분기는 로컬 분기와 동일한 이름을 갖기 .

따라서 Mark가 제공 한.gitconfig 우수한 답변 의 하위 집합 인 my에서 다음 별칭을 사용하고 있습니다 .

[alias]
    push-u = !git push -u origin $(git symbolic-ref --short HEAD)

이제 다음을 수행 할 수 있습니다. 이는 여전히 명시 적이지만 오류가 덜 발생합니다.

git checkout -b foo         # Create local branch
git commit -m "Foo"         # Create local commit
git push-u                  # Create and track remote branch, and push commit
git commit -m "Bar"         # Create local commit
git push                    # Push commit