เมื่อโทรmagit-push-current
ด้วยP P
จากบัฟเฟอร์สถานะMagit 2.1.0
ถามฉันที่จะผลักสาขาในครั้งแรกเมื่อไม่ได้ตั้ง upstream
มันจะปล่อยให้สร้างชื่อโดยอัตโนมัติตามที่เคยทำมาก่อนได้อย่างไร
เมื่อโทรmagit-push-current
ด้วยP P
จากบัฟเฟอร์สถานะMagit 2.1.0
ถามฉันที่จะผลักสาขาในครั้งแรกเมื่อไม่ได้ตั้ง upstream
มันจะปล่อยให้สร้างชื่อโดยอัตโนมัติตามที่เคยทำมาก่อนได้อย่างไร
คำตอบ:
อัปเดต: ขณะนี้มีการใช้งาน "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
ให้ตั้งค่าอัปสตรีมอัตโนมัติหรือไม่
origin/master
ชุดorigin/master
ต้นน้ำ แต่ฉันคาดว่าจะมีorigin/branch-name
ต้นน้ำ
P -p P <... completion ...> RET
โปรดทราบว่าorigin/branch-name
มีการเสนอให้เป็นตัวเลือกที่สมบูรณ์ดังนั้นคุณไม่จำเป็นต้องพิมพ์ออกมา
ฉันใช้คำแนะนำต่อไปนี้ซึ่งเปิดใช้งานโดยอัตโนมัติ--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)
ฉันเพิ่งสร้างสาขาใหม่ด้วย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 ที่ประสบความสำเร็จในสิ่งเดียวกัน การพยายามตั้งค่ารีโมตใช้งานไม่ได้เพราะมันยังไม่มีอยู่ในระบบดั้งเดิม
bu
ต้นน้ำสามารถตั้งค่าการใช้ แต่นั่นใช้git branch --set-upstream-to
และอย่างที่คุณรู้ Git ไม่สามารถตั้งสาขาที่ไม่มีอยู่ได้เนื่องจาก upstream และ Magit ไม่สามารถทำได้เช่นกัน
some-branch-name
ไปที่origin
รีโมตคุณอาจพิมพ์o TAB s TAB
และคุณจะได้รับชื่อที่คุณต้องการ