1. নতুনদের জন্য গিট-এর একটি বিস্তারিত নির্দেশিকা

আজ আমরা একটি ভার্সন কন্ট্রোল সিস্টেম সম্পর্কে কথা বলতে যাচ্ছি, নাম গিট।

এই টুলটি না জেনে এবং না বুঝে আপনি সত্যিই একজন পূর্ণাঙ্গ প্রোগ্রামার হতে পারবেন না। অবশ্যই, ক্রমাগত নিযুক্ত হওয়ার জন্য আপনাকে সমস্ত গিট কমান্ড এবং বৈশিষ্ট্যগুলি আপনার মাথায় রাখতে হবে না। আপনাকে কমান্ডের একটি সেট জানতে হবে যা আপনাকে যা ঘটছে তা বুঝতে সাহায্য করবে।

গিট বেসিক

গিট আমাদের কোডের জন্য একটি বিতরণকৃত সংস্করণ নিয়ন্ত্রণ ব্যবস্থা। কেন এটা আমাদের দরকার? দলগুলির তাদের কাজ পরিচালনার জন্য কিছু ধরণের সিস্টেম প্রয়োজন। সময়ের সাথে সাথে ঘটে যাওয়া পরিবর্তনগুলি ট্র্যাক করার জন্য এটি প্রয়োজন।

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

আসুন নিম্নলিখিত পরিস্থিতিটি কল্পনা করি: আমাদের কাজের কোড রয়েছে, এতে সবকিছুই ভাল, তবে তারপরে আমরা কিছু উন্নতি বা পরিবর্তন করার সিদ্ধান্ত নিই। কোন বড় ব্যাপার নয়, কিন্তু আমাদের "উন্নতি" প্রোগ্রামের বৈশিষ্ট্যগুলির অর্ধেক ভেঙে দিয়েছে এবং এটি কাজ করা অসম্ভব করে তুলেছে। তাই এখন কি? গিট ছাড়া, আপনাকে ঘন্টার পর ঘন্টা বসে ভাবতে হবে, মনে করার চেষ্টা করতে হবে যে সবকিছুই আসলে কেমন ছিল। কিন্তু গিট দিয়ে, আমরা শুধু প্রতিশ্রুতি ফিরিয়ে দিই - এবং এটাই।

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

গিট ব্যবহার করলে এ ধরনের কোন সমস্যা হবে না।

গিট ইনস্টল করা হচ্ছে

আপনার কম্পিউটারে জাভা ইন্সটল করা যাক এই প্রক্রিয়াটি বিভিন্ন অপারেটিং সিস্টেমের জন্য কিছুটা আলাদা।

উইন্ডোজে ইনস্টল করা হচ্ছে

যথারীতি, আপনাকে একটি exe ফাইল ডাউনলোড এবং চালাতে হবে। এখানে সবকিছুই সহজ: প্রথম Google লিঙ্কে ক্লিক করুন , ইনস্টল করুন, এবং এটিই। এটি করার জন্য, আমরা উইন্ডোজ দ্বারা প্রদত্ত ব্যাশ কনসোল ব্যবহার করব।

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

এখন এটি একটি কমান্ড প্রম্পট যার সাথে আপনি কাজ করতে পারেন।

সেখানে গিট খুলতে অর্ডার করার জন্য প্রতিবার প্রকল্পের সাথে ফোল্ডারে যাওয়া এড়াতে, আপনি আমাদের প্রয়োজনীয় পথের সাথে ডান মাউস বোতাম দিয়ে প্রকল্প ফোল্ডারে কমান্ড প্রম্পট খুলতে পারেন:

লিনাক্সে ইনস্টল করা হচ্ছে

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

একটি টার্মিনাল খুলুন এবং ইনস্টল করুন। উবুন্টুর জন্য, আপনাকে লিখতে হবে: sudo apt-get install git। এবং এটি হল: এখন আপনি যেকোনো টার্মিনালে গিট ব্যবহার করতে পারেন।

MacOS এ ইনস্টল করা হচ্ছে

এখানেও, আপনাকে প্রথমে গিট আছে কিনা তা পরীক্ষা করতে হবে (উপরে দেখুন, লিনাক্সের মতোই)।

যদি আপনার কাছে এটি না থাকে, তাহলে এটি পাওয়ার সবচেয়ে সহজ উপায় হল সর্বশেষ সংস্করণটি ডাউনলোড করা । যদি Xcode ইনস্টল করা থাকে, তাহলে Git অবশ্যই স্বয়ংক্রিয়ভাবে ইনস্টল হয়ে যাবে।

গিট সেটিংস

Git ব্যবহারকারীর জন্য ব্যবহারকারী সেটিংস আছে যারা কাজ জমা দেবে। এটি বোধগম্য এবং প্রয়োজনীয়, কারণ যখন একটি কমিট তৈরি করা হয় তখন গিট লেখক ক্ষেত্রের জন্য এই তথ্য নেয়।

নিম্নলিখিত কমান্ডগুলি চালিয়ে আপনার সমস্ত প্রকল্পের জন্য একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড সেট আপ করুন:

git config --global user.name "Ivan Ivanov" git config --global user.email ivan.ivanov@gmail.com

আপনি যদি একটি নির্দিষ্ট প্রকল্পের জন্য লেখক পরিবর্তন করতে চান (একটি ব্যক্তিগত প্রকল্পের জন্য, উদাহরণস্বরূপ), আপনি "--গ্লোবাল" অপসারণ করতে পারেন। এটি আমাদের নিম্নলিখিত দেবে:

git config user.name "Ivan Ivanov" git config user.email ivan.ivanov@gmail.com

তত্ত্ব একটি বিট

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

কি শব্দ এবং কর্ম?

  • git সংগ্রহস্থল
  • কমিট
  • শাখা
  • একত্রিত করা
  • দ্বন্দ্ব
  • টান
  • ধাক্কা
  • কিভাবে কিছু ফাইল উপেক্ষা করবেন (.gitignore)

ইত্যাদি।

গিট-এ স্ট্যাটাস

গিটের বেশ কয়েকটি মূর্তি রয়েছে যা বোঝা এবং মনে রাখা দরকার:

  • আনট্র্যাক করা
  • পরিবর্তিত
  • মঞ্চস্থ
  • প্রতিশ্রুতিবদ্ধ

কিভাবে আপনি এই বোঝা উচিত?

