গিট কমিটের কি আরও বেশি বাবা-মা থাকতে পারে?


48

ইন এই ডকুমেন্টেশন এটা উল্লেখ করা হয়

একটি প্রতিশ্রুতিবদ্ধ বস্তুর পিতামাতার সংখ্যা থাকতে পারে।

তবে আমার বোধগম্যতা থেকে, কেবলমাত্র একমাত্র ক্ষেত্রে যেখানে কমিটের 1 টিরও বেশি পিতা-মাতা থাকবে যখন একীভূত হওয়ার ঘটনা ঘটবে এবং সেই ক্ষেত্রে কেবলমাত্র দুটি পিতা-মাতা থাকবে। সুতরাং আমার প্রশ্নটি হল, একটি প্রতিশ্রুতিবদ্ধ ব্যক্তির কি 2 টির বেশি বাবা-মা থাকতে পারে? যদি তাই হয়, কখন?


11
github.com/torvalds/linux/commit/… - আমি মনে করি না যে গিথুব 27-ওয়ে পার্থক্য কীভাবে প্রদর্শন করতে জানে, তবে সংগ্রহস্থলটি ক্লোন করে নির্দ্বিধায় নির্দ্বিধায় অনুভব করতে পারে।
ব্যবহারকারী 253751

উত্তর:


43

আপনি আপনার বর্তমান শাখায় একাধিক প্রতিশ্রুতি একত্রিত করতে গিট মার্জ ব্যবহার করতে পারেন। থেকে man git-merge(অথবা git help merge):

গিট-মার্জ - দুই বা ততোধিক বিকাশের ইতিহাস একসাথে যোগদান করুন

ফলাফলটি যখন আপনি এটি করবেন তখন দুটিরও বেশি পিতামাতার সাথে অঙ্গীকারবদ্ধ হবে।


33
একাধিক শাখার একত্রীকরণ (অর্থাত্ দু'জনের বেশি পিতামাতার সাথে অঙ্গীকার) কথোপকথনে "অক্টোপাস মার্জ" নামে পরিচিত। এটি গিটহাবের লোগো এবং ম্যাসকটের জন্য অনুপ্রেরণার উত্স, আট পাখি বিড়াল: এটি মূলত অক্টোপাস নামে পরিচিত, তবে নামকরণ করা হয়েছিল আরও কর্পোরেট-বান্ধব অক্টোক্যাট।
Jörg ডব্লু মিটাগ

4
একাধিক কমিটের পরিবর্তে একক প্রতিশ্রুতিবদ্ধভাবে তিন বা ততোধিক শাখা মার্জ করার সুবিধা কী কী?
টোর ক্লিংবার্গ

2
@ টরকলিংবার্গ ক্লিনার ইতিহাস, তবে দূরবর্তী সংগ্রহস্থলের দিকে এগিয়ে যাওয়ার আগে চূড়ান্ত পণ্যটি পরীক্ষা করার বিষয়টি নিশ্চিত করুন।
ফেরিবিগ

5
@ কাসুনসিয়াম্বলপিতিয়া - একটি বিশেষ গিথুব রেপোতে একাধিক উদাহরণ রয়েছে । 27 টি পিতা-মাতার সাথে জড়িত সেই রেপোতে অনেকগুলি অক্টোপাসের মধ্যে একটি মিশে যায় ।
ডেভিড হামেন

1
@ জার্গডব্লিউমিত্যাগ আক্ষরিকভাবে এর কোনওটিই সত্য নয়। সূত্র: পাঁচ বছর গিটহাবে কাজ করেছেন।
gjtorikian

5

হ্যাঁ, 100k বাবা-মা কেমন আছেন?

100 কে কমিটের একীভূতকরণের সাথে এখানে একটি লাইভ গিটহাব উদাহরণ রয়েছে: https://github.com/cirosantilli/test-octopus-100k এই স্ক্রিপ্টটি দিয়ে তৈরি করা হয়েছে

তুচ্ছ বস্তু

লিনাস 60 টিরও বেশি পিতা-মাতার সাথে চুক্তি পছন্দ করে না: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-Wirdest-commits-in-linux-kernel-git-history

এটি টানছে, এবং এটি ঠিক আছে, তবে "অক্টোপাস মার্জগুলি ভাল আছে" এবং "খ্রিস্ট, এটি কোনও অক্টোপাস নয়, এটি একটি চথুলহু মার্জিন" এর মধ্যে স্পষ্টতই একটি ভারসাম্য রয়েছে।

গিট কমিট অবজেক্টের ফর্ম্যাটটি দেখুন

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

আমি নিশ্চিত নই যে গিটহাব কেবলমাত্র সেই মাত্রার একীভূতকরণ পরিচালনা করতে পারবেন না বা যদি আপনি এটি একটি ব্যক্তিগত সংগ্রহস্থল হিসাবে রেখে এসেছেন। বা যদি গিটহাবের সাথে কেবল কোনও সম্পর্কযুক্ত সমস্যা রয়েছে। তবে নির্বিশেষে, 100 কে মার্জ লিঙ্কটি আমার জন্য 500 ত্রুটি।
বিট্রি

@ 8 বিট্রি এটি পরিচালনা করতে পারে না, প্রাইভেট রেপো 400 :-) গিথুব.com
Ciro

দাড়িযুক্ত স্যান্ডেল পরা এফওএসএসের উকিল এবং লভক্রাফ্টের মধ্যে এই সংযোগটি যা আমি বারবার উত্থাপন করি?
নিউট্রিনো

3

মার্জ করার সময় আপনি একাধিক শাখা নির্দিষ্ট করতে পারেন।

উদাহরণ স্বরূপ:

git merge branch_A branch_B branch_C [...]

তাহলে কমিটমেন্টের আরও বাবা-মা থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.