গিটারের সাথে চেরি-বাছাইয়ের অর্থ কি?


2334

সম্প্রতি, আমাকে cherry-pickএকটি অঙ্গীকার করতে বলা হয়েছে ।

সুতরাং চেরি-বাছাই মানে কি গিট প্রতিশ্রুতিবদ্ধ? তুমি এটা কিভাবে কর?


13
মার্জ পরিবর্তে, চেরি-বাছাইয়ের সাথে একটি শাখা থেকে লক্ষ্য শাখায় (যেমন: মাস্টার) পুনরায় কমিট করা আরও সহজ easier
লেভেন্ট ডিভিলিওগ্লু

উত্তর:


2854

গিটে চেরি তোলা মানে একটি শাখা থেকে কমিট বেছে নেওয়া এবং অন্যটিতে প্রয়োগ করা।

এটি অন্য উপায়গুলির সাথে বিপরীত যেমন mergeএবং rebaseযা সাধারণত অন্য শাখায় অনেকগুলি প্রয়োগ করে apply

  1. আপনি যে শাখায় দায়বদ্ধতা প্রয়োগ করতে চান সেটিতে আপনি রয়েছেন তা নিশ্চিত করুন।

    git checkout master
    
  2. নিম্নলিখিতটি কার্যকর করুন:

    git cherry-pick <commit-hash>
    

বিশেষ দ্রষ্টব্য:

  1. আপনি যদি কোনও সরকারী শাখা থেকে চেরি-বাছাই করেন তবে আপনার ব্যবহারটি বিবেচনা করা উচিত

    git cherry-pick -x <commit-hash>
    

    এটি একটি স্ট্যান্ডার্ডাইজড কমিট বার্তা উত্পন্ন করবে। এইভাবে, আপনি (এবং আপনার সহকর্মীরা) এখনও প্রতিশ্রুতিবদ্ধতার উত্সের উপর নজর রাখতে পারেন এবং ভবিষ্যতে মার্জ সংঘাতগুলি এড়াতে পারেন।

  2. আপনার যদি কমিটের সাথে সংযুক্ত নোটগুলি থাকে তবে তারা চেরি-পিক অনুসরণ করে না। এগুলি পাশাপাশি আনতে আপনাকে ব্যবহার করতে হবে:

    git notes copy <from> <to>
    

অতিরিক্ত লিঙ্ক:


246
আপনি যদি কোনও সরকারী শাখা থেকে চেরি-বাছাই করেন তবে আপনার ব্যবহারটি বিবেচনা করা উচিত git cherry-pick -x <commit-hash>। এটি একটি স্ট্যান্ডার্ডাইজড কমিট বার্তা উত্পন্ন করবে। এইভাবে, আপনি (এবং আপনার সহকর্মীরা) এখনও প্রতিশ্রুতিবদ্ধতার উত্সের উপর নজর রাখতে পারেন এবং ভবিষ্যতে মার্জ সংঘাতগুলি এড়াতে পারেন।
এমবিবর

2
চেরি বাছাই করা কি সত্যিই প্রয়োজনীয়? কোনও মিশ্র পুনরায় সেট বা কোনও সফট রিসেট একই ধরণের কাজ করবে না?
নাভ

10
মনে রাখবেন যে আপনার যদি কমিটের সাথে সংযুক্ত নোটগুলি থাকে তবে তারা চেরি-পিক অনুসরণ করে না। git notes copy <from> <to>এগুলি এনে দেওয়ার জন্য আপনাকেও ব্যবহার করতে হবে।
জিতরেক্স

5
গিট পুশ মাস্টারের পরিবর্তন আনার শেষ পদক্ষেপ
ভাল লাগবে এবং