এগুলি এমন অবস্থা যা আমাদের কোড ধারণকারী ফাইলগুলিতে প্রযোজ্য। অন্য কথায়, তাদের জীবনচক্র সাধারণত এইরকম দেখায়:

  • একটি ফাইল যা তৈরি করা হয়েছে কিন্তু এখনও সংগ্রহস্থলে যোগ করা হয়নি তার "আনট্র্যাকড" অবস্থা রয়েছে।
  • যখন আমরা ফাইলগুলিতে পরিবর্তন করি যেগুলি ইতিমধ্যে গিট সংগ্রহস্থলে যুক্ত করা হয়েছে, তখন তাদের স্থিতি "পরিবর্তিত" হয়।
  • আমরা যে ফাইলগুলি পরিবর্তন করেছি তার মধ্যে, আমরা যেগুলি আমাদের প্রয়োজন সেগুলি নির্বাচন করি (উদাহরণস্বরূপ, আমাদের কম্পাইল করা ক্লাসের প্রয়োজন নেই), এবং এই ক্লাসগুলিকে "মঞ্চস্থ" অবস্থায় পরিবর্তিত করা হয়েছে।
  • স্টেজড স্টেটে প্রস্তুতকৃত ফাইল থেকে একটি কমিট তৈরি করা হয় এবং গিট রিপোজিটরিতে যায়। এর পরে, "মঞ্চস্থ" স্থিতি সহ কোনও ফাইল নেই। কিন্তু এখনও ফাইল থাকতে পারে যার স্থিতি "পরিবর্তিত"।

এই এটা দেখায় কিভাবে হয়:

একটি কমিট কি?

সংস্করণ নিয়ন্ত্রণের ক্ষেত্রে একটি প্রতিশ্রুতি প্রধান ঘটনা। এতে কমিট শুরু হওয়ার পর থেকে করা সমস্ত পরিবর্তন রয়েছে। প্রতিশ্রুতিগুলি এককভাবে লিঙ্কযুক্ত তালিকার মতো একসাথে সংযুক্ত থাকে।

বিশেষত, একটি প্রথম প্রতিশ্রুতি আছে। যখন দ্বিতীয় কমিট তৈরি করা হয়, এটি (দ্বিতীয়) জানে প্রথমটির পরে কী আসে। এবং এই পদ্ধতিতে, তথ্য ট্র্যাক করা যেতে পারে.

একটি কমিটের নিজস্ব তথ্য রয়েছে, তথাকথিত মেটাডেটা:

  • কমিট এর অনন্য শনাক্তকারী, যা এটি খুঁজে পেতে ব্যবহার করা যেতে পারে
  • কমিটের লেখকের নাম, যিনি এটি তৈরি করেছেন
  • প্রতিশ্রুতি তৈরি হওয়ার তারিখ
  • একটি মন্তব্য যা কমিটের সময় কী করা হয়েছিল তা বর্ণনা করে

এটি দেখতে কেমন তা এখানে:

একটি শাখা কি?

একটি শাখা কিছু কমিট একটি নির্দেশক. কারণ একটি কমিট জানে যে কোন কমিট এর আগে, যখন একটি শাখা একটি কমিটের দিকে নির্দেশ করে, সেই সমস্ত পূর্ববর্তী কমিটগুলিও এটিতে প্রযোজ্য।

তদনুসারে, আমরা বলতে পারি যে আপনি একই প্রতিশ্রুতির দিকে নির্দেশ করে যতগুলি চান ততগুলি শাখা থাকতে পারে।

কাজটি শাখাগুলিতে ঘটে, তাই যখন একটি নতুন প্রতিশ্রুতি তৈরি করা হয়, তখন শাখাটি তার পয়েন্টারকে সাম্প্রতিক প্রতিশ্রুতিতে নিয়ে যায়।

গিট দিয়ে শুরু করা

আপনি একা একটি স্থানীয় সংগ্রহস্থলের পাশাপাশি দূরবর্তী একটির সাথে কাজ করতে পারেন।

প্রয়োজনীয় কমান্ড অনুশীলন করতে, আপনি স্থানীয় সংগ্রহস্থলে নিজেকে সীমাবদ্ধ করতে পারেন। এটি শুধুমাত্র .git ফোল্ডারে স্থানীয়ভাবে প্রকল্পের সমস্ত তথ্য সংরক্ষণ করে।

যদি আমরা রিমোট রিপোজিটরি সম্পর্কে কথা বলি, তাহলে সমস্ত তথ্য রিমোট সার্ভারে কোথাও সংরক্ষণ করা হয়: শুধুমাত্র প্রকল্পের একটি অনুলিপি স্থানীয়ভাবে সংরক্ষণ করা হয়। আপনার স্থানীয় অনুলিপিতে করা পরিবর্তনগুলি দূরবর্তী সংগ্রহস্থলে পুশ করা যেতে পারে (গিট পুশ)।

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

একটি স্থানীয় সংগ্রহস্থলে গিটের সাথে কাজ করা

একটি স্থানীয় সংগ্রহস্থল তৈরি করতে, আপনাকে লিখতে হবে:

git init

এটি কনসোলের বর্তমান ডিরেক্টরিতে একটি লুকানো .git ফোল্ডার তৈরি করবে।

.git ফোল্ডারটি Git সংগ্রহস্থল সম্পর্কে সমস্ত তথ্য সংরক্ষণ করে। মুছে ফেলো না ;)

এরপরে, ফাইলগুলি প্রকল্পে যোগ করা হয় এবং সেগুলিকে "আনট্র্যাকড" স্থিতি দেওয়া হয়। আপনার কাজের বর্তমান অবস্থা পরীক্ষা করতে, এটি লিখুন:

git অবস্থা

আমরা মাস্টার শাখায় আছি, এবং অন্য শাখায় না যাওয়া পর্যন্ত আমরা এখানেই থাকব।

এটি দেখায় যে কোন ফাইলগুলি পরিবর্তিত হয়েছে কিন্তু এখনও "মঞ্চস্থিত" স্থিতিতে যোগ করা হয়নি। এগুলিকে "মঞ্চিত" স্ট্যাটাসে যুক্ত করতে, আপনাকে "গিট অ্যাড" লিখতে হবে। আমাদের এখানে কয়েকটি বিকল্প রয়েছে, উদাহরণস্বরূপ:

  • git add -A — সমস্ত ফাইলকে "মঞ্চস্থিত" অবস্থায় যুক্ত করুন
  • git যোগ করুন। - এই ফোল্ডার এবং সমস্ত সাবফোল্ডার থেকে সমস্ত ফাইল যোগ করুন। মূলত আগেরটির মতোই;
  • git add <file name> — একটি নির্দিষ্ট ফাইল যোগ করে। এখানে আপনি কিছু প্যাটার্ন অনুযায়ী ফাইল যোগ করতে রেগুলার এক্সপ্রেশন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, git add *.java: এর মানে হল আপনি শুধুমাত্র জাভা এক্সটেনশনের সাথে ফাইল যোগ করতে চান।

