ฉันจะตั้งค่าสาขาต้นน้ำเพื่อผลักดันสาขาในพื้นที่ให้เป็น magit ได้อย่างไร


11

จากสิ่งที่ฉันจำได้ถ้าฉันทำงานในสาขาเช่นmy-feature-branchฉันเคยทำสิ่งนี้จากmagit-statusเมนูด้วยP Pแล้วเลือกสาขาระยะไกลจากรายการที่มีorigin/my-feature-branchอยู่ด้านบน มันทำงานได้อย่างสวยงาม

เมื่อเร็ว ๆ นี้เป็นของการอภิปรายนี้ผมสามารถทำบางสิ่งบางอย่างที่คล้ายกันด้วยP -u e(เปิดmagit-push-popupการตั้งค่า--set-upstreamธงและการใช้eสำหรับที่อื่น ๆ ) origin/my-feature-branchซึ่งในทำนองเดียวกันจะให้ฉันเลือกจากรายการของกิ่งที่เริ่มต้นด้วย มันก็ใช้ได้ดีสำหรับฉันเช่นกัน อย่างไรก็ตามเมื่อไม่นานมานี้สิ่งนี้ใช้งานไม่ได้อีกต่อไปและฉันไม่สามารถหาวิธีที่ดีที่สุดในการตั้งสาขาต้นน้ำ

เมื่อฉันใช้P eตัวเลือกแรกสำหรับสาขาที่จะผลักดันorigin/my-feature-branchซึ่งเป็นสิ่งที่ฉันต้องการ อย่างไรก็ตามมันไม่ได้ตั้งค่าorigin/my-feature-branchเป็นอัปสตรีมสำหรับสาขาท้องถิ่นของฉัน การใช้P uช่วยให้ฉันเลือกสาขาต้นน้ำ แต่origin/my-feature-branchไม่ได้อยู่ในรายการและฉันต้องพิมพ์origin/my-feature-branchโดยไม่ต้องใช้แท็บที่สมบูรณ์ (ฉันรู้ว่ามันไม่ยาก แต่มีแนวโน้มที่จะเกิดข้อผิดพลาดของผู้ใช้และช้ากว่าบรรทัดคำสั่ง)

นี่เป็นวิธีเดียวที่จะตั้งสาขาต้นน้ำตอนนี้หรือฉันขาดอะไรบางอย่าง? ฉันได้ดูการสนทนาและเอกสารอื่น ๆ ที่เกี่ยวข้องกับปัญหา แต่แหล่งข้อมูลทั้งหมดที่ฉันพบดูเหมือนว่าล้าสมัย


1
ฉันคิดว่า<remote>/<branch>ส่วนนั้นหลุดออกจากพรอมต์โดยไม่ตั้งใจ (ดูความคิดเห็นนี้ ) ในระหว่างนี้คุณสามารถตั้งค่าmagit-push-current-set-remote-if-missingเป็นศูนย์
Kyle Meyer

ฉันเพิ่งแก้ไขไปแล้ว คำตอบของฉันด้านล่างถือว่าแก้ไขแล้ว
tarsius

พบและแก้ไขปัญหาอื่น ๆ ที่เกี่ยวข้อง คุณอาจต้องรอสองสามชั่วโมงกว่าที่ Melpa จะทันก่อนทุกอย่างด้านล่างนี้ถูกต้อง 100%
Tarsius

คำตอบ:


11

มีหลายวิธีในการตั้งค่าอัปสตรีมขณะที่กดหรือไม่ดันในเวลาเดียวกัน

หากmagit-push-current-set-remote-if-missingไม่ใช่ - nil(ค่าเริ่มต้น) คุณจะเห็นสิ่งต่อไปนี้:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

หากต้องการผลักดันorigin/featureและตั้งค่าให้เป็นแบบอัปสตรีมให้กดuจากนั้นRETให้ยอมรับตัวเลือกเริ่มต้นที่สมบูรณ์

ถ้าmagit-push-current-set-remote-if-missingเป็นnilเช่นนั้นคุณจะเห็นสิ่งนี้แทน:

Push feature to
 e elsewhere

หากคุณกดpตอนนี้คุณจะได้รับแจ้งว่าไม่มีการกำหนดค่าอัปสตรีม (หมายความว่าคุณไม่สามารถกดไปที่อัปสตรีมหากไม่มีอัปสตรีม)

แต่ถ้าmagit-push-current-set-remote-if-missingเป็นnilเช่นนั้นรายการของสวิตช์จะมีคุณสมบัติ--set-upstreamดังนั้นคุณสามารถใช้P - u pตามที่คุณคุ้นเคยกับ (ยกเว้นว่า p ที่สองเป็นตัวพิมพ์เล็ก) แม้ว่าจะมีความซับซ้อนอยู่หนึ่งอย่าง: หลังจากเปลี่ยนค่าของmagit-push-current-set-remote-if-missingคุณแล้วคุณต้องรีสตาร์ท Emacs เพื่อ--set-upstreamให้ปรากฏหรือหายไป