58
এফওয়াইআই: একটি প্রতিশ্রুতি সিন্থেটিকভাবে সেই মুহুর্তের কার্যক্ষম গাছের সমস্ত ফাইল (এবং পূর্ববর্তী প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতি হ্যাশ) ধারণ করে, সুতরাং আপনি অন্য প্রতিশ্রুতিতে একটি সম্পূর্ণ প্রতিশ্রুতি প্রয়োগ করছেন না, তবে পূর্বের প্রতিশ্রুতিতে যে পরিবর্তনগুলি হয়েছে তা "cherry-pick commit applies the changes introduced by the named commit on the current branch"সর্বাধিক পিপিএল প্রতিশ্রুতিবদ্ধতা হিসাবে পরিবর্তনগুলি ভাবায় (যেমন এসএনএন আইআরসি ছিল), তবে এটি নয়, প্রতিটি প্রতিশ্রুতি সম্পূর্ণ কার্যকারী গাছকে বোঝায়। যদিও এটি এই ক্ষেত্রে কোনও পার্থক্য রাখে না, এটি গিটটি কেন এটির মতো কাজ করে তা বুঝতে সহায়তা করতে পারে।
এমিল ভ্রিজডাগস

314

এই উদ্ধৃতিটি নেওয়া হয়েছে; গিট সহ সংস্করণ নিয়ন্ত্রণ (সত্যিই দুর্দান্ত বই, আপনি গিটে আগ্রহী হলে এটি কিনতে উত্সাহিত করি)

সম্পাদনা: যেহেতু এই উত্তরটি এখনও ইমপ্রেশন পাচ্ছে, তাই আমি এটি সম্পর্কে অ্যাকশন ভিডিও টিউটোরিয়ালে খুব সুন্দর যুক্ত করতে চাই:

ইউটিউব: গিট চেরি-পিকের পরিচিতি

গিট চেরি-পিক ব্যবহার করে কমান্ড গিট চেরি-পিক কমিট বর্তমান শাখায় নামযুক্ত কমিট দ্বারা প্রবর্তিত পরিবর্তনগুলি প্রয়োগ করে। এটি একটি নতুন, স্বতন্ত্র প্রতিশ্রুতি প্রবর্তন করবে। কঠোরভাবে বলতে গেলে, গিট চেরি-পিক ব্যবহার করে কোনও ইতিহাসের মধ্যে বিদ্যমান ইতিহাসের পরিবর্তন হয় না; পরিবর্তে, এটি ইতিহাসে যুক্ত করে। অন্যান্য গিট অপারেশনগুলির মতো যা কোনও ডিফ প্রয়োগের প্রক্রিয়াটির মাধ্যমে পরিবর্তনের সূচনা করে, প্রদত্ত প্রতিশ্রুতি থেকে পরিবর্তনগুলি পুরোপুরি প্রয়োগ করতে আপনার দ্বন্দ্ব সমাধানের প্রয়োজন হতে পারে । গিট চেরি-পিক কমান্ডটি সাধারণত কোনও শাখা থেকে আলাদা শাখায় একটি শাখা থেকে নির্দিষ্ট কমিটগুলি প্রবর্তন করতে ব্যবহৃত হয়। একটি সাধারণ ব্যবহার হ'ল ফরোয়ার্ড করা - বা ব্যাক-পোর্ট একটি রক্ষণাবেক্ষণ শাখা থেকে একটি উন্নয়ন শাখায় অঙ্গীকার করে।

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above

আগে: আগে

পরে: পরে


12
যখন চেরি-বাছাই করা কমিটগুলি কিছু শাখায় নেওয়া হয় (বি 1) এবং পরে মাস্টারকে দেওয়া হয়। এবং যদি শাখা বি 1 (যেখান থেকে কমিটগুলি মূলত বাছাই করা হয়েছিল) এছাড়াও মাস্টারকে সরবরাহ করার চেষ্টা করা হয়। বিবাদ সম্পর্কে কীভাবে? এটি কি যত্ন নেওয়া হয় বা এটি কীভাবে কাজ করে?
পরশ্রিশ