প্রথম দুটি বিকল্প পরিষ্কারভাবে সহজ। সাম্প্রতিক সংযোজনের সাথে জিনিসগুলি আরও আকর্ষণীয় হয়ে ওঠে, তাই আসুন লিখি:

git *.txt যোগ করুন

স্থিতি পরীক্ষা করতে, আমরা ইতিমধ্যে আমাদের পরিচিত কমান্ড ব্যবহার করি:

git অবস্থা

এখানে আপনি দেখতে পাচ্ছেন যে রেগুলার এক্সপ্রেশন সঠিকভাবে কাজ করেছে: test_resource.txt-এর এখন "মঞ্চস্থ" অবস্থা আছে।

এবং অবশেষে, একটি স্থানীয় সংগ্রহস্থলের সাথে কাজ করার শেষ পর্যায়ে (রিমোট রিপোজিটরির সাথে কাজ করার সময় আরও একটি আছে ;)) - একটি নতুন প্রতিশ্রুতি তৈরি করা:

git commit -m "সমস্ত txt ফাইল প্রকল্পে যোগ করা হয়েছিল"

পরবর্তীতে একটি শাখায় কমিট ইতিহাস দেখার জন্য একটি দুর্দান্ত কমান্ড। আসুন এটি ব্যবহার করা যাক:

git লগ

এখানে আপনি দেখতে পাচ্ছেন যে আমরা আমাদের প্রথম কমিট তৈরি করেছি এবং এতে কমান্ড লাইনে দেওয়া পাঠ্য অন্তর্ভুক্ত রয়েছে। এটা বোঝা খুবই গুরুত্বপূর্ণ যে এই টেক্সটটি যতটা সম্ভব সঠিকভাবে ব্যাখ্যা করা উচিত এই কমিটের সময় কি করা হয়েছিল। এটি ভবিষ্যতে আমাদের অনেকবার সাহায্য করবে।

একজন অনুসন্ধিৎসু পাঠক যিনি এখনও ঘুমিয়ে পড়েননি তিনি হয়তো ভাবছেন GitTest.java ফাইলের কি হয়েছে। চলুন এখনই খুঁজে বের করা যাক। এটি করার জন্য, আমরা ব্যবহার করি:

git অবস্থা

আপনি দেখতে পাচ্ছেন, এটি এখনও "আনট্র্যাকড" এবং উইংসে অপেক্ষা করছে। কিন্তু আমরা যদি এটিকে একেবারেই প্রকল্পে যুক্ত করতে না চাই? মাঝে মাঝে এমন হয়।

জিনিসগুলিকে আরও আকর্ষণীয় করতে, আসুন এখন আমাদের test_resource.txt ফাইলটি পরিবর্তন করার চেষ্টা করি। আসুন সেখানে কিছু পাঠ্য যোগ করি এবং স্থিতি পরীক্ষা করি:

git অবস্থা

এখানে আপনি "আনট্র্যাকড" এবং "পরিবর্তিত" স্ট্যাটাসের মধ্যে পার্থক্য স্পষ্টভাবে দেখতে পাবেন।

GitTest.java "আনট্র্যাকড" এবং test_resource.txt "পরিবর্তিত"।

এখন যেহেতু আমাদের ফাইলগুলি পরিবর্তিত অবস্থায় আছে, আমরা সেগুলিতে করা পরিবর্তনগুলি পরীক্ষা করতে পারি। এটি নিম্নলিখিত কমান্ড ব্যবহার করে করা যেতে পারে:

git diff

অর্থাৎ, আপনি এখানে পরিষ্কারভাবে দেখতে পাচ্ছেন যে আমি আমাদের টেক্সট ফাইলে কী যোগ করেছি: হ্যালো ওয়ার্ল্ড!

আসুন টেক্সট ফাইলে আমাদের পরিবর্তনগুলি যোগ করি এবং একটি প্রতিশ্রুতি তৈরি করি:

git test_resource.txt যোগ করুন
git commit -m “হ্যালো শব্দ যোগ করা হয়েছে! test_resource.txt" এ

সমস্ত প্রতিশ্রুতি দেখতে, লিখুন:

git লগ

আপনি দেখতে পাচ্ছেন, আমাদের এখন দুটি প্রতিশ্রুতি রয়েছে।

আমরা একইভাবে GitTest.java যোগ করব। এখানে কোন মন্তব্য নেই, শুধু কমান্ড:

git যোগ করুন GitTest.java
git commit -m "যোগ করা হয়েছে GitTest.java"
git অবস্থা

.gitignore এর সাথে কাজ করা

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

গিটকে তাদের উপেক্ষা করতে বলতে, আমাদের একটি বিশেষ ফাইল তৈরি করতে হবে। এটি করুন: প্রকল্পের রুটে .gitignore নামে একটি ফাইল তৈরি করুন। এই ফাইলের প্রতিটি লাইন উপেক্ষা করার জন্য একটি প্যাটার্ন উপস্থাপন করে।

এই উদাহরণে, .gitignore ফাইলটি দেখতে এরকম হবে:

*.ক্লাস
টার্গেট/
*.iml
.idea/

একবার দেখা যাক:

  • প্রথম লাইন হল .class এক্সটেনশন সহ সমস্ত ফাইল উপেক্ষা করা
  • দ্বিতীয় লাইনটি হল "টার্গেট" ফোল্ডার এবং এতে থাকা সবকিছু উপেক্ষা করা
  • তৃতীয় লাইন হল .iml এক্সটেনশন সহ সমস্ত ফাইল উপেক্ষা করা
  • চতুর্থ লাইনটি হল .idea ফোল্ডারটিকে উপেক্ষা করা

এর একটি উদাহরণ ব্যবহার করার চেষ্টা করা যাক. এটি কীভাবে কাজ করে তা দেখতে, আসুন প্রকল্পে সংকলিত GitTest.class যোগ করি এবং প্রকল্পের স্থিতি পরীক্ষা করি:

git অবস্থা

স্পষ্টতই, আমরা কোনওভাবে দুর্ঘটনাক্রমে সংকলিত ক্লাসটিকে প্রকল্পে যুক্ত করতে চাই না (গিট অ্যাড -এ ব্যবহার করে)। এটি করার জন্য, একটি .gitignore ফাইল তৈরি করুন এবং আগে বর্ণিত সমস্ত কিছু যোগ করুন:

এখন প্রকল্পে .gitignore ফাইল যোগ করার জন্য একটি প্রতিশ্রুতি ব্যবহার করা যাক:

git যোগ করুন .gitignore
git কমিট -m ". gitignore ফাইল যোগ করা হয়েছে"

এবং এখন সত্যের মুহূর্ত: আমাদের কাছে একটি সংকলিত ক্লাস GitTest.class আছে যেটি "আনট্র্যাকড", যা আমরা গিট সংগ্রহস্থলে যোগ করতে চাইনি।

