ใช่แล้วผู้ปกครองประมาณ 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