จะป้องกันไม่ให้ Magit ถามว่าจะผลักสาขาได้อย่างไร


10

เมื่อโทรmagit-push-currentด้วยP Pจากบัฟเฟอร์สถานะMagit 2.1.0ถามฉันที่จะผลักสาขาในครั้งแรกเมื่อไม่ได้ตั้ง upstream

มันจะปล่อยให้สร้างชื่อโดยอัตโนมัติตามที่เคยทำมาก่อนได้อย่างไร


2
ในกรณีที่คุณไม่ทราบชื่อที่สร้างขึ้นอัตโนมัติเป็นหนึ่งในตัวเลือกความสมบูรณ์ ดังนั้นในครั้งแรกที่คุณกดsome-branch-nameไปที่originรีโมตคุณอาจพิมพ์o TAB s TABและคุณจะได้รับชื่อที่คุณต้องการ
Malabarba

โอ้ตกลงฉันไม่รู้ขอขอบคุณ ปัญหาคือว่าฉันมีสาขาจำนวนมากเริ่มต้นด้วยคำนำหน้าเหมือนกันซึ่งไม่สะดวกมากฉันยังใส่กิ่งก้านสาขาที่มีชื่อเดียวกันกับสาขาท้องถิ่น
z1naOK9nu8iY5A

คำตอบ:


8

อัปเดต: ขณะนี้มีการใช้งาน "push branch" ที่กล่าวถึงด้านล่างดูเอกสารเกี่ยวกับการแยกสาขาสำหรับข้อมูลเพิ่มเติม

คุณต้องตั้งค่าสาขาต้นน้ำหนึ่งครั้ง เมื่อคุณทำเช่นนั้นแล้วP Pผลักไปที่นั้นและคุณจะได้รับรายการของการเปลี่ยนแปลงที่ไม่ได้ถูกกำจัดและไม่ได้รับการชำระในบัฟเฟอร์สถานะ (มีให้)

มีหลายวิธีในการตั้งค่าสาขาต้นน้ำ คุณสามารถใช้เปลี่ยนจากการผลักดันป๊อปอัพ:--set-upstream หรือใช้คำสั่งที่กำหนดต้นน้ำและไม่ไม่มีอะไรอื่น:P -u Pb u

นอกจากนี้ Magit จะตั้งสาขาต้นน้ำโดยอัตโนมัติเมื่อสร้างสาขาใหม่หาก "จุดเริ่มต้น" เป็นชื่อสาขา ใช้งานได้กับ "upstreams" ในท้องถิ่นและระยะไกล แต่โปรดทราบว่าถ้าคุณเลือกสาขาท้องถิ่นเป็นจุดเริ่มต้นนั่นจะไม่ช่วยคุณในการผลัก การพุชจากที่เก็บปัจจุบันไปยังที่เก็บปัจจุบันไม่ชัดเจนและไม่ได้รับอนุญาต

ดังนั้นเมื่อสาขา "อัพสตรีม" เป็นจริงอีกสาขาหนึ่งในท้องถิ่นแล้วP Pจะทำงานราวกับว่าไม่มีการกำหนดค่าสาขาอัพสตรีมและทำงานเหมือนP eกัน เช่นเดียวกันในกรณีที่ไม่มีการกำหนดค่าอัปสตรีมเลย

นี้เนื่องจากข้อ จำกัด ใน Git A: หนึ่งเท่านั้นที่สามารถร่วมเป็นหนึ่งในสาขาอื่น ๆ ที่มีสาขาบางและสาขาที่แล้วเรียกว่า "ต้นน้ำสาขา" มันจะดีกว่าถ้าอย่างน้อยก็มี "อัปสตรีม" และสาขา "เผยแพร่" ฉันตั้งใจจะนำสิ่งนั้นไปใช้ใน Magit ในที่สุด เห็นปัญหา# 1485

ดังนั้นหากคุณต้องการที่จะสามารถผลักดันด้วยP Pแล้วสาขา "ต้นน้ำ" จะต้องมีเช่น "ต้นกำเนิด / หลัก" ไม่ใช่ "ต้นแบบ"


ฉันกำลังพิจารณาการเพิ่มชุดตัวผลักซึ่งมักจะทำงาน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 และดึงคำขอสำหรับการตรวจสอบโค้ดด้วยสาขาต่อฟีเจอร์เนื่องจากโดยทั่วไปคุณจะกดเพียงครั้งเดียวและจะสร้างสาขาระยะไกลที่มีชื่อเดียวกับสาขาในท้องถิ่น การผลักไปยังสาขาที่มีชื่อแตกต่างกันจะเป็นการสิ้นสุดการตรวจสอบโค้ด
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-toและอย่างที่คุณรู้ Git ไม่สามารถตั้งสาขาที่ไม่มีอยู่ได้เนื่องจาก upstream และ Magit ไม่สามารถทำได้เช่นกัน
Tarsius

@tarsius magit 1 ดูเหมือนจะทำสิ่งที่ฉันต้องการ ฉันแค่พยายามเอากลับมาใช้งานบางส่วนของเวิร์กโฟลว์นั้น
David N. Welton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.