এখন আমাদের .gitignore ফাইলের প্রভাব দেখতে হবে:

git অবস্থা

নিখুঁত! .gitignore +1 :)

শাখা নিয়ে কাজ করা

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

একটি শাখা কমিট করার জন্য একটি চলমান পয়েন্টার।

এই অংশে, আমরা বিভিন্ন শাখায় কাজ করার অন্বেষণ করব: কীভাবে একটি শাখা থেকে অন্য শাখায় পরিবর্তনগুলিকে একীভূত করা যায়, কী দ্বন্দ্ব দেখা দিতে পারে এবং আরও অনেক কিছু।

সংগ্রহস্থলের সমস্ত শাখার একটি তালিকা দেখতে এবং আপনি কোনটিতে আছেন তা বুঝতে, আপনাকে লিখতে হবে:

git শাখা -a

আপনি দেখতে পাচ্ছেন যে আমাদের শুধুমাত্র একটি মাস্টার শাখা আছে। এর সামনের তারকাচিহ্নটি নির্দেশ করে যে আমরা এতে আছি। যাইহোক, আমরা কোন শাখায় আছি তা জানতে আপনি "গিট স্ট্যাটাস" কমান্ডটিও ব্যবহার করতে পারেন।

তারপরে শাখা তৈরি করার জন্য বেশ কয়েকটি বিকল্প রয়েছে (আরও হতে পারে — এগুলিই আমি ব্যবহার করি):

  • আমরা যে শাখায় আছি তার উপর ভিত্তি করে একটি নতুন শাখা তৈরি করুন (99% ক্ষেত্রে)
  • একটি নির্দিষ্ট প্রতিশ্রুতির উপর ভিত্তি করে একটি শাখা তৈরি করুন (1% ক্ষেত্রে)

আসুন একটি নির্দিষ্ট প্রতিশ্রুতির উপর ভিত্তি করে একটি শাখা তৈরি করি

আমরা কমিটের অনন্য শনাক্তকারীর উপর নির্ভর করব। এটি খুঁজে পেতে, আমরা লিখি:

git লগ

আমরা "হ্যালো ওয়ার্ল্ড যুক্ত করেছে..." মন্তব্যের সাথে প্রতিশ্রুতিটি হাইলাইট করেছি এর অনন্য শনাক্তকারী হল 6c44e53d06228f888f2f454d3cb8c1c976dd73f8৷ আমরা একটি "উন্নয়ন" শাখা তৈরি করতে চাই যা এই কমিট থেকে শুরু হয়। এটি করার জন্য, আমরা লিখি:

গিট চেকআউট -বি বিকাশ 6c44e53d06228f888f2f454d3cb8c1c976dd73f8

মাস্টার শাখা থেকে শুধুমাত্র প্রথম দুটি কমিট দিয়ে একটি শাখা তৈরি করা হয়। এটি যাচাই করার জন্য, আমরা প্রথমে একটি ভিন্ন শাখায় স্যুইচ করা নিশ্চিত করি এবং সেখানে কমিটের সংখ্যাটি দেখুন:

git অবস্থা
git লগ

এবং প্রত্যাশিত হিসাবে, আমরা দুটি প্রতিশ্রুতি আছে. যাইহোক, এখানে একটি মজার বিষয় হল: এই শাখায় এখনও কোন .gitignore ফাইল নেই, তাই আমাদের কম্পাইল করা ফাইল (GitTest.class) এখন "আনট্র্যাকড" স্ট্যাটাস দিয়ে হাইলাইট করা হয়েছে।

এখন আমরা এটি লিখে আমাদের শাখাগুলি আবার পর্যালোচনা করতে পারি:

git শাখা -a

আপনি দেখতে পাচ্ছেন যে দুটি শাখা রয়েছে: "মাস্টার" এবং "উন্নয়ন"। আমরা বর্তমানে উন্নয়নে আছি।

চলুন বর্তমানের উপর ভিত্তি করে একটি শাখা তৈরি করি

একটি শাখা তৈরি করার দ্বিতীয় উপায় হল এটি অন্য থেকে তৈরি করা। আমরা মাস্টার শাখার ভিত্তিতে একটি শাখা তৈরি করতে চাই। প্রথমত, আমাদের এটিতে স্যুইচ করতে হবে এবং পরবর্তী ধাপটি হল একটি নতুন তৈরি করা। একবার দেখা যাক:

  • git checkout master — মাস্টার শাখায় স্যুইচ করুন
  • গিট স্ট্যাটাস - যাচাই করুন যে আমরা আসলে মাস্টার শাখায় আছি

এখানে আপনি দেখতে পাচ্ছেন যে আমরা মাস্টার শাখায় স্যুইচ করেছি, .gitignore ফাইলটি কার্যকর রয়েছে এবং কম্পাইল করা ক্লাসটি আর "আনট্র্যাকড" হিসাবে হাইলাইট করা হয়নি।

এখন আমরা মাস্টার শাখার উপর ভিত্তি করে একটি নতুন শাখা তৈরি করি:

git checkout -b বৈশিষ্ট্য/আপডেট-txt-ফাইল

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

দ্বন্দ্ব সমাধান

দ্বন্দ্ব কী তা অন্বেষণ করার আগে, আমাদের একটি শাখাকে অন্য শাখায় একীভূত করার বিষয়ে কথা বলা দরকার।

এই ছবিটি একটি শাখাকে অন্য শাখায় একীভূত করার প্রক্রিয়াকে চিত্রিত করে:

এখানে, আমাদের একটি প্রধান শাখা আছে। কিছু সময়ে, প্রধান শাখার বাইরে একটি মাধ্যমিক শাখা তৈরি করা হয় এবং তারপরে পরিবর্তন করা হয়। কাজ শেষ হয়ে গেলে, আমাদের একটি শাখাকে অন্য শাখায় একত্রিত করতে হবে।

আমাদের উদাহরণে, আমরা বৈশিষ্ট্য/আপডেট-txt-ফাইল শাখা তৈরি করেছি। শাখার নাম দ্বারা নির্দেশিত হিসাবে, আমরা পাঠ্য আপডেট করছি।

এখন আমাদের এই কাজের জন্য একটি নতুন প্রতিশ্রুতি তৈরি করতে হবে:

git *.txt যোগ করুন
git কমিট -m "আপডেট করা txt ফাইলগুলি"
git লগ

এখন, যদি আমরা বৈশিষ্ট্য/আপডেট-txt-ফাইল শাখাটিকে মাস্টারে মার্জ করতে চাই, আমাদের মাস্টারে যেতে হবে এবং লিখতে হবে "git merge feature/update-txt-files":

git চেকআউট মাস্টার
git মার্জ বৈশিষ্ট্য/আপডেট-txt-ফাইল
git লগ

