Magit이 지점을 어디로 밀어야하는지 묻는 방법은 무엇입니까?


10

호출 할 때 magit-push-current와 P P상태 버퍼에서, Magit 2.1.0상류가 설정되지 않은 언제, 어디서 처음에 지점을 밀어 내게 묻습니다.

이전과 마찬가지로 이름을 자동으로 생성하려면 어떻게해야합니까?


2
모르는 경우 자동 생성 이름은 완료 옵션 중 하나입니다. 그래서, 당신은 처음 누를 때 some-branch-name받는 origin원격, 당신은 아마 입력 할 수 있습니다 o TAB s TAB당신은 당신이 원하는 이름을 얻을 것이다.
— Malabarba

오 알았어, 고마워 문제는 동일한 접두사로 시작하는 많은 분기가 있으며 매우 유용하지 않으며 항상 로컬 분기와 동일한 이름의 원격 분기를 배치한다는 것입니다.
— z1naOK9nu8iY5A

답변:


8

업데이트 : 아래에 언급 된 "푸시 지점"이 지금 구현되었습니다 . 자세한 내용 은 분기에 대한 설명서 를 참조하십시오.

업스트림 분기를 한 번 설정해야합니다. 당신이 있음을 완료 한 후에는 P P것과 푸시 및 상태 표시 버퍼에 한 unpulled 및 unpushed 변화의 목록을 얻을 것이다 (어떤이있다 제공).

업스트림 브랜치를 설정하는 방법에는 여러 가지가 있습니다. --set-upstream푸시 팝업에서 스위치를 사용할 수 있습니다 : P -u P. 또는 업스트림을 설정하고 다른 작업을 수행하지 않는 명령을 사용하십시오 b u.

또한 "시작점"이 지점 이름 인 경우 Magit은 새 지점을 만들 때 업스트림 지점을 자동으로 설정합니다. 이것은 로컬 및 원격 "업스트림"에서 작동합니다. 그러나 현지 지점을 시작 지점으로 선택하면 푸시하는 데 도움이되지 않습니다. 현재 저장소에서 현재 저장소로 푸시하는 것은 분명히 의미가 없으며 허용되지 않습니다.

따라서 "업스트림"브랜치가 실제로 다른 로컬 브랜치 인 P P경우 업스트림 브랜치가 구성되지 않은 것처럼 동작하며 정확히 같은 방식으로 동작합니다 P e. 업스트림이 전혀 구성되지 않은 경우에도 마찬가지입니다.

이것은 Git의 한계로 인해 하나의 다른 브랜치를 일부 브랜치 에만 연결할 수 있으며 그 브랜치를 "업스트림 브랜치"라고합니다. 최소한 "업스트림"및 "게시"분기가 있으면 더 좋습니다. 결국 Magit에서 구현하려고합니다. 이슈 # 1485 참조 .

따라서 P P"upstream"브랜치는 "master"가 아니라 "origin / master"가되어야합니다.


나는 항상 git push인수없이 실행되는 푸시 변형을 추가하는 것을 고려하고 있습니다. 그러면 Git 구성에만 의존하게됩니다.


나는 master지점에서 시작 origin/master하여 업스트림으로 설정 되지 않았습니다 . 업스트림에서 자동으로 설정하려면 지점에서 시작해야 합니까?
— z1naOK9nu8iY5A

업데이트 된 답변을 참조하십시오.
— tarsius

1
업스트림 으로 origin/master설정 에서 분기 origin/master했지만 업스트림으로 기대했을 origin/branch-name것입니다.
— z1naOK9nu8iY5A

그것이 당신이 원하는 것이라면 푸시하는 동안하는 것이 가장 좋습니다. P -p P <... completion ...> RET주 origin/branch-name당신이 그것을 입력 할 필요가 없습니다, 완료 후보로 제공됩니다.
— tarsius

2
일반적으로 한 번만 푸시하기 때문에 기능 당 분기와 함께 코드 검토를 위해 gitflow 및 pull 요청을 사용하면 고통스럽고 항상 로컬 분기와 이름이 같은 원격 분기를 만들어야합니다. 다른 명명 된 브랜치로 푸시하는 것은 코드 검토를 끝내는 것입니다.
— Barry Kelly

3

--set-upstream현재 지점에 아직 업스트림이 없을 때 자동으로 활성화되는 다음 조언을 사용합니다 .

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

ido 완료와 결합하면 다음과 같이 새 분기를 추진할 수 있습니다 P P RET.

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)

너무 멋져! 대단히 감사합니다!
— z1naOK9nu8iY5A

0

방금 새 분기를 b c만든 다음 .git/config파일을 편집하여 origin/branch모든 magit 2 항목으로 원숭이 가 아닌 것을 가리키고 어쨌든 작동하지 않는 것 같습니다.

변화:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

에

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

나는 여전히 똑같은 것을 달성하는 magit2에서 핵심 조합을 찾지 못했습니다. 리모컨이 원점에 없기 때문에 리모컨 설정이 작동하지 않습니다.


1
업스트림은을 사용하여 설정할 수 있습니다 bu. 그러나 git branch --set-upstream-toGit은 존재하고 아는 것처럼 존재하지 않는 브랜치를 업스트림으로 설정할 수 없으므로 Magit도 할 수 없습니다.
— tarsius

@tarsius magit 1은 내가 필요한 것을하는 것처럼 보였습니다. 방금 워크 플로의 일부를 되찾기 위해 노력하고 있습니다.
— David N. Welton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.