คือgit remote update
เทียบเท่าgit fetch
?
คือgit remote update
เทียบเท่าgit fetch
?
คำตอบ:
อัพเดท: ข้อมูลเพิ่มเติม!
ฉันควรทำสิ่งนี้ตั้งแต่เริ่มต้น: ฉันทำบันทึกประจำรุ่นของ Git ใน Git's repo Git (ดังนั้น meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
จากนั้นฉันก็less
ทำการค้นหา--all
และนี่คือสิ่งที่ฉันพบภายใต้บันทึกย่อประจำรุ่นสำหรับ Git เวอร์ชัน 1.6.6 :
git fetch
เรียนรู้--all
และ--multiple
ตัวเลือกต่าง ๆ เพื่อทำการดึงข้อมูลจากที่เก็บข้อมูลจำนวนมากและ--prune
ตัวเลือกในการลบสาขาการติดตามระยะไกลที่ค้างอยู่ สิ่งเหล่านี้สร้างgit remote update
และgit remote prune
จำเป็นน้อยกว่า (ไม่มีแผนจะลบremote update
หรือremote prune
แม้กระทั่ง)
เวอร์ชั่น 1.6.6 ยังไม่ออกจนถึงวันที่ 23 ธันวาคม 2552และโปสเตอร์ต้นฉบับถามคำถามของเขาเมื่อวันที่ 6 ธันวาคม 2009
ดังนั้นอย่างที่คุณเห็นจากบันทึกประจำรุ่นผู้แต่งของ Git ทราบถึงความจริงที่ว่าgit remote update
ฟังก์ชั่นคำสั่งนั้นทำซ้ำบ้างgit fetch
แต่พวกเขาตัดสินใจที่จะไม่ลบมันอาจจะเป็นเพราะความเข้ากันได้ย้อนหลังกับสคริปต์และโปรแกรมที่มีอยู่หรืออาจเป็นเพราะ มันทำงานมากเกินไปและมีรายการที่มีลำดับความสำคัญสูงกว่า
คำตอบเดิมพร้อมรายละเอียดเพิ่มเติม
คำตอบของ xenoterracideอายุ 3.5 ปีในขณะนี้และ Git ได้ผ่านหลายรุ่นตั้งแต่นั้นมา (มันได้จากv1.6.5.5ถึง v1.8.3.2 ตามที่เขียนนี้) และดูที่เอกสารปัจจุบันของgit remote update
และgit fetch
ดูเหมือนว่า เหมือนกับที่พวกเขาทั้งสองสามารถปฏิบัติหน้าที่ได้เหมือนกันกับการดึงข้อมูลคอมมิทใหม่จากรีโมตหลาย ๆตัวเลือกทางเลือกและอาร์กิวเมนต์ที่ถูกต้อง
วิธีหนึ่งในการดึงข้อมูลรีโมตหลายตัวใช้--all
ธง:
git fetch --all
สิ่งนี้จะดึงข้อมูลจากรีโมทที่ตั้งค่าไว้ทั้งหมดของคุณโดยสมมติว่าคุณไม่ได้remote.<name>.skipFetchAll
ตั้งค่าไว้:
ถ้าเป็นจริงห่างไกลนี้จะถูกข้ามไปโดยปริยายเมื่อปรับปรุงโดยใช้คอมไพล์ดึงข้อมูล (1)หรือ subcommand ปรับปรุงของคอมไพล์ระยะไกล (1) - เอกสาร git-config
นี่จะเทียบเท่ากับการใช้
git remote update
โดยไม่ระบุกลุ่มรีโมตใด ๆ เพื่อดึงข้อมูลและยังไม่ได้remotes.default
ตั้งค่าในการกำหนดค่า repo ของคุณและยังไม่มีการremote.<name>.skipDefaultUpdate
ตั้งค่ารีโมตของคุณเป็นจริง
ปัจจุบัน 1.8.3.2 เอกสารสำหรับการกำหนดค่าของ Gitไม่ได้พูดถึงremotes.default
การตั้งค่า แต่ผมปรึกษาผู้ทรงอำนาจของ Google เกี่ยวกับมันและพบคำอธิบายที่เป็นประโยชน์จากMislav Marohnić :
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
คุณสามารถกำหนดรายการรีโมตเริ่มต้นที่จะถูกดึงโดย
remote update
คำสั่ง เหล่านี้สามารถรีโมทจากเพื่อนร่วมทีมสมาชิกชุมชนที่เชื่อถือได้ของโครงการโอเพนซอร์สหรือคล้ายกัน
ดังนั้นถ้าคุณremotes.default
ตั้งค่าไว้และไม่ใช่รีโมททั้งหมดที่มีอยู่ในรายการคุณgit remote update
จะไม่สามารถดึงข้อมูลรีโมททั้งหมดที่ repo ของคุณ "รู้"
สำหรับการremote.<name>.skipDefaultUpdate
ตั้งค่าเอกสาร Gitอธิบายได้ดังนี้:
ถ้าเป็นจริงห่างไกลนี้จะถูกข้ามไปโดยปริยายเมื่อปรับปรุงโดยใช้คอมไพล์ดึงข้อมูล (1)หรือ subcommand ปรับปรุงของคอมไพล์ระยะไกล (1)
แทนที่จะดึงข้อมูลรีโมตทั้งหมดทั้งสองfetch
และremote update
อนุญาตให้คุณระบุรีโมตจำนวนมากและกลุ่มของรีโมตเพื่อดึง:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
ช่วยให้คุณสามารถดึงรีโมตหลายตัวที่เป็นส่วนหนึ่งของกลุ่ม (ยืมตัวอย่างอื่นจากMislav ):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
ช่วยให้คุณสามารถระบุที่เก็บและกลุ่มที่เก็บหลายแห่งเพื่อดึงในครั้งเดียว (จากเอกสาร ):
อนุญาตให้ระบุ
<repository>
และ<group>
ขัดแย้งกันหลายรายการ ไม่<refspec>s
อาจระบุได้
ความคลุมเครือในgit remote update
เอกสาร
บทสรุปสำหรับgit remote update
ระบุว่าไวยากรณ์คำสั่งดังต่อไปนี้:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
ขอให้สังเกตส่วนที่ผ่านมา[(<group> | <remote>)…]
? จุดต่อท้าย...
บ่งบอกว่าคุณสามารถระบุหลายกลุ่มและรีโมทด้วยคำสั่งซึ่งหมายความว่ามันทำงานในลักษณะเดียวกับgit fetch --multiple
... ดูว่าไวยากรณ์ระหว่างทั้งสองมีความคล้ายคลึงกันอย่างไร
อย่างไรก็ตามในเอกสารเดียวกันคำอธิบายสำหรับupdate
คำสั่งไม่ได้เกี่ยวกับการระบุหลายกลุ่มและการขัดแย้งระยะไกลเพียงอย่างเดียว
Fetch [e]
remotes.<group>
การอัปเดตสำหรับชุดที่มีชื่อของรีโมทในพื้นที่เก็บข้อมูลตามที่กำหนดโดย
ดังนั้นจึงไม่มีความชัดเจนหากใช้git remote update
งานได้เหมือนกันgit fetch --multiple
กับการระบุรีโมตเดี่ยวและกลุ่มรีโมตหลายกลุ่ม
ในที่สุดทุกคนรู้กรณีง่าย ๆ ของการดึงรีโมตเดียว:
git fetch <remote>
อาจเป็นกรณีที่คุณสามารถใช้
git remote update <remote>
เพื่อทำสิ่งเดียวกัน แต่อย่างที่ฉันได้กล่าวไว้ในหัวข้อก่อนหน้าเอกสารประกอบสำหรับgit remote update
ยังไม่ชัดเจนเกี่ยวกับว่าเป็นไปได้ที่จะดึงข้อมูลอื่นนอกเหนือจากรีโมทกลุ่มเดียวที่มีคำสั่งหรือไม่
อย่างที่ฉันได้อธิบายไปแล้วgit fetch
และมีgit remote update
พฤติกรรมคล้ายกันในการดึงข้อมูลจากรีโมทหลาย ๆ พวกเขาแบ่งปันไวยากรณ์และข้อโต้แย้งที่คล้ายคลึงกันแม้ว่าgit fetch
จะสั้นกว่าดังนั้นผู้คนอาจพบว่าพิมพ์และใช้งานได้ง่ายขึ้น
อาจเป็นกรณีที่git remote update
ไม่สามารถใช้ดึงรีโมทระยะไกลแบบเดียวได้git fetch
แต่อย่างที่ฉันได้ชี้ให้เห็นแล้วเอกสารไม่ได้ทำให้ชัดเจน
นอกเหนือ
ความซ้ำซ้อนในการทำงานระหว่างคำสั่ง Git Porcelain ซึ่งเป็นตัวอย่างที่ดีที่สุดgit fetch
และgit remote update
เหนือกว่านั้นไม่ซ้ำกัน ฉันสังเกตเห็นสถานการณ์ที่คล้ายกันกับgit rebase --onto
และgit cherry-pick
ในการที่ทั้งสองสามารถใช้ช่วงของความมุ่งมั่นที่จะแก้ไขบนฐานกระทำใหม่
ฉันเดาว่าเป็น Git ได้พัฒนากว่าปีที่ผ่านมาการทำงานบางอย่าง (หลีกเลี่ยงไม่ได้?) ซ้ำบางทีบางครั้งก็เป็นความสะดวกสบายสำหรับผู้ใช้ขั้นปลาย (ตัวอย่างเช่นมันง่ายที่จะผ่านช่วงไปcherry-pick
กว่าที่จะผ่านเดียวกระทำซ้ำแล้วซ้ำอีก เพื่อเลือกช่วง) เห็นได้ชัดcherry-pick
ว่าไม่ได้ยอมรับช่วงของการกระทำตามที่อธิบายไว้ในบันทึกประจำรุ่น v1.7.2 :
git cherry-pick
เรียนรู้ที่จะเลือกช่วงของการกระทำ (เช่นcherry-pick A..B
และcherry-pick --stdin
) ทำเช่นนั้นgit revert
;rebase [-i]
แม้ว่าสิ่งเหล่านี้จะไม่สนับสนุนการควบคุมการเรียงลำดับที่ดีกว่า
ใช่และไม่. git remote update
ดึงข้อมูลจากรีโมททั้งหมดไม่ใช่เพียงหนึ่งไฟล์
โดยไม่ต้องดูรหัสเพื่อดูว่าremote update
เป็นเพียงเชลล์สคริปต์ (เป็นไปได้) โดยทั่วไปแล้วจะทำการดึงข้อมูลสำหรับแต่ละรีโมท git fetch
สามารถละเอียดมากขึ้น
git remote update
ดู git-remote manpage
git remote
ไม่เชลล์สคริปต์ แต่มัน spawns ในระหว่างการgit fetch
remote update
git fetch
ตัวเลือกคำสั่งที่เทียบเท่าgit remote update
หรือไม่?
git fetch --all
git rebase
เป็นเหมือนmv
และgit cherry-pick
เป็นเช่นcp
นั้น--onto
สวิทช์ไม่ได้เปลี่ยนที่ คุณสามารถรับผลกระทบการคัดลอกได้git rebase
เฉพาะเมื่อคุณระบุค่า SHA1 ไม่เช่นนั้นสาขาของคุณจะถูกย้าย!