ফলস্বরূপ, মাস্টার শাখায় এখন সেই প্রতিশ্রুতিও অন্তর্ভুক্ত রয়েছে যা বৈশিষ্ট্য/আপডেট-txt-ফাইলে যোগ করা হয়েছিল।

এই কার্যকারিতা যোগ করা হয়েছে, তাই আপনি একটি বৈশিষ্ট্য শাখা মুছে ফেলতে পারেন। এটি করার জন্য, আমরা লিখি:

git শাখা -D বৈশিষ্ট্য/আপডেট-txt-ফাইল

পরিস্থিতি জটিল করা যাক: এখন বলি যে আপনাকে txt ফাইলটি আবার পরিবর্তন করতে হবে। কিন্তু এখন এই ফাইলটি মাস্টার ব্রাঞ্চেও পরিবর্তন করা হবে। অন্য কথায়, এটি সমান্তরালভাবে পরিবর্তিত হবে। যখন আমরা আমাদের নতুন কোডটি মাস্টার শাখায় মার্জ করতে চাই তখন কী করতে হবে তা গিট বুঝতে সক্ষম হবে না।

আমরা মাস্টারের উপর ভিত্তি করে একটি নতুন শাখা তৈরি করব, text_resource.txt-এ পরিবর্তন করব এবং এই কাজের জন্য একটি প্রতিশ্রুতি তৈরি করব:

গিট চেকআউট -বি বৈশিষ্ট্য/অ্যাড-হেডার

... আমরা ফাইলে পরিবর্তন করি

git *.txt যোগ করুন
git কমিট -m "txt-এ হেডার যোগ করা হয়েছে"

মাস্টার শাখায় যান এবং বৈশিষ্ট্য শাখার মতো একই লাইনে এই পাঠ্য ফাইলটি আপডেট করুন:

git চেকআউট মাস্টার

… আমরা test_resource.txt আপডেট করেছি

git test_resource.txt যোগ করুন
git কমিট -m "txt এ মাস্টার হেডার যোগ করা হয়েছে"

এবং এখন সবচেয়ে আকর্ষণীয় পয়েন্ট: আমাদের বৈশিষ্ট্য/অ্যাড-হেডার শাখা থেকে মাস্টারে পরিবর্তনগুলিকে একত্রিত করতে হবে। আমরা মাস্টার শাখায় আছি, তাই আমাদের শুধুমাত্র লিখতে হবে:

git মার্জ বৈশিষ্ট্য/অ্যাড-হেডার

কিন্তু ফলাফল test_resource.txt ফাইলে একটি দ্বন্দ্ব হবে:

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

ঠিক আছে. আমরা একটি টেক্সট এডিটরে দ্বন্দ্ব সহ ফাইলটি খুলি এবং দেখুন:

গিট এখানে কী করেছে তা বোঝার জন্য, আমরা কোন পরিবর্তনগুলি করেছি এবং কোথায় করেছি তা আমাদের মনে রাখতে হবে এবং তারপর তুলনা করুন:

  1. মাস্টার শাখায় এই লাইনে যে পরিবর্তনগুলি ছিল তা "<<<<<<< HEAD" এবং "=======" এর মধ্যে পাওয়া যায়৷
  2. বৈশিষ্ট্য/অ্যাড-হেডার শাখায় যে পরিবর্তনগুলি ছিল তা "=======" এবং ">>>>>>> বৈশিষ্ট্য/অ্যাড-হেডার" এর মধ্যে পাওয়া যায়।

এইভাবে গিট আমাদের বলে যে এটি ফাইলের এই অবস্থানে মার্জটি কীভাবে সম্পাদন করতে পারে তা নির্ধারণ করতে পারেনি। এটি এই বিভাগটিকে বিভিন্ন শাখা থেকে দুটি অংশে বিভক্ত করেছে এবং আমাদের নিজেদেরকে একত্রীকরণ দ্বন্দ্ব সমাধান করার জন্য আমন্ত্রণ জানিয়েছে।

যথেষ্ট ন্যায্য. আমি সাহসের সাথে সবকিছু মুছে ফেলার সিদ্ধান্ত নিই, শুধুমাত্র "হেডার" শব্দটি রেখে:

চলুন পরিবর্তন অবস্থা তাকান. বর্ণনা একটু ভিন্ন হবে। একটি "পরিবর্তিত" অবস্থার পরিবর্তে, আমরা "আনমার্জড" করেছি। তাই আমরা একটি পঞ্চম অবস্থা উল্লেখ করতে পারে? আমি এটা প্রয়োজনীয় মনে করি না. দেখা যাক:

git অবস্থা

আমরা নিজেদেরকে বোঝাতে পারি যে এটি একটি বিশেষ, অস্বাভাবিক ঘটনা। চল অবিরত রাখি:

git *.txt যোগ করুন

আপনি লক্ষ্য করতে পারেন যে বিবরণ শুধুমাত্র "গিট কমিট" লেখার পরামর্শ দেয়। আসুন এটি লেখার চেষ্টা করি:

git কমিট

এবং ঠিক সেই মতো, আমরা এটি করেছি - আমরা কনসোলে দ্বন্দ্ব সমাধান করেছি।

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

রিমোট রিপোজিটরি নিয়ে কাজ করা

শেষ ধাপ হল রিমোট রিপোজিটরির সাথে কাজ করার জন্য প্রয়োজনীয় আরও কয়েকটি কমান্ড বের করা।

আমি যেমন বলেছি, রিমোট রিপোজিটরি এমন কিছু জায়গা যেখানে রিপোজিটরি সংরক্ষণ করা হয় এবং যেখান থেকে আপনি এটি ক্লোন করতে পারেন।

রিমোট রিপোজিটরি কি ধরনের আছে? উদাহরণ:

  • GitHub হল রিপোজিটরি এবং সহযোগী উন্নয়নের জন্য সবচেয়ে বড় স্টোরেজ প্ল্যাটফর্ম।
  • GitLab হল ওপেন সোর্স সহ DevOps লাইফসাইকেলের জন্য একটি ওয়েব-ভিত্তিক টুল। এটি একটি গিট-ভিত্তিক সিস্টেম যার নিজস্ব উইকি, বাগ ট্র্যাকিং সিস্টেম, CI/CD পাইপলাইন এবং অন্যান্য ফাংশন সহ কোড রিপোজিটরি পরিচালনার জন্য।
  • BitBucket হল মারকিউরিয়াল এবং গিট সংস্করণ নিয়ন্ত্রণ সিস্টেমের উপর ভিত্তি করে প্রকল্প হোস্টিং এবং সহযোগী উন্নয়নের জন্য একটি ওয়েব পরিষেবা। এক সময়ে এটি GitHub এর উপর একটি বড় সুবিধা ছিল যে এটি বিনামূল্যে ব্যক্তিগত সংগ্রহস্থল অফার করে। গত বছর, গিটহাবও বিনামূল্যে সবার কাছে এই ক্ষমতা চালু করেছে।
  • এবং তাই…