3
@ পরিশ্রিশ হ্যাঁ, তারা আপনার আগের মার্জগুলির সাথে ইতিমধ্যে যত্ন নেওয়া হয়েছে। সুতরাং আপনি (বি 1) শাখা থেকে a, b, c, d পরিবর্তন করেছেন। আপনি চেরি কেবল "সি" বেছে নিয়েছেন। তারপরে ভবিষ্যতে একবার আপনি (খ 1) থেকে মাস্টার হিসাবে মার্জ হয়ে যান, যেহেতু "গ" পরিবর্তনগুলি একই রকম হয়, এটি কেবলমাত্র, বি, ডি এবং "সি" পরিবর্তনগুলিকে একীভূত করবে। তবে আপনি যদি নিজের মার্জটি রোলব্যাক করেন তবে আপনি এতে "সি" দিয়ে পরিবর্তনগুলি ফিরে যেতে পারবেন। এগুলি আবার আলাদা করে রোল করতে হবে।
তেওমান শিপহি

12
এটি জোর দেওয়া উচিত: উদাহরণ হিসাবে দেওয়া হিসাবে, শুধুমাত্র পার্থক্য (F - E) জেড প্রয়োগ করা হয় That এটি একটি সংকীর্ণ ক্ষেত্রে। চেরি-পিক একাধিক কমিটের পার্থক্য প্রয়োগ করতে ব্যবহৃত হতে পারে, বলুন, দুটি অ-সংলগ্ন কমিটের মধ্যে সমস্ত পার্থক্য রয়েছে। উদাহরণস্বরূপ, উপরে থেকে অনুসরণ করা, (এফ - ই), (ই - ডি), (ডি - সি), এবং (সি - বি)। এটি পার্থক্য প্রয়োগ করার সমান (এফ - বি)।
টমাস বিটোন্টি

2
এছাড়াও, যদি নির্বাচিত কমিটির (উদাহরণে এফ) একাধিক তাত্ক্ষণিক পূর্বসূরি থাকে তবে কী হবে?
টমাস বিটোন্টি

2
@ j2emanue অন্য কথায়, চেরি-পিক কেবল শেষ-প্রতিশ্রুতি পরিবর্তন করবে। যদি আপনি 3 টি বিভিন্ন সময় প্রতিশ্রুতিবদ্ধ হন এবং আপনি চেরি শেষটি চয়ন করেন তবে এটি প্রথম এবং দ্বিতীয় প্রতিশ্রুতিতে পরিবর্তন নেবে না। মার্জ কমান্ড আপনার সমস্ত পরিবর্তনগুলি গ্রহণ করবে এবং আপনার লক্ষ্য (মাস্টার) শাখায় প্রয়োগ করবে।
তেওমান শিপাহি

157

গিটে চেরি পিকিং একটি শাখা থেকে অন্য শাখায় কিছু প্রতিশ্রুতি প্রয়োগ করার জন্য ডিজাইন করা হয়েছে। এটি করা যেতে পারে যদি আপনি উদাহরণস্বরূপ। একটি ভুল করেছেন এবং ভুল শাখায় পরিবর্তনের প্রতিশ্রুতিবদ্ধ করেছেন, তবে পুরো শাখাকে একীভূত করতে চান না। আপনি ঠিক যেমন করতে পারেন। প্রতিশ্রুতি ফিরিয়ে দিন এবং চেরি-এটিকে অন্য একটি শাখায় তুলে নিন।

এটি ব্যবহার করতে, আপনার কেবল প্রয়োজন git cherry-pick hash, hashঅন্য শাখা থেকে কমিট হ্যাশ is

সম্পূর্ণ পদ্ধতির জন্য দেখুন: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patch-across-bunchches.html


96

অবস্থার সংক্ষিপ্ত উদাহরণ, যখন আপনার চেরি বাছাই দরকার

নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন। আপনার দুটি শাখা আছে।

ক) রিলিজ 1 - এই শাখাটি আপনার গ্রাহকের কাছে যাচ্ছে, তবে এখনও কিছু বাগ ঠিক করা আছে।

খ) মাস্টার - ক্লাসিক মাস্টার শাখা, যেখানে আপনি উদাহরণস্বরূপ মুক্তির জন্য কার্যকারিতা যুক্ত করতে পারেন।

