ใน Git อะไรคือความแตกต่างระหว่างต้นฉบับ / ต้นแบบกับต้นแบบต้นฉบับ?


290

ฉันรู้ว่าต้นกำเนิดเป็นคำศัพท์สำหรับพื้นที่เก็บข้อมูลระยะไกลและต้นแบบเป็นสาขาที่นั่น

ฉันตั้งใจละเว้น "บริบท" ที่นี่และฉันหวังว่าคำตอบไม่ควรขึ้นอยู่กับบริบท ดังนั้นในบรรทัดคำสั่ง git ความแตกต่างระหว่างOrigin / MasterและOrigin masterคืออะไร มีวิธีที่ไม่ชัดเจนที่จะเข้าใจว่าจะใช้Origin / Masterเมื่อใดและควรใช้Origin Masterหรือไม่?


คำตอบ:


392

ที่นี่มีสามสิ่งจริง ๆ : origin masterเป็นสองสิ่งแยกกันและorigin/masterเป็นสิ่งหนึ่ง รวมสามสิ่ง

สองสาขา:

  • master เป็นสาขาท้องถิ่น
  • origin/masterเป็นสาขารีโมต (ซึ่งเป็นสำเนาโลคัลของสาขาที่ชื่อ "master" บนรีโมตชื่อ "origin")

หนึ่งรีโมท:

  • origin เป็นรีโมท

ตัวอย่าง: ดึงสองขั้นตอน

เนื่องจากorigin/masterเป็นสาขาคุณสามารถรวมได้ ต่อไปนี้เป็นขั้นตอนสองขั้นตอน:

ขั้นตอนที่หนึ่ง, ดึงข้อมูลจากระยะไกลmaster สาขาจะเป็นความจริงและสำเนาจะถูกตั้งชื่อoriginmasteroriginorigin/master

git fetch origin master

จากนั้นคุณผสานเข้าorigin/mastermaster

git merge origin/master

จากนั้นคุณสามารถผลักดันการเปลี่ยนแปลงใหม่masterกลับไปที่origin:

git push origin master

ตัวอย่างเพิ่มเติม

คุณสามารถดึงหลายสาขาตามชื่อ ...

git fetch origin master stable oldstable

คุณสามารถรวมหลายสาขา ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290

5
ส่วนแรกมีประโยชน์จริง ๆ ฉันไม่สามารถเชื่อมต่อว่ามีตัวอย่างเพิ่มเติมอย่างไรโดยเฉพาะอย่างยิ่งการผสานที่ใช้งานได้ ขอบคุณสำหรับคำตอบ.
Senthil Kumaran

1
... เพราะเมื่อฉัน "ต้นกำเนิดการชำระเงิน git / master" ฉันเข้าสู่สถานะผู้นำเดี่ยว หากฉันมีสำเนาของสาขาต้นแบบระยะไกลในพื้นที่ทำไมฉันไม่สามารถทำงานและส่งและเพิ่มเข้าไปได้ หรือบางทีฉันสามารถทำได้ แต่ทำไมมันถึงแยกออก
stu

3
คุณสามารถกระทำได้เฉพาะสาขาในพื้นที่เท่านั้นดังนั้นเมื่อคุณตรวจสอบสาขาระยะไกลคุณจะได้รับ "หัวหน้าส่วน" แน่นอนมันเป็นสำเนาของสาขาระยะไกลในท้องถิ่น แต่ยังคงเป็นสาขาระยะไกล ไม่มีกฎว่า "ต้นแบบ" เกี่ยวข้องกับ "จุดเริ่มต้น / หลัก" เลยพวกเขาอาจแตกต่างอย่างสิ้นเชิง
Dietrich Epp

7
@ Jwan622 "origin เป็น remote" ... "origin" เป็นเพียงชื่อคุณสามารถเลือกชื่อใด ๆ สำหรับรีโมท แต่ "origin" เป็นชื่อเริ่มต้น ระยะไกลเป็นพื้นที่เก็บข้อมูลที่อื่น อาจเป็น GitHub หรืออาจเป็นคอมพิวเตอร์เครื่องอื่นหรืออาจเป็นที่อื่นในคอมพิวเตอร์เครื่องเดียวกันก็ได้
Dietrich Epp

