"ต้นกำเนิด" ใน Git คืออะไร


582

เมื่อฉันวิ่ง:

git push origin branchname

อะไรคือoriginสาเหตุและทำไมฉันต้องพิมพ์ก่อนชื่อสาขา


63
"origin" เป็นชื่อของที่เก็บระยะไกลที่คุณต้องการเผยแพร่คุณกระทำการ ตามแบบแผนพื้นที่เก็บข้อมูลระยะไกลเริ่มต้นเรียกว่า "จุดเริ่มต้น" แต่คุณสามารถทำงานกับรีโมทหลาย ๆ (ด้วยชื่อที่แตกต่างกัน) ในเวลาเดียวกัน ข้อมูลเพิ่มเติมที่นี่ (ตัวอย่าง): gitref.org/remotes
Benoit Courtine

1
โปรดทราบว่าที่มานั้นเป็น repo "อัป
สตรีม


แต่เมื่อใช้การดึงข้อมูลคอมไพล์แล้วสาขาคอมไพล์ -r สาขาท้องถิ่นจะได้รับการเติมด้วยต้นทาง / ugh: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

ชำระเงินที่ไฟล์. git \ config ที่มีการแมปชื่อแทนไปยัง URL โฟลเดอร์. git จะถูกซ่อนไว้โดยค่าเริ่มต้น
Abhijeet Patel

คำตอบ:


568

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

จากการทำ

git push origin branchname

คุณกำลังบอกว่าจะผลักดันไปยังoriginพื้นที่เก็บข้อมูล ไม่จำเป็นต้องตั้งชื่อที่เก็บระยะไกลorigin: อันที่จริงที่เก็บเดียวกันอาจมีนามแฝงที่แตกต่างกันสำหรับนักพัฒนาอื่น

การควบคุมระยะไกลเป็นเพียงนามแฝงที่เก็บ URL ของที่เก็บ คุณสามารถดูว่า URL ใดที่เป็นของแต่ละรีโมตโดยใช้

git remote -v

ในpushคำสั่งคุณสามารถใช้รีโมตหรือคุณสามารถใช้URLโดยตรง ตัวอย่างที่ใช้ URL:

git push git@github.com:git/git.git master

1
รีโมตเดียวสามารถเป็นนามแฝงสำหรับรีโมตอื่นหลายรายการได้หรือไม่? ถ้าฉันต้องการรีโมทหนึ่งอันผลักไปที่รีโมตอื่นหลาย ๆ ตัว ตัวอย่างเช่น push to repo หลักและ push to repo สำรอง นั่นเป็นสิ่งที่สมเหตุสมผลที่จะต้องการในบางสถานการณ์หรือไม่? แก้ไข: มีหลายโซลูชั่นที่นี่
Yankee

1
จะเกิดอะไรขึ้นหากฉันไม่ใช้คำหลัก "ต้นกำเนิด" เมื่อเราพูดว่า "git push" จะไม่ส่งการกระทำทั้งหมดไปยังที่เก็บระยะไกลหรือไม่ การเพิ่มคำหลัก "ต้นกำเนิด" ดูเหมือนซ้ำซ้อน
Mugen

@Mugen ในเอกสารสำหรับgit pushคุณจะเห็นว่ามันตรวจสอบก่อนการตั้งค่าสำหรับพื้นที่เก็บข้อมูลที่ (ซึ่งคุณสามารถตรวจสอบกับgit config --list) branch.<branchname>.remoteสำหรับคีย์ที่เรียกว่า หากยังไม่ได้ตั้งค่า "เป็นค่าเริ่มต้นของการเริ่มต้น" - git-scm.com/docs/git-push
Kenmore

156

originคือไม่ได้ชื่อพื้นที่เก็บข้อมูลระยะไกล มันค่อนข้างจะเป็นนามแฝงในท้องถิ่นที่ตั้งเป็นกุญแจสำคัญในสถานที่ของ URL ที่เก็บระยะไกล

มันหลีกเลี่ยงผู้ใช้ต้องพิมพ์ URL ระยะไกลทั้งหมดเมื่อมีข้อความแจ้ง

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

ชื่อนามแฝงนี้ไม่ได้เข้ารหัสอย่างหนักและสามารถเปลี่ยนแปลงได้โดยใช้คำสั่งต่อไปนี้:

git remote rename origin mynewalias

ลองดูที่http://git-scm.com/docs/git-remoteเพื่อชี้แจงเพิ่มเติม


1
จะเกิดอะไรขึ้นหากฉันไม่ใช้คำหลัก "ต้นกำเนิด" เมื่อเราพูดว่า "git push" จะไม่ส่งการกระทำทั้งหมดไปยังที่เก็บระยะไกลหรือไม่ การเพิ่มคำหลัก "ต้นกำเนิด" ดูเหมือนซ้ำซ้อน
Mugen

74

Git มีแนวคิดของ "รีโมท" ซึ่งเป็นเพียง URL ไปยังสำเนาอื่น ๆ ของที่เก็บของคุณ เมื่อคุณโคลนที่เก็บอื่น Git จะสร้างชื่อ "ต้นกำเนิด" ระยะไกลโดยอัตโนมัติและชี้ไปที่มัน

git remote show originคุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับระยะไกลโดยการพิมพ์


1
คำสั่ง git สร้างความสับสนให้กับผู้เริ่มต้น ฉันเดาว่ามันเกี่ยวข้องกับประวัติของระบบควบคุมเวอร์ชันนี้ ดังนั้นคำถาม: git remote show originทำไมไม่ใช่อย่างง่าย ๆgit show origin? จะต้องมีเหตุผลมันคืออะไร? ขอบคุณ
Stack0verflow

