Evet, 100k ebeveyni nasıl?
: İşte 100k kaydedilmesini bir birleştirme ile canlı GitHub örnektir https://github.com/cirosantilli/test-octopus-100k Oluşturulan bu komut dosyası ile .
önemsiz şeyler
Linus, 60'tan fazla ebeveyni olan işlerden hoşlanmaz: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history
Çekilmiş ve sorun yok, ancak açıkça "ahtapot birleşmeleri iyidir" ve "Mesih, bu bir ahtapot değil, bu bir Cthulhu birleşmesi" arasında bir denge var.
Git commit nesnesi formatına bir göz atın
https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460
Bu analizden, ebeveynler listesinin keyfi bir yeni satır ayrılmış tür listesi olduğunu görebiliriz:
parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}
ve böylece keyfi sayıda ebeveyn izin verilir.
Minimal örnek
Senaryo:
#!/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"
Çıktı:
*-. 2d2a6c2 (HEAD -> master) merge
|\ \
| | * 2300c18 2
| * | 7e096cb 1
| |/
* | 50aa125 3
|/
* a1e94fd root