หากมีคนลบสาขาระยะไกลเพราะงานจบลงแล้วและฉันไม่รู้ฉันจะไม่ทำ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
! ดูคำตอบของฉันด้านล่าง