একটি দূরবর্তী সংগ্রহস্থলের সাথে কাজ করার সময়, প্রথম জিনিসটি আপনার স্থানীয় সংগ্রহস্থলে প্রকল্পটিকে ক্লোন করা।

এর জন্য, আমরা স্থানীয়ভাবে তৈরি করা প্রকল্পটি রপ্তানি করেছি এখন প্রত্যেকে নিজের জন্য এটি লিখে ক্লোন করতে পারে:

git ক্লোন https://github.com/romankh3/git-demo

এখন প্রকল্পটির একটি সম্পূর্ণ স্থানীয় অনুলিপি রয়েছে। প্রকল্পের স্থানীয় অনুলিপিটি সর্বশেষতম তা নিশ্চিত করতে, আপনাকে লিখে প্রকল্পটি টেনে আনতে হবে:

git টান

আমাদের ক্ষেত্রে, রিমোট রিপোজিটরির কিছুই বর্তমানে পরিবর্তিত হয়নি, তাই প্রতিক্রিয়া হল: ইতিমধ্যেই আপ টু ডেট৷

কিন্তু আমরা যদি রিমোট রিপোজিটরিতে কোনো পরিবর্তন করি, আমরা সেগুলো টানার পর স্থানীয় আপডেট করা হয়।

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

এখন আমাদের জন্য বেশ সাধারণ কিছু - আমরা এই কাজের জন্য একটি প্রতিশ্রুতি তৈরি করি:

git test_resource.txt যোগ করুন
গিট কমিট -এম "ঠেলার জন্য প্রস্তুত txt"

এটিকে রিমোট রিপোজিটরিতে পুশ করার কমান্ড হল:

git পুশ

আপাতত এই পর্যন্ত!

উপকারী সংজুক

2. IntelliJ IDEA তে Git এর সাথে কিভাবে কাজ করবেন

এই অংশে, আপনি IntelliJ IDEA-তে Git-এর সাথে কীভাবে কাজ করবেন তা শিখবেন।

প্রয়োজনীয় ইনপুট:

  1. পড়ুন, অনুসরণ করুন, এবং পূর্ববর্তী অংশ বুঝতে. এটি নিশ্চিত করতে সাহায্য করবে যে সবকিছু সেট আপ করা হয়েছে এবং যাওয়ার জন্য প্রস্তুত।
  2. IntelliJ IDEA ইনস্টল করুন। এখানে সবকিছু ঠিকঠাক হওয়া উচিত :)
  3. সম্পূর্ণ আয়ত্ত অর্জনের জন্য একটি ঘন্টা বরাদ্দ করুন।

আসুন ডেমো প্রকল্পের সাথে কাজ করি যা আমি গিট সম্পর্কে নিবন্ধের জন্য ব্যবহার করেছি।

স্থানীয়ভাবে প্রকল্পটি ক্লোন করুন

এখানে দুটি বিকল্প আছে:

  1. আপনার যদি ইতিমধ্যেই একটি GitHub অ্যাকাউন্ট থাকে এবং পরে কিছু পুশ করতে চান তবে প্রকল্পটি কাঁটাচামচ করা এবং আপনার নিজের অনুলিপি ক্লোন করা ভাল। ফর্কিং ওয়ার্কফ্লো-এর একটি উদাহরণ শিরোনামের অধীনে কীভাবে একটি কাঁটাচামচ তৈরি করা যায় সে সম্পর্কে আপনি পড়তে পারেন ।
  2. সংগ্রহস্থল ক্লোন করুন এবং সার্ভারে পুরো জিনিসটি পুশ করার ক্ষমতা ছাড়াই স্থানীয়ভাবে সবকিছু করুন।

GitHub থেকে একটি প্রকল্প ক্লোন করতে, আপনাকে প্রকল্পের লিঙ্কটি অনুলিপি করতে হবে এবং এটি IntelliJ IDEA-তে পাস করতে হবে:

  1. প্রকল্পের ঠিকানা অনুলিপি করুন:

  2. IntelliJ IDEA খুলুন এবং "সংস্করণ নিয়ন্ত্রণ থেকে পান" নির্বাচন করুন:

  3. প্রকল্প ঠিকানা কপি এবং পেস্ট করুন:

  4. আপনাকে একটি IntelliJ IDEA প্রকল্প তৈরি করতে বলা হবে। অফারটি গ্রহণ করুন:

  5. যেহেতু কোনও বিল্ড সিস্টেম নেই, আমরা "বিদ্যমান উত্স থেকে প্রকল্প তৈরি করুন" নির্বাচন করি:

  6. পরবর্তী আপনি এই সুন্দর পর্দা দেখতে পাবেন:

এখন যেহেতু আমরা ক্লোনিং বের করেছি, আপনি চারপাশে একবার দেখে নিতে পারেন।

Git UI হিসাবে IntelliJ IDEA-তে প্রথম নজর

ক্লোন করা প্রকল্পটি ঘনিষ্ঠভাবে দেখুন: আপনি ইতিমধ্যে সংস্করণ নিয়ন্ত্রণ সিস্টেম সম্পর্কে অনেক তথ্য পেতে পারেন।

প্রথমত, আমরা নীচের বাম কোণে সংস্করণ নিয়ন্ত্রণ ফলক আছে. এখানে আপনি সমস্ত স্থানীয় পরিবর্তনগুলি খুঁজে পেতে পারেন এবং কমিটগুলির একটি তালিকা পেতে পারেন ("গিট লগ" এর অনুরূপ)।

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

তাছাড়া, আপনি প্রকৃত পরিবর্তন দেখতে পারেন. আমরা আরও দেখি যে সেখানে একটি বিরোধের সমাধান হয়েছিল। আইডিইএও এটি খুব ভালভাবে উপস্থাপন করে।

আপনি যদি এই কমিটের সময় পরিবর্তিত ফাইলটিতে ডাবল-ক্লিক করেন, তাহলে আমরা দেখব কিভাবে বিরোধের সমাধান হয়েছে:

আমরা লক্ষ্য করি যে বাম এবং ডানে আমাদের কাছে একই ফাইলের দুটি সংস্করণ রয়েছে যা একটিতে মার্জ করা দরকার। এবং মাঝখানে, আমরা চূড়ান্ত মার্জ ফলাফল আছে.

যখন একটি প্রকল্পের অনেকগুলি শাখা, কমিট এবং ব্যবহারকারী থাকে, তখন আপনাকে শাখা, ব্যবহারকারী এবং তারিখ দ্বারা আলাদাভাবে অনুসন্ধান করতে হবে:

