คอมไพล์สามารถมีผู้ปกครองมากกว่า 2 คนได้หรือไม่?


48

ในเอกสารนี้มีการกล่าวถึง

วัตถุกระทำอาจมีจำนวนผู้ปกครองใด ๆ

แต่จากความเข้าใจของฉันกรณีเดียวที่ความมุ่งมั่นจะมีผู้ปกครองมากกว่า 1 คนคือเมื่อมีการรวมเกิดขึ้นและในกรณีนั้นจะมีผู้ปกครองสองคนเท่านั้น ดังนั้นคำถามของฉันคือความมุ่งมั่นมีผู้ปกครองมากกว่า 2 คนหรือไม่? ถ้าเป็นเช่นนั้นเมื่อไหร่?


11
github.com/torvalds/linux/commit/ … - ฉันไม่คิดว่า Github รู้วิธีแสดงผลแบบ 27 ทาง แต่อย่าลังเลที่จะโคลนพื้นที่เก็บข้อมูลและดูด้วยตัวคุณเอง
user253751

คำตอบ:


43

คุณสามารถใช้คอมไพล์ผสานเพื่อรวมมากกว่าหนึ่งกระทำในสาขาปัจจุบันของคุณ จากman git-merge(หรือgit help merge):

git-merge - เข้าร่วมประวัติศาสตร์การพัฒนาตั้งแต่สองเหตุการณ์ขึ้นไปด้วยกัน

ผลที่ได้จะเกิดขึ้นกับผู้ปกครองมากกว่าสองคนเมื่อคุณทำเช่นนั้น


33
การรวมสาขามากกว่าหนึ่งสาขา (เช่นการกระทำที่มีผู้ปกครองมากกว่าสองคน) เป็นที่รู้จักกันเรียกขานว่า "ปลาหมึกยักษ์ผสาน" นั่นเป็นแหล่งที่มาของแรงบันดาลใจสำหรับโลโก้และมิ่งขวัญของ GitHub แมวแปดขา: แต่เดิมเรียกว่าอ็อคโทปัส แต่เปลี่ยนชื่อเป็นอ็อคโทท
Jörg W Mittag

4
อะไรคือข้อดีของการรวมสาขาสามสาขาขึ้นไปในการคอมมิชชั่นเดียวแทนที่จะเป็นคอมมิชชันชุด?
Tor Klingberg

2
@TorKlingberg Cleaner ประวัติ แต่ให้แน่ใจว่าได้ทดสอบผลิตภัณฑ์สุดท้ายก่อนที่จะผลักดันไปยัง repsitory ระยะไกล
Ferrybig

5
@KasunSiyambalapitiya - มีตัวอย่างหลายในมีrepo GitHub หนึ่งโดยเฉพาะ หนึ่งในการผสานปลาหมึกจำนวนมากใน repo ที่เกี่ยวข้องกับ 27 ผู้ปกครอง
David Hammen

1
@ JörgWMittagแท้จริงแล้วไม่มีสิ่งใดที่เป็นจริง ที่มา: ทำงานที่ GitHub เป็นเวลาห้าปี
gjtorikian

5

ใช่แล้วผู้ปกครองประมาณ 100k ล่ะ?

นี่คือตัวอย่าง GitHub สดที่มีการรวม 100k คอมมิท: https://github.com/cirosantilli/test-octopus-100kสร้างด้วยสคริปต์นี้

เรื่องไม่สำคัญ

Linus ไม่ชอบกระทำกับผู้ปกครองมากกว่า 60 คน: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history

มันดึงมาแล้วและก็โอเค แต่ก็เห็นได้ชัดว่ามีความสมดุลระหว่าง "การรวมกันของปลาหมึกยักษ์นั้นดี" และ "พระคริสต์นั่นไม่ใช่ปลาหมึกยักษ์นั่นคือการผสมผสานของคธูลู"

ดูรูปแบบของ Git commit object

https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460

จากการวิเคราะห์นั้นเราจะเห็นว่ารายการลิสต์ของผู้ปกครองนั้นเป็นลิสต์ของประเภทที่คั่นด้วยบรรทัดใหม่โดยพลการ:

parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}

และอนุญาตให้มีจำนวนผู้ปกครองโดยพลการ

ตัวอย่างที่น้อยที่สุด

สคริปต์:

#!/usr/bin/env bash
set -eu

mkdir tmp
cd tmp
git init

touch root
git add .
git commit -m root
sha_root="$(git log -1 --format="%H")"

touch 1
git add .
git commit -m 1
sha1="$(git log -1 --format="%H")"

git reset --hard "$sha_root"
touch 2
git add .
git commit -m 2
sha2="$(git log -1 --format="%H")"

git reset --hard "$sha_root"
touch 3
git add .
git commit -m 3
sha3="$(git log -1 --format="%H")"

git merge -m merge "$sha1" "$sha2"

เอาท์พุท:

*-.   2d2a6c2 (HEAD -> master) merge
|\ \  
| | * 2300c18 2
| * | 7e096cb 1
| |/  
* | 50aa125 3
|/  
* a1e94fd root

ฉันไม่แน่ใจว่า GitHub ไม่สามารถจัดการกับการรวมของขนาดนั้นหรือถ้าคุณปล่อยให้มันเป็นพื้นที่เก็บข้อมูลส่วนตัว หรือถ้า GitHub กำลังมีปัญหาที่ไม่เกี่ยวข้อง แต่ไม่ว่าการเชื่อมโยงผสาน 100k เป็นข้อผิดพลาด 500 สำหรับฉัน
8bittree

@ 8bittree ไม่สามารถจัดการได้ repo ส่วนตัวจะ 400 :-) github.com/isaacs/github/issues/1344
Ciro Santilli 新疆改造中心中心法轮功六四事件

อะไรคือความเชื่อมโยงระหว่างรองเท้าแตะ FOSS ที่สนับสนุนกับเลิฟคราฟท์ที่ฉันพบเจออยู่บ่อยครั้ง?
Neutrino

3

คุณสามารถระบุมากกว่าหนึ่งสาขาเมื่อรวม

ตัวอย่างเช่น:

git merge branch_A branch_B branch_C [...]

จากนั้นกระทำมีผู้ปกครองมากขึ้น

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