2
@ Jwan622: "git remote add" เป็นคำสั่งที่สร้างรีโมตใหม่ "origin" เป็นชื่อที่เพิ่มระยะไกล เนื่องจาก "ต้นกำเนิด" เป็นเพียงชื่อคุณสามารถเลือกชื่ออื่นได้หากต้องการ ตัวอย่างเช่นgit remote add home my-server:projects/my-projectเพิ่มรีโมตชื่อ "home" คุณอาจต้องการอ้างถึงเอกสาร: git-scm.com/docs/git-remote
Dietrich Epp

16

origin/masterเป็นนิติบุคคล (เพราะมันไม่ได้เป็นสาขากายภาพ) ที่เป็นตัวแทนของรัฐของสาขาในระยะไกลmasterorigin

origin masterเป็นสาขาในระยะไกลmasterorigin

ดังนั้นเราจึงมีสิ่งเหล่านี้:

  • ต้นกำเนิด / ต้นแบบ (การแสดงหรือตัวชี้ไปยังสาขาระยะไกล)
  • ต้นแบบ - ( สาขาจริง )
  • <Your_local_branch> ( สาขาจริง )
  • <Your_local_branch2> ( สาขาจริง )
  • <Your_local_branch3> ( สาขาจริง )

ตัวอย่าง (ในสาขาท้องถิ่นmaster):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master

24
สิ่งนี้ไม่ถูกต้อง ... origin masterไม่ใช่สาขา ... อันที่จริงมันเป็นสองสิ่งที่แยกจากกัน "ต้นกำเนิด" (ระยะไกล) และ "ต้นแบบ" (สาขาท้องถิ่น)
Dietrich Epp

สถานะของสาขาต้นแบบระยะไกลมีอยู่ในเครื่องใช่ไหม
Senthil Kumaran

4
ใช่นี้ไม่ถูกต้องorigin/masterเป็นสาขาต้นแบบระยะไกล สาขาในพื้นที่เป็นเพียงต้นแบบ
Aniket Thakur

5

origin/masterเป็นmasterสาขาระยะไกล

โดยปกติหลังจากทำgit fetch originเพื่อนำการเปลี่ยนแปลงทั้งหมดจากเซิร์ฟเวอร์คุณจะทำgit rebase origin/masterเพื่อรีบูตการเปลี่ยนแปลงของคุณและย้ายสาขาไปยังดัชนีล่าสุด ที่นี่origin/masterอ้างถึงสาขาระยะไกลเนื่องจากคุณบอกให้ GIT รีบูทorigin/masterสาขาไปยังสาขาปัจจุบัน

คุณจะใช้origin masterเมื่อกดเช่น git push origin masterเพียงแค่บอกให้ GIT กดไปที่ที่เก็บระยะไกลmasterสาขาท้องถิ่น


2
สิ่งนี้ดูเหมือนจะใกล้เคียงกับที่ OP ต้องการมากที่สุด - origin masterกำลังบอกให้ซอฟต์แวร์ทำบางสิ่งกับสิ่งที่อยู่ใน 'master' ในที่เก็บ 'Origin' origin/masterเป็นการอ้างอิงในลักษณะเดียวกันf3a4d5หรือHEADคือ
Nemesarial

4

origin เป็นชื่อสำหรับ url git ระยะไกล สามารถมีตัวอย่างรีโมตได้อีกมากมายด้านล่าง

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

เท่าที่กำเนิด / ต้นแบบ (ตัวอย่างบังกาลอร์ / ต้นแบบ) ไปเป็นตัวชี้ไปที่ "ต้นแบบ" กระทำในเว็บไซต์บังกาลอร์ คุณเห็นมันในโคลนของคุณ

เป็นไปได้ว่าบังกาลอร์ระยะไกลมีความก้าวหน้าเนื่องจากคุณได้ทำการ "ดึงข้อมูล" หรือ "ดึง"


2

ได้รับความจริงที่ว่าคุณสามารถสลับไปorigin/master(แม้ว่าในรัฐเดี่ยว) ในขณะที่มีสายเคเบิลเครือข่ายของคุณถอดมันจะต้องเป็นตัวแทนท้องถิ่นของสาขาที่masterorigin


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