শুরু করার আগে, আমরা কোন শাখায় আছি তা কীভাবে বোঝা যায় তা ব্যাখ্যা করাও সার্থক।

নীচের ডানদিকে, "গিট: মাস্টার" লেবেলযুক্ত একটি বোতাম রয়েছে। "Git:" যা অনুসরণ করে তা হল বর্তমান শাখা। আপনি যদি বোতামটি ক্লিক করেন, আপনি অনেক দরকারী জিনিস করতে পারেন: অন্য শাখায় স্যুইচ করুন, একটি নতুন তৈরি করুন, একটি বিদ্যমান একটির নাম পরিবর্তন করুন এবং আরও অনেক কিছু।

একটি সংগ্রহস্থল সঙ্গে কাজ

দরকারী হটকি

ভবিষ্যতের কাজের জন্য, আপনাকে কয়েকটি খুব দরকারী হটকি মনে রাখতে হবে:

  1. CTRL+T — রিমোট রিপোজিটরি (গিট টান) থেকে সাম্প্রতিক পরিবর্তনগুলি পান।
  2. CTRL+K - একটি প্রতিশ্রুতি তৈরি করুন / সমস্ত বর্তমান পরিবর্তনগুলি দেখুন। এর মধ্যে আনট্র্যাক করা এবং পরিবর্তিত ফাইল (গিট কমিট) উভয়ই অন্তর্ভুক্ত রয়েছে।
  3. CTRL+SHIFT+K — এটি রিমোট রিপোজিটরিতে পরিবর্তনগুলি পুশ করার কমান্ড। সমস্ত কমিট স্থানীয়ভাবে তৈরি করা হয়েছে এবং এখনও রিমোট রিপোজিটরিতে নেই তা পুশ করা হবে (গিট পুশ)।
  4. ALT+CTRL+Z — স্থানীয় সংগ্রহস্থলে তৈরি করা সর্বশেষ প্রতিশ্রুতির অবস্থায় একটি নির্দিষ্ট ফাইলের পরিবর্তনগুলি রোলব্যাক করে। আপনি যদি উপরের বাম কোণে পুরো প্রকল্পটি নির্বাচন করেন, আপনি সমস্ত ফাইলের পরিবর্তনগুলি ফিরিয়ে আনতে পারেন৷

আমরা কি চাই?

কাজটি সম্পন্ন করার জন্য, আমাদের একটি মৌলিক পরিস্থিতি আয়ত্ত করতে হবে যা সর্বত্র ব্যবহৃত হয়।

উদ্দেশ্য হল একটি পৃথক শাখায় নতুন কার্যকারিতা প্রয়োগ করা এবং তারপর এটিকে একটি দূরবর্তী সংগ্রহস্থলে ঠেলে দেওয়া (তারপর আপনাকে মূল শাখায় একটি টান অনুরোধও তৈরি করতে হবে, তবে এটি এই পাঠের সুযোগের বাইরে)।

এটি করার জন্য কি প্রয়োজন?

  1. প্রধান শাখার সমস্ত বর্তমান পরিবর্তনগুলি পান (উদাহরণস্বরূপ, "মাস্টার")।

  2. এই প্রধান শাখা থেকে, আপনার কাজের জন্য একটি পৃথক শাখা তৈরি করুন।

  3. নতুন কার্যকারিতা প্রয়োগ করুন।

  4. প্রধান শাখায় যান এবং আমরা কাজ করার সময় কোন নতুন পরিবর্তন হয়েছে কিনা তা পরীক্ষা করুন। যদি না হয়, তাহলে সবকিছু ঠিক আছে। কিন্তু যদি পরিবর্তন হয়, তাহলে আমরা নিম্নলিখিতগুলি করি: কার্যকারী শাখায় যান এবং প্রধান শাখা থেকে আমাদের শাখায় পরিবর্তনগুলি পুনঃস্থাপন করুন । যদি সবকিছু ঠিকঠাক হয়, তাহলে দারুণ। কিন্তু এটা সম্পূর্ণভাবে সম্ভব যে সেখানে সংঘর্ষ হবে। এটি যেমন ঘটবে, দূরবর্তী সংগ্রহস্থলে সময় নষ্ট না করে সেগুলি আগে থেকেই সমাধান করা যেতে পারে।

    আপনি ভাবছেন কেন আপনি এই কাজ করা উচিত? এটি ভাল আচরণ এবং আপনার শাখাটিকে স্থানীয় সংগ্রহস্থলে ঠেলে দেওয়ার পরে সংঘাত ঘটতে বাধা দেয় (অবশ্যই, দ্বন্দ্ব এখনও ঘটবে, তবে এটি অনেক ছোট হয়ে যায় )।

  5. রিমোট রিপোজিটরিতে আপনার পরিবর্তনগুলি পুশ করুন।

কিভাবে রিমোট সার্ভার থেকে পরিবর্তন পেতে?

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

CTRL+T লিখুন :

আপনি এখন দেখতে পাচ্ছেন কিভাবে README পরিবর্তিত হয়েছে, অর্থাৎ রিমোট রিপোজিটরি থেকে পরিবর্তনগুলি টেনে আনা হয়েছে, এবং নীচের ডানদিকে আপনি সার্ভার থেকে আসা পরিবর্তনগুলির সমস্ত বিবরণ দেখতে পাবেন৷

মাস্টারের উপর ভিত্তি করে একটি নতুন শাখা তৈরি করুন

এখানে সবকিছু সহজ.

নীচে ডান কোণায় যান এবং Git: master এ ক্লিক করুন । + নতুন শাখা নির্বাচন করুন ।

চেকআউট শাখার চেকবক্সটি নির্বাচন করুন এবং নতুন শাখার নাম লিখুন। আমাদের ক্ষেত্রে: এটি রিডমি-ইম্প্রোভার হবে ।

Git: master তারপর Git: readme-improver এ পরিবর্তিত হবে ।

সমান্তরাল কাজ অনুকরণ করা যাক

দ্বন্দ্ব প্রদর্শিত হওয়ার জন্য, কাউকে সেগুলি তৈরি করতে হবে।

আমরা ব্রাউজারের মাধ্যমে একটি নতুন প্রতিশ্রুতি সহ README সম্পাদনা করব, এইভাবে সমান্তরাল কাজ অনুকরণ করব। আমরা এটিতে কাজ করার সময় কেউ একই ফাইলে পরিবর্তন করেছে। ফলে সংঘর্ষ হবে। আমরা লাইন 10 থেকে "fully" শব্দটি সরিয়ে দেব।

আমাদের কার্যকারিতা বাস্তবায়ন