5
@ Stack0verflow: นี่อาจจะถูกถามว่าเป็นคำถามใหม่ที่ดีกว่าเพื่อให้ผู้คนสามารถทำวิจัยได้หากคุณสงสัย 'git show' เป็นคำสั่งอื่นที่แสดงความมุ่งมั่นและในทางเทคนิคแล้วไม่มีอะไรจะหยุดคุณที่มีสาขาที่เรียกว่า 'ต้นกำเนิด' นอกเหนือจากการมีต้นกำเนิดที่เรียกว่าระยะไกล ...
Jason Malinowski


24

! ง่าย "origin" เป็นเพียงชื่อเล่นรีโมตของคุณเมื่อคุณรันคำสั่งดังนี้:

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git

ตั้งแต่นั้นมา Git รู้ว่า "จุดเริ่มต้น" ชี้ไปยังที่เก็บเฉพาะนั้น (ในกรณีนี้คือที่เก็บ GitHub) คุณสามารถตั้งชื่อมันว่า "gitHub" หรือ "repo" หรืออะไรก็ได้ที่คุณต้องการ


19

ฉันก็สับสนกับเรื่องนี้และด้านล่างคือสิ่งที่ฉันได้เรียนรู้

เมื่อคุณโคลนที่เก็บตัวอย่างเช่นจาก GitHub:

  • originเป็นนามแฝงสำหรับ URL ที่คุณโคลนที่เก็บ โปรดทราบว่าคุณสามารถเปลี่ยนนามแฝงนี้

  • มีหนึ่งmasterสาขาในที่เก็บระยะไกล (นามแฝงโดยorigin) นอกจากนี้ยังมีmasterสาขาอื่นที่สร้างขึ้นในเครื่อง

สามารถดูข้อมูลเพิ่มเติมได้จากคำถาม SO นี้: การแยกสาขา Git: master vs. origin / master เทียบกับ remotes / origin / master


11

เมื่อคุณโคลนที่เก็บข้อมูลด้วยgit cloneมันจะสร้างการเชื่อมต่อระยะไกลที่เรียกว่าoriginชี้ไปที่ที่เก็บโคลนโดยอัตโนมัติ สิ่งนี้มีประโยชน์สำหรับนักพัฒนาที่สร้างสำเนาโลคัลของที่เก็บส่วนกลางเนื่องจากเป็นวิธีที่ง่ายในการดึงการเปลี่ยนแปลงในระดับต้นหรือเผยแพร่การมอบหมายในพื้นที่ พฤติกรรมนี้ก็เป็นสาเหตุที่โปรเจคที่ใช้ Git ส่วนใหญ่เรียกที่มาของที่เก็บส่วนกลาง


3

คำตอบที่ดีที่สุดที่นี่:

https://www.git-tower.com/learn/git/glossary/origin

ใน Git "origin" เป็นชื่อชวเลขสำหรับที่เก็บระยะไกลที่โครงการถูกโคลนตั้งแต่แรก แม่นยำยิ่งขึ้นมันถูกใช้แทน URL ของที่เก็บต้นฉบับ - และทำให้การอ้างอิงง่ายขึ้นมาก


0

จากhttps://www.git-tower.com/learn/git/glossary/origin :

ใน Git "origin" เป็นชื่อชวเลขสำหรับที่เก็บระยะไกลที่โครงการถูกโคลนตั้งแต่แรก แม่นยำยิ่งขึ้นมันถูกใช้แทน URL ของที่เก็บต้นฉบับ - และทำให้การอ้างอิงง่ายขึ้นมาก

โปรดทราบว่าต้นกำเนิดนั้นไม่ได้หมายถึงชื่อ "วิเศษ" แต่เป็นแบบแผนมาตรฐาน แม้ว่ามันจะเหมาะสมที่จะออกจากการประชุมนี้ไม่มีใครแตะต้องคุณสามารถเปลี่ยนชื่อได้อย่างสมบูรณ์แบบโดยไม่สูญเสียฟังก์ชันการทำงานใด ๆ

ในตัวอย่างต่อไปนี้พารามิเตอร์ URL ของคำสั่ง "clone" กลายเป็น "ต้นทาง" สำหรับที่เก็บโลคัลโคลน:

git clone https://github.com/gittower/git-crash-course.git

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

0

คำตอบอื่น ๆ บอกว่าoriginเป็นนามแฝงสำหรับURLของที่เก็บระยะไกลซึ่งไม่ถูกต้องทั้งหมด ควรสังเกตว่าที่อยู่ที่ขึ้นต้นด้วยhttpเป็น URL ในขณะที่ที่ขึ้นต้นด้วยgit@คือURIหรือ Universal Resource Identifier

URL ทั้งหมดเป็น URIs แต่ไม่ใช่ URIs ทั้งหมดที่เป็น URL

กล่าวโดยย่อเมื่อคุณพิมพ์git remote add origin <URI>คุณกำลังบอกคอมไพล์ท้องถิ่นของคุณว่าเมื่อใดก็ตามที่คุณใช้คำว่าoriginคุณหมายถึง URI ที่คุณระบุ คิดว่ามันเหมือนตัวแปรถือค่า

และเช่นเดียวกับตัวแปรที่คุณสามารถตั้งชื่อสิ่งที่คุณต้องการ (เช่น. github, heroku, destinationฯลฯ )


0

ระยะไกล (นามแฝงของที่เก็บ url) → แหล่งกำเนิด (นามแฝงต้นน้ำ) → ต้นแบบ (นามแฝงสาขา);

  • remoteระดับเดียวกับworking directory, index, repository,

  • origin, แม็พสาขาที่เก็บโลคัลไปยังสาขาที่เก็บแบบรีโมต

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