ในที่สุดคุณสามารถตั้งค่าต้นน้ำโดยใช้ "ชุดต้นน้ำ (และทำอะไรอย่างอื่น) b uorigin/masterRETคำสั่ง": โปรดทราบว่าเมื่อคุณใช้วิธีการนี้คุณจะสามารถเลือกสาขาที่มีอยู่แล้วเท่านั้น


แต่มันจะเป็นการดีกว่าถ้าจะกำหนดค่า push-remote และผลักไปที่นั้น หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ push-remote และความแตกต่างจากอัปสตรีมให้ดูที่โหนดการแตกสาขาในคู่มือข้อมูล (เวอร์ชั่นเว็บยังไม่ได้รับการอัปเดต)

โดยทั่วไปสาขาต้นน้ำเป็นสาขาเป็นที่สาขาคุณลักษณะของคุณจะได้รับการควบรวมกิจการ (โดยการผสานหรือ rebasing ไม่ได้โดยการผลักดัน) origin/masterส่วนใหญ่มีแนวโน้ม และรีโมทกดคือที่ที่คุณผลักดันฟีเจอร์ของคุณไปที่ในขณะที่ยังทำงานกับมันอยู่หรือเพื่อให้คนอื่นสามารถรวมมันได้ หากชื่อสาขาในพื้นที่มีชื่อfeatureและ push-remote อยู่my-forkแล้วการผลักสาขานั้นโดยใช้P pจะเป็นการพุmy-fork/featureช (ไม่สามารถกำหนดค่า "push-to-branch" ชื่อของสาขาบน push-remote จะเหมือนกับชื่อโลคอลเสมอ)

ดังนั้นในขณะที่คำถามของคุณมีลักษณะคล้ายกับ "ฉันจะผลักดันไปยังต้นน้ำได้อย่างไรในขณะที่กำหนดค่าต้นน้ำในเวลาเดียวกัน" คำแนะนำของฉันคือไม่ผลักไปที่ต้นน้ำเลย แต่จะผลักดันระยะไกลแทน

มีให้คุณไม่ได้เปลี่ยนค่าของคุณสามารถกำหนดค่าการผลักดันระยะไกลโดยใช้magit-push-current-set-remote-if-missing P psome-remoteRETแต่เนื่องจากคุณมีแนวโน้มที่จะผลักดันฟีเจอร์กิ่งไม้ทั้งหมดไปยังรีโมตเดียวกันจึงเป็นการดีกว่าที่จะตั้งค่ารีโมตกดหนึ่งครั้งสำหรับทุกสาขาและทำได้ด้วย: bจากนั้นM-pจนกว่าจะเลือกรีโมตที่เหมาะสม


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

น่าเสียดายที่จุดเริ่มต้นมักเป็นสาขาในพื้นที่และในกรณีนั้น Git โดยค่าเริ่มต้นจะไม่ใช้เป็นอัปสตรีม แต่นั่นสามารถแก้ไขได้อย่างง่ายดายด้วยการรันเพียงครั้งเดียว:

git config --global branch.autoSetupMerge always

ค่าเริ่มต้นคือtrueซึ่งหมายความว่า "ตั้งค่าจุดเริ่มต้นเป็นอัปสตรีมหากเป็นสาขาระยะไกล "


โดยวิธีการเดียวกันนี้ใช้กับ push-remote โดยปกติควรตั้งค่ากึ่งอัตโนมัติในที่เก็บ "ใหม่" หากคุณโคลนที่เก็บข้อมูลคุณจะถูกถามว่าคุณต้องการใช้originเป็น push-remote หรือไม่ คุณควรตอบว่า "ใช่" นอกจากว่าคุณกำลังจะเพิ่มรีโมตอื่นให้พูดmy-forkซึ่งควรใช้เป็น push-remote เมื่อคุณเพิ่มรีโมตใหม่โดยใช้M aและremote.pushDefaultยังไม่ได้ตั้งค่าคุณจะถูกถามว่าคุณต้องการใช้รีโมตที่เพิ่มใหม่เป็น push-remote หรือไม่

นี้สามารถกำหนดค่าการใช้และmagit-clone-set-remote.pushDefaultmagit-remote-add-set-remote.pushDefault

อีกหนึ่งทางเลือกที่ทันสมัยซึ่งเริ่มต้นที่magit-branch-prefer-remote-upstream nilหากคุณตั้งค่าเป็นtแล้วเลือกสาขาท้องถิ่นเป็นจุดเริ่มต้นสำหรับสาขาใหม่จากนั้นอัปสตรีมของจุดเริ่มต้นอาจ (ตามกฎบางข้อดูที่ doc-string) ใช้เป็นอัปสตรีมแทน จุดเริ่มต้นเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.