আমাদের কাজ হল README পরিবর্তন করা এবং নতুন নিবন্ধে একটি বিবরণ যোগ করা। অর্থাৎ Git-এ কাজ IntelliJ IDEA এর মাধ্যমে হয়। এটি যোগ করুন:

পরিবর্তন করা হয়. এখন আমরা একটি প্রতিশ্রুতি তৈরি করতে পারি। CTRL+K টিপুন , যা আমাদের দেয়:

একটি প্রতিশ্রুতি তৈরি করার আগে, আমাদের এই উইন্ডোটি কী অফার করে তা ঘনিষ্ঠভাবে দেখতে হবে।

কমিট মেসেজ বিভাগে , আমরা কমিটের সাথে যুক্ত টেক্সট লিখি। তারপর এটি তৈরি করতে, আমাদের Commit এ ক্লিক করতে হবে ।

আমরা লিখি যে README পরিবর্তিত হয়েছে এবং কমিট তৈরি করুন। কমিটের নাম সহ নীচের বাম কোণে একটি সতর্কতা পপ আপ হয়:

প্রধান শাখা পরিবর্তিত হয়েছে কিনা পরীক্ষা করুন

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

তাই আমাদের মাস্টার ব্রাঞ্চে যেতে হবে। এটি করার জন্য, নীচের স্ক্রীনশটে নীচের ডানদিকের কোণায় যা দেখানো হয়েছে তা করতে হবে:

মাস্টার ব্রাঞ্চে, রিমোট সার্ভার থেকে এর সাম্প্রতিক পরিবর্তনগুলি পেতে CTRL+T টিপুন। কী পরিবর্তন হয়েছে তা দেখে আপনি সহজেই দেখতে পারবেন কী হয়েছে:

"fully" শব্দটি সরানো হয়েছে৷ হয়তো মার্কেটিং থেকে কেউ সিদ্ধান্ত নিয়েছে যে এটি এমনভাবে লেখা উচিত নয় এবং বিকাশকারীদের এটি আপডেট করার জন্য একটি টাস্ক দিয়েছে।

আমাদের কাছে এখন মাস্টার শাখার সর্বশেষ সংস্করণের একটি স্থানীয় অনুলিপি রয়েছে। রিডমি-ইম্প্রোভার- এ ফিরে যান ।

এখন আমাদের মাস্টার শাখা থেকে আমাদের শাখায় পরিবর্তনগুলিকে পুনঃস্থাপন করতে হবে। আমরা এটি করি:

আপনি যদি সবকিছু সঠিকভাবে করেন এবং আমার সাথে অনুসরণ করেন, ফলাফলটি README ফাইলে একটি দ্বন্দ্ব দেখাবে:

এখানেও আমাদের বোঝার ও ভিজানোর মতো অনেক তথ্য আছে। এখানে ফাইলগুলির একটি তালিকা দেখানো হয়েছে (আমাদের ক্ষেত্রে, একটি ফাইল) যেগুলির মধ্যে দ্বন্দ্ব রয়েছে৷ আমরা তিনটি বিকল্প থেকে বেছে নিতে পারি:

  1. আপনারটি গ্রহণ করুন — শুধুমাত্র readme-improver থেকে পরিবর্তনগুলি গ্রহণ করুন।
  2. তাদের গ্রহণ করুন - শুধুমাত্র মাস্টার থেকে পরিবর্তন গ্রহণ করুন।
  3. মার্জ করুন - আপনি কী রাখতে চান এবং কী বাতিল করতে চান তা বেছে নিন।

কি পরিবর্তন হয়েছে তা পরিষ্কার নয়। যদি পরিবর্তনগুলি হয় প্রধান শাখা, তবে সেগুলি অবশ্যই সেখানে প্রয়োজন, তাই আমরা আমাদের পরিবর্তনগুলিকে সহজভাবে গ্রহণ করতে পারি না। তদনুসারে, আমরা মার্জ নির্বাচন করি :

এখানে আমরা দেখতে পাচ্ছি যে তিনটি অংশ রয়েছে:

  1. এই রিডমি-ইম্প্রোভারের পরিবর্তন।
  2. একত্রিত ফলাফল. আপাতত, পরিবর্তনের আগে এটিই ছিল।
  3. মাস্টার শাখা থেকে পরিবর্তন.

আমাদের একটি একত্রিত ফলাফল তৈরি করতে হবে যা সবাইকে সন্তুষ্ট করবে। আমাদের পরিবর্তনের আগে কী পরিবর্তন করা হয়েছিল তা পর্যালোচনা করে, আমরা বুঝতে পারি যে তারা কেবল "fully" শব্দটি সরিয়ে দিয়েছে। ঠিক আছে কোনো সমস্যা নেই! এর মানে হল যে আমরা মার্জ করা ফলাফলে এটি সরিয়ে ফেলব এবং তারপরে আমাদের পরিবর্তনগুলি যোগ করব। একবার আমরা মার্জ করা ফলাফল সংশোধন করলে, আমরা প্রয়োগ ক্লিক করতে পারি ।

তারপরে একটি বিজ্ঞপ্তি পপ আপ হবে, আমাদের বলে যে রিবেস সফল হয়েছে:

সেখানে! আমরা IntelliJ IDEA এর মাধ্যমে আমাদের প্রথম বিরোধের সমাধান করেছি।

রিমোট সার্ভারে পরিবর্তনগুলি পুশ করুন৷

পরবর্তী ধাপ হল রিমোট সার্ভারে পরিবর্তনগুলি পুশ করা এবং একটি টান অনুরোধ তৈরি করা। এটি করতে, কেবল CTRL+SHIFT+K টিপুন । তারপর আমরা পাই:

বাম দিকে, কমিটের একটি তালিকা থাকবে যা রিমোট রিপোজিটরিতে ঠেলে দেওয়া হয়নি। ডানদিকে পরিবর্তন করা সমস্ত ফাইল থাকবে। এবং এটাই! পুশ টিপুন এবং আপনি সুখ অনুভব করবেন :)

পুশ সফল হলে, আপনি নীচের ডান কোণায় এই মত একটি বিজ্ঞপ্তি দেখতে পাবেন:

বোনাস: একটি টান অনুরোধ তৈরি করা

আসুন একটি GitHub সংগ্রহস্থলে যাই এবং আমরা দেখতে পাই যে GitHub ইতিমধ্যেই জানে আমরা কী চাই:

তুলনা করুন এবং অনুরোধ টানতে ক্লিক করুন । তারপর Create pull request এ ক্লিক করুন । যেহেতু আমরা দ্বন্দ্বগুলি আগেই সমাধান করেছি, এখন যখন একটি টান অনুরোধ তৈরি করি, আমরা অবিলম্বে এটিকে একত্র করতে পারি:

আপাতত এই পর্যন্ত!