এখন : আপনি রিলিজ 1 এ কিছু ঠিক করেছেন । অবশ্যই আপনি মাস্টার মধ্যে এই ঠিক করা প্রয়োজন । এবং এটি চেরি বাছাইয়ের জন্য সাধারণ ব্যবহারের ক্ষেত্রে। সুতরাং এই দৃশ্যে চেরি পিক করার অর্থ হল যে আপনি রিলিজ 1 শাখা থেকে একটি প্রতিশ্রুতি নেন এবং এটি মাস্টার শাখায় অন্তর্ভুক্ত করেন ।


3
আপনার অন্য উপায়ে দরকার হতে পারে। আপনি মাস্টারে একটি বাগ স্থির করেছেন এবং আপনাকে চেরিটি বেছে নিতে হবে রিলিজ 1 এ। এছাড়াও এগুলি শাখাগুলির পরিবর্তে সংগ্রহস্থল হতে পারে
ক্যানব্যাক্স

1
কেন এটির জন্য মার্জ ব্যবহার করবেন না?
ফ্রিলাইটম্যান

আমি করব: মুক্ত শাখাটি তৈরি করব, শাখায় এটি ঠিক করুন, মুক্তির সাথে শাখাটি মার্জ করুন, মাস্টারটিতে রিলিজ করুন merge
জ্যাস্পার-এম

57

চেরি-পিক একটি গিট বৈশিষ্ট্য। যদি কেউ একটি শাখায় একটি নির্দিষ্ট শাখায় নির্দিষ্ট অঙ্গীকারবদ্ধ করতে চায় তবে চেরি-পিক ব্যবহার করা হয়।
গিট চেরি-পিক পদক্ষেপ নীচের মত রয়েছে।

  1. চেকআউট (স্যুইচ করুন) লক্ষ্য শাখা।
  2. git cherry-pick <commit id>
    

    এখানে কমিট আইডি হ'ল অন্য শাখার ক্রিয়াকলাপ আইডি g

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. লক্ষ্য শাখা লক্ষ্য

পরিদর্শন https://git-scm.com/docs/git-cherry-pick


43

চেরি-পিক কী করে তা আমি ধাপে ধাপে চিত্রগুলি প্রস্তুত করেছি - এবং এই চিত্রগুলির একটি অ্যানিমেশন (শেষের দিকে)।

  1. চেরি তোলার আগে
    (আমরা শাখা থেকে কমিটের চেরি-বাছাই করতে যাচ্ছি ): Lfeatureএখানে চিত্র বর্ণনা লিখুন

  1. কমান্ডটি শুরু করা git cherry-pick feature~2
    ( feature~2এটি আগে 2 তম কমিট
    feature, অর্থাৎ কমিট L): এখানে চিত্র বর্ণনা লিখুন

  1. কমান্ডটি সম্পাদন করার পরে ( git cherry-pick feature~2): এখানে চিত্র বর্ণনা লিখুন

একই অ্যানিমেটেড: এখানে চিত্র বর্ণনা লিখুন


বিঃদ্রঃ:

কমিট L'হয় (কমিট = স্ন্যাপশট) দেখুন ব্যবহারকারীর বিন্দু থেকে কমিট সঠিক কপি L

