หากมีคนลบสาขาระยะไกลเพราะงานจบลงแล้วและฉันไม่รู้ฉันจะไม่ทำgit fetch --pruneและในที่สุดฉันก็จะผลักสาขาที่ถูกลบกลับไป
มีวิธีแก้ปัญหาในการบังคับให้ Git ใช้โหมดพรุนเมื่อดึง / ดึงโดยไม่ต้องระบุทุกครั้งหรือไม่
หากมีคนลบสาขาระยะไกลเพราะงานจบลงแล้วและฉันไม่รู้ฉันจะไม่ทำgit fetch --pruneและในที่สุดฉันก็จะผลักสาขาที่ถูกลบกลับไป
มีวิธีแก้ปัญหาในการบังคับให้ Git ใช้โหมดพรุนเมื่อดึง / ดึงโดยไม่ต้องระบุทุกครั้งหรือไม่
คำตอบ:
"
git fetch" (ด้วยเหตุนี้ "git pull" เช่นกัน) เรียนรู้วิธีตรวจสอบตัวแปรการกำหนดค่า "fetch.prune" และ "remote.*.prune" และทำตัวราวกับว่า--pruneได้รับตัวเลือกบรรทัดคำสั่ง ""
นั่นหมายความว่าหากคุณตั้งค่า remote.origin.prune เป็นจริง:
git config remote.origin.prune true
สิ่งใดgit fetchหรือgit pullจะตัดโดยอัตโนมัติ
หมายเหตุ: Git 2.12 (ไตรมาสที่ 1 ปี 2560) จะแก้ไขข้อผิดพลาดที่เกี่ยวข้องกับการกำหนดค่านี้ซึ่งจะทำให้การgit remote renameทำงานผิดพลาด
ดูที่ " ฉันจะเปลี่ยนชื่อรีโมต git ได้อย่างไร "
ดูเพิ่มเติมที่กระทำ 737c5a9 :
หากไม่มี "
git fetch --prune" สาขาการติดตามระยะไกลสำหรับสาขาหนึ่งอีกด้านหนึ่งที่ลบไปแล้วจะคงอยู่ตลอดไป
บางคนต้องการเรียกใช้ "git fetch --prune" เสมอเพื่ออำนวยความสะดวกให้กับผู้ใช้ที่ต้องการจะตัดเป็นประจำหรือเมื่อดึงข้อมูลจากระยะไกลโดยเฉพาะให้เพิ่มตัวแปรการกำหนดค่าใหม่สองตัว "
fetch.prune" และ "remote.<name>.prune":
- "
fetch.prune" อนุญาตให้เปิดใช้งานลูกพรุนสำหรับการดึงข้อมูลทั้งหมด- "
remote.<name>.prune" อนุญาตให้เปลี่ยนพฤติกรรมต่อระยะไกลหลังจะแทนที่อดีตโดยธรรมชาติและ
--[no-]pruneตัวเลือกจากบรรทัดคำสั่งจะแทนที่ค่าเริ่มต้นที่กำหนดไว้เนื่องจาก
--pruneเป็นการดำเนินการที่อาจเป็นอันตราย (Git ยังไม่ reflogs สำหรับการอ้างอิงที่ถูกลบ) เราไม่ต้องการตัดโดยไม่ได้รับความยินยอมจากผู้ใช้ดังนั้นการกำหนดค่านี้จะไม่เปิดตามค่าเริ่มต้น
git config --global fetch.prune true
git config --global fetch.prune trueเสมอ--pruneสำหรับgit fetchและgit pullในที่เก็บ Git ทั้งหมดของคุณ:
git config --global fetch.prune true
คำสั่งด้านบนนี้ผนวกในการกำหนดค่า Git ทั่วโลกของคุณ (โดยทั่วไป~/.gitconfig) บรรทัดต่อไปนี้ ใช้git config -e --globalเพื่อดูการกำหนดค่าทั่วโลกของคุณ
[fetch]
prune = true
git config remote.origin.prune trueเป็นเสมอ--pruneแต่จากที่เก็บเดียว:
git config remote.origin.prune true
#^^^^^^
#replace with your repo name
คำสั่งด้านบนนี้เพิ่มในการกำหนดค่า Git ท้องถิ่นของคุณ (โดยทั่วไป.git/config) บรรทัดด้านล่าง ใช้git config -eเพื่อดูการกำหนดค่าท้องถิ่นของคุณ
[remote "origin"]
url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fetch = +refs/heads/*:refs/remotes/origin/*
prune = true
คุณยังสามารถใช้--globalภายในคำสั่งที่สองหรือใช้แทน--localภายในคำสั่งแรก
git config --global gui.pruneDuringFetch trueหากคุณใช้git guiคุณอาจสนใจโดย:
git config --global gui.pruneDuringFetch true
ที่ผนวก:
[gui]
pruneDuringFetch = true
เอกสารที่เกี่ยวข้องจากgit help config:
--globalสำหรับตัวเลือกการเขียน: เขียนไปยัง
~/.gitconfigไฟล์ทั่วโลกมากกว่าที่เก็บ.git/configให้เขียนเป็น$XDG_CONFIG_HOME/git/configไฟล์หากไฟล์นี้มีอยู่และ~/.gitconfigไฟล์ไม่ได้
--localสำหรับตัวเลือกการเขียน: เขียนไปยัง
.git/configไฟล์ที่เก็บ นี่คือพฤติกรรมเริ่มต้น
fetch.pruneหากเป็นจริงการดึงข้อมูลจะทำงานโดยอัตโนมัติเสมือนว่า
--pruneได้รับตัวเลือกในบรรทัดคำสั่งremote.<name>.pruneดูเพิ่มเติม
gui.pruneDuringFetch"เป็นจริง" ถ้าgit-guiควรตัดกิ่งติดตามระยะไกลเมื่อทำการดึงข้อมูล ค่าเริ่มต้นคือ "false"
remote.<name>.pruneเมื่อตั้งค่าเป็นจริงการดึงข้อมูลจากระยะไกลนี้โดยค่าเริ่มต้นจะลบการอ้างอิงการติดตามระยะไกลใด ๆ ที่ไม่มีอยู่ในระยะไกลอีกต่อไป (ราวกับว่ามี
--pruneตัวเลือกในบรรทัดคำสั่ง) แทนที่fetch.pruneการตั้งค่าถ้ามี
git config -eและgit config -e --globalจากโพสต์นี้ ไม่มีvimคำสั่งพิมพ์ให้ชี้ไปที่พา ธ เฉพาะไปยังไฟล์ git config และต้องคิดว่าพา ธ นั้นคืออะไร
git config --global fetch.prune true" ก็ดี (พร้อมลิงก์ไปยังเอกสารที่เกี่ยวข้อง)
หากคุณต้องการเสมอpruneเมื่อคุณfetchผมสามารถแนะนำการใช้นามแฝง
เพียงพิมพ์git config -eเพื่อเปิดโปรแกรมแก้ไขและเปลี่ยนการกำหนดค่าสำหรับโครงการเฉพาะและเพิ่มส่วนเช่น
[alias]
pfetch = fetch --prune
เมื่อคุณดึงgit pfetchลูกพรุนออกมาโดยอัตโนมัติ
pullและfetchเวอร์ชั่นที่ตัดแล้ว ที่จริงแล้วฉันคิดว่า (แต่ฉันไม่ได้ลอง) คุณสามารถเขียนfetch = fetch --pruneโดยตรงในส่วนนามแฝงและดังนั้นpullจะใช้การดึงข้อมูลที่ถูกตัด
fetch = fetch --pruneใช้งานไม่ได้การเขียนทับคำสั่งด้วยนามแฝงไม่ได้ผลสำหรับฉัน อาจเป็นเพราะฉันใช้รุ่นเก่า (1.7.2.5)
git fetch! ดูคำตอบของฉันด้านล่าง