প্রযুক্তিগতভাবে (অভ্যন্তরীণভাবে), এটি একটি নতুন, পৃথক প্রতিশ্রুতি (কারণ যেমন Lএকটি পয়েন্টার K(যার পিতামাতা হিসাবে L'রয়েছে ), যেখানে এতে একটি পয়েন্টার রয়েছে E)।


এর অর্থ কী, এল 'শাখা মাস্টারে এন -> এম -> এল হবে? বা এটি মাস্টার শাখায় একচেটিয়াভাবে প্রতিশ্রুতিবদ্ধ এল আনবে
প্রিয়ঙ্ক ঠাক্কর

1
@ প্রিয়ঙ্কঠাকর, হ্যাঁ, একচেটিয়াভাবে এল , আর কিছুই নয় (যেমন আপনি ছবি / অ্যানিমেশন থেকে দেখতে পাচ্ছেন)।
মারিয়ানড

22

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

rebaseএকটি প্রতিশ্রুতি নেয় যার পিতা বা মাতা এক্স থাকে এবং সেই প্রতিশ্রুতি পুনরায় জেনারেট করে যেমন এটির সত্যই পিতামাতার ওয়াই ছিল এবং এটি ঠিক কী এটি cherry-pickকরে।

চেরি পিকটি আপনি কীভাবে কমিটগুলি নির্বাচন করবেন সে সম্পর্কে আরও বেশি। সঙ্গে pull(রি-বেসের ফলে), Git পরোক্ষভাবে আপনার শাখায় টানা হচ্ছে উপরে আপনার স্থানীয় করে পুণরায় কিন্তু সঙ্গে cherry-pickআপনি স্পষ্টভাবে কিছু কমিট (গুলি) চয়ন করুন এবং পরোক্ষভাবে আপনার বর্তমান শাখা উপরের তে এটি (তাদের) পুনরায় নির্মাণ।

সুতরাং আপনি যেভাবে এটি করেন তার থেকে পৃথক হয় তবে হুডের নীচে এগুলি খুব অনুরূপ ক্রিয়াকলাপ comm কমিটগুলির পুনর্জন্ম।


1
আমি এটি জিনিসগুলির বেশ সহায়ক দর্শন বলে মনে করি। এটি সূচিত cherry-pickকরে যখন লক্ষ্য শাখাটি পরে উত্স শাখায় ফেরত দেওয়া হয় তখন কেন এটির মতো আচরণ করে। ধন্যবাদ জনাব.
আলুয়ান হাদাদ 14

3
আমি কোনও বৈশিষ্ট্য শেষ হওয়ার পরে গিট সংশ্লেষের পরিবর্তে চেরি পিক ব্যবহার করতে চাই। যখনই কোনও বৈশিষ্ট্যটি সমাপ্ত হয় তখন প্রত্যেকে সর্বদা গিট মার্জ বৈশিষ্ট্য_ব্রাঞ্চ করে। চেরি-পিক কমান্ড ব্যবহার করবেন না কেন? আপনার কিছু চিন্তা আছে? কেন আমি চেরি-বাছাই করতে পারি যদি স্কোয়াশিং
কমিটকে

11

এটি একধরনের অনুলিপি (কোথাও থেকে) এবং আটকানো (কোথাও), তবে নির্দিষ্ট কমিটের জন্য।

উদাহরণস্বরূপ, আপনি যদি কোনও হট ফিক্স করতে চান তবে আপনি cherry-pickবৈশিষ্ট্যটি ব্যবহার করতে পারেন ।

আপনার cherry-pickএকটি উন্নয়ন শাখায় করুন, এবং mergeএটি একটি রিলিজ শাখায় প্রতিশ্রুতিবদ্ধ। তেমনি, cherry-pickমুক্তির শাখা থেকে মাস্টার করার জন্য একটি করুন। voila


11

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

চেরি বাছাইয়ের জন্য একটি দুর্দান্ত নিবন্ধ পাওয়া গেছে, গভীরতার জন্য বিশদ বিবরণের জন্য এটি পরীক্ষা করে দেখুন: https://www.preLivenext.com.au/blog/intro-cherry-picking-git


7

আপনি যদি কমিটস আইডি ব্যতীত মার্জ করতে চান তবে আপনি এই আদেশটি ব্যবহার করতে পারেন

git cherry-pick master~2 master~0

উপরের কমান্ডটি মাস্টার থেকে সর্বশেষ তিনটি কমিটকে 1 থেকে 3 পর্যন্ত একীভূত করবে

আপনি যদি একক প্রতিশ্রুতিবদ্ধতার জন্য এটি করতে চান তবে কেবল সর্বশেষ বিকল্পটি সরিয়ে দিন

git cherry-pick master~2

এইভাবে আপনি মাস্টার শেষ থেকে 3 য় প্রতিশ্রুতি একীভূত করবেন।


এটা সন্দ্বিহান. আমার মনে হয় আপনি এখানে মাস্টার ব্যতীত অন্য কোন শাখায় আছেন? এবং যখন আপনি দুটি কমিটের কথা বলেছেন তখন আপনি <from> এবং <to> কে চেরি-বাছাই করতে চান এমন রেঞ্জটি নির্ধারণ করতে প্রতিশ্রুতি দিচ্ছেন। সঠিক? পরিস্থিতি বর্ণিত হলে এটি ব্যাপকভাবে সহায়তা করবে। ভাল সংযোজন যদিও। ধন্যবাদ।
সৌরভ পাতিল

6

এটি আপনার বর্তমান শাখায় একটি বিশেষ প্রতিশ্রুতি প্রয়োগ করবে।

এর অর্থ:

  • এই প্রতিশ্রুতি দ্বারা যুক্ত সমস্ত ফাইল যুক্ত করা হবে
  • এই প্রতিশ্রুতি দ্বারা মোছা সমস্ত ফাইল মুছে ফেলা হবে
  • এই প্রতিশ্রুতি দ্বারা সংশোধিত সমস্ত ফাইল মার্জ করা হবে। এর অর্থ কমিট থেকে পুরো ফাইল , কেবল এই কমিট থেকে পরিবর্তনগুলিও নয় !

প্রাক্তন: কমিট এ বিবেচনা করুন

added newFileA
modified main:
+ import './newFileA'

কমিট বি

added newFileB
modified main:
+ import './newFileB'

আপনি যদি চেরি-বাছাই করে অন্য কোনও শাখায় বি প্রতিশ্রুতিবদ্ধ হন তবে আপনি এতে শেষ করবেন:

/newFileB
/main :
   import './newFileA'
   import './newFileB'

যেহেতু কমিট বিতে নতুন ফাইলবিল এবং প্রধান রয়েছে তবে কোনও নতুন ফাইলএইস নেই যার ফলে একটি বাগ রয়েছে, তাই সাবধানতার সাথে ব্যবহার করুন।


0

সরকারী দস্তাবেজগুলির অংশ:

এক বা একাধিক বিদ্যমান প্রতিশ্রুতি দেওয়া, প্রত্যেকে পরিচয় করা পরিবর্তনটি প্রয়োগ করুন এবং প্রতিটিটির জন্য একটি নতুন প্রতিশ্রুতি রেকর্ড করুন। এর জন্য আপনার কার্যনির্বাহী গাছটি পরিষ্কার হওয়া দরকার (হেড কমিট থেকে কোনও পরিবর্তন হয়নি)।

কীভাবে পরিবর্তনটি প্রয়োগ করা যায় তা স্পষ্ট না হলে নিম্নলিখিতটি ঘটে:

  1. বর্তমান শাখা এবং হেড পয়েন্টার সফলভাবে করা শেষ প্রতিশ্রুতিতে থাকে stay

  2. CHERRY_PICK_HEAD রেফিট প্রয়োগ করা কঠিন যে পরিবর্তনটি প্রবর্তন করেছিল সেই প্রতিশ্রুতিতে নির্দেশ করতে প্রস্তুত।

  3. পরিবর্তনগুলি পরিষ্কারভাবে প্রয়োগ করা পথগুলি সূচক ফাইল এবং আপনার কার্যকারী গাছের মধ্যে উভয়ই আপডেট করা হয়।

  4. বিবাদমান পাথের জন্য, গিট-সংশ্লেষের "সত্য মার্জ" বিভাগে বর্ণিত হিসাবে সূচক ফাইলটি তিনটি সংস্করণ পর্যন্ত রেকর্ড করে। কার্যকারী ট্রি ফাইলগুলিতে <<<<<<<< এবং >>>>>>> সাধারণ সংঘাত চিহ্নিতকারীদের দ্বারা বন্ধনীযুক্ত বিরোধের বিবরণ অন্তর্ভুক্ত থাকবে।

অন্য কোন পরিবর্তন করা হয় না।

আরও পড়ুন ...

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