একটি ভূমিকার পরিবর্তে
হ্যালো! আজ আমরা একটি ভার্সন কন্ট্রোল সিস্টেম সম্পর্কে কথা বলতে যাচ্ছি, নাম গিট। আপনি যদি গিট না জানেন/বুঝেন না তবে প্রোগ্রামিংয়ের সাথে আপনার কিছুই করার নেই। কিন্তু সৌন্দর্য হল যে ক্রমাগত নিযুক্ত হওয়ার জন্য আপনাকে সমস্ত গিট কমান্ড এবং বৈশিষ্ট্যগুলি আপনার মাথায় রাখতে হবে না। আপনাকে কমান্ডের একটি সেট জানতে হবে যা আপনাকে যা ঘটছে তা বুঝতে সাহায্য করবে।গিট বেসিক
গিট আমাদের কোডের জন্য একটি বিতরণকৃত সংস্করণ নিয়ন্ত্রণ ব্যবস্থা। কেন এটা আমাদের দরকার? বিতরণ করা দলগুলির তাদের কাজ পরিচালনার জন্য কিছু ধরণের সিস্টেমের প্রয়োজন। সময়ের সাথে সাথে ঘটে যাওয়া পরিবর্তনগুলি ট্র্যাক করার জন্য এটি প্রয়োজন। অর্থাৎ, আমাদের ধাপে ধাপে দেখতে হবে কোন ফাইলগুলো পরিবর্তন হয়েছে এবং কিভাবে। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি একটি একক কাজের পরিপ্রেক্ষিতে কী পরিবর্তন হয়েছে তা তদন্ত করছেন, পরিবর্তনগুলিকে ফিরিয়ে আনা সম্ভব করে তোলে।গিট ইনস্টল করা হচ্ছে
আপনার কম্পিউটারে জাভা ইন্সটল করা যাক।উইন্ডোজে ইনস্টল করা হচ্ছে
যথারীতি, আপনাকে একটি 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 status
আমরা মাস্টার শাখায় আছি, এবং অন্য শাখায় না যাওয়া পর্যন্ত আমরা এখানেই থাকব। এটি দেখায় যে কোন ফাইলগুলি পরিবর্তিত হয়েছে কিন্তু এখনও "মঞ্চস্থিত" স্থিতিতে যোগ করা হয়নি। এগুলিকে "মঞ্চিত" স্ট্যাটাসে যুক্ত করতে, আপনাকে "গিট অ্যাড" লিখতে হবে। আমাদের এখানে কয়েকটি বিকল্প রয়েছে, উদাহরণস্বরূপ:
- git add -A — সমস্ত ফাইলকে "মঞ্চস্থিত" অবস্থায় যুক্ত করুন
- git যোগ করুন। - এই ফোল্ডার এবং সমস্ত সাবফোল্ডার থেকে সমস্ত ফাইল যোগ করুন। মূলত, এটি আগেরটির মতোই
- git add <file name> — একটি নির্দিষ্ট ফাইল যোগ করে। এখানে আপনি কিছু প্যাটার্ন অনুযায়ী ফাইল যোগ করতে রেগুলার এক্সপ্রেশন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, git add *.java: এর মানে হল আপনি শুধুমাত্র জাভা এক্সটেনশনের সাথে ফাইল যোগ করতে চান।
git add *.txt
স্থিতি পরীক্ষা করতে, আমরা ইতিমধ্যে আমাদের পরিচিত কমান্ড ব্যবহার করি:
git status
এখানে আপনি দেখতে পাচ্ছেন যে রেগুলার এক্সপ্রেশন সঠিকভাবে কাজ করেছে: test_resource.txt-এর এখন "মঞ্চস্থ" অবস্থা আছে। এবং অবশেষে, একটি স্থানীয় সংগ্রহস্থলের সাথে কাজ করার শেষ পর্যায় (রিমোট রিপোজিটরির সাথে কাজ করার সময় আরও একটি আছে ;)) - একটি নতুন প্রতিশ্রুতি তৈরি করা:
git commit -m "all txt files were added to the project"
পরবর্তীতে একটি শাখায় কমিট ইতিহাস দেখার জন্য একটি দুর্দান্ত কমান্ড। আসুন এটি ব্যবহার করা যাক:
git log
এখানে আপনি দেখতে পাচ্ছেন যে আমরা আমাদের প্রথম কমিট তৈরি করেছি এবং এতে কমান্ড লাইনে দেওয়া পাঠ্য অন্তর্ভুক্ত রয়েছে। এটা বোঝা খুবই গুরুত্বপূর্ণ যে এই টেক্সটটি যতটা সম্ভব সঠিকভাবে ব্যাখ্যা করা উচিত এই কমিটের সময় কি করা হয়েছিল। এটি ভবিষ্যতে আমাদের অনেকবার সাহায্য করবে। একজন অনুসন্ধিৎসু পাঠক যিনি এখনও ঘুমিয়ে পড়েননি তিনি হয়তো ভাবছেন GitTest.java ফাইলের কি হয়েছে। চলুন এখনই খুঁজে বের করা যাক। এটি করার জন্য, আমরা ব্যবহার করি:
git status
আপনি দেখতে পাচ্ছেন, এটি এখনও "আনট্র্যাকড" এবং উইংসে অপেক্ষা করছে। কিন্তু আমরা যদি এটিকে একেবারেই প্রকল্পে যুক্ত করতে না চাই? মাঝে মাঝে এমন হয়। জিনিসগুলিকে আরও আকর্ষণীয় করতে, আসুন এখন আমাদের test_resource.txt ফাইলটি পরিবর্তন করার চেষ্টা করি। আসুন সেখানে কিছু পাঠ্য যোগ করি এবং স্থিতি পরীক্ষা করি:
git status
এখানে আপনি "আনট্র্যাকড" এবং "পরিবর্তিত" স্ট্যাটাসের মধ্যে পার্থক্য স্পষ্টভাবে দেখতে পাবেন। GitTest.java "আনট্র্যাকড" এবং test_resource.txt "পরিবর্তিত"। এখন যেহেতু আমাদের ফাইলগুলি পরিবর্তিত অবস্থায় আছে, আমরা সেগুলিতে করা পরিবর্তনগুলি পরীক্ষা করতে পারি। এটি নিম্নলিখিত কমান্ড ব্যবহার করে করা যেতে পারে:
git diff
অর্থাৎ, আপনি এখানে পরিষ্কারভাবে দেখতে পাচ্ছেন যে আমি আমাদের টেক্সট ফাইলে কী যোগ করেছি: হ্যালো ওয়ার্ল্ড! আসুন টেক্সট ফাইলে আমাদের পরিবর্তনগুলি যোগ করি এবং একটি প্রতিশ্রুতি তৈরি করি:
git add test_resource.txt
git commit -m "added hello word! to test_resource.txt"
সমস্ত প্রতিশ্রুতি দেখতে, লিখুন:
git log
আপনি দেখতে পাচ্ছেন, আমাদের এখন দুটি প্রতিশ্রুতি রয়েছে। আমরা একইভাবে GitTest.java যোগ করব। এখানে কোন মন্তব্য নেই, শুধু কমান্ড:
git add GitTest.java
git commit -m "added GitTest.java"
git status
.gitignore এর সাথে কাজ করা
স্পষ্টতই, আমরা শুধুমাত্র সোর্স কোড একা রাখতে চাই, এবং অন্য কিছু নয়, সংগ্রহস্থলে। তাই আর কি হতে পারে? ন্যূনতম, কম্পাইল করা ক্লাস এবং/অথবা ফাইলগুলি ডেভেলপমেন্ট এনভায়রনমেন্ট দ্বারা উত্পন্ন। গিটকে তাদের উপেক্ষা করতে বলতে, আমাদের একটি বিশেষ ফাইল তৈরি করতে হবে। এটি করুন: প্রকল্পের রুটে .gitignore নামে একটি ফাইল তৈরি করুন। এই ফাইলের প্রতিটি লাইন উপেক্ষা করার জন্য একটি প্যাটার্ন উপস্থাপন করে। এই উদাহরণে, .gitignore ফাইলটি দেখতে এরকম হবে:
```
*.class
target/
*.iml
.idea/
```
একবার দেখা যাক:
- প্রথম লাইন হল .class এক্সটেনশন সহ সমস্ত ফাইল উপেক্ষা করা
- দ্বিতীয় লাইনটি হল "টার্গেট" ফোল্ডার এবং এতে থাকা সবকিছু উপেক্ষা করা
- তৃতীয় লাইন হল .iml এক্সটেনশন সহ সমস্ত ফাইল উপেক্ষা করা
- চতুর্থ লাইনটি হল .idea ফোল্ডারটিকে উপেক্ষা করা
git status
স্পষ্টতই, আমরা কোনওভাবে দুর্ঘটনাক্রমে সংকলিত ক্লাসটিকে প্রকল্পে যুক্ত করতে চাই না (গিট অ্যাড -এ ব্যবহার করে)। এটি করার জন্য, একটি .gitignore ফাইল তৈরি করুন এবং পূর্বে বর্ণিত সমস্ত কিছু যোগ করুন: এখন প্রকল্পে .gitignore ফাইল যোগ করার জন্য একটি প্রতিশ্রুতি ব্যবহার করা যাক:
git add .gitignore
git commit -m "added .gitignore file"
এবং এখন সত্যের মুহূর্ত: আমাদের কাছে একটি সংকলিত ক্লাস GitTest.class আছে যা "আনট্র্যাকড" যা আমরা গিট সংগ্রহস্থলে যোগ করতে চাইনি। এখন আমাদের .gitignore ফাইলের প্রভাব দেখতে হবে:
git status
নিখুঁত! .gitignore +1 :)
শাখা এবং যেমন সঙ্গে কাজ
স্বাভাবিকভাবেই, শুধুমাত্র একটি শাখায় কাজ করা একাকী ডেভেলপারদের জন্য অসুবিধাজনক, এবং যখন একটি দলে একাধিক ব্যক্তি থাকে তখন এটি অসম্ভব। এই কারণে আমাদের শাখা আছে। আমি আগেই বলেছি, একটি শাখা হচ্ছে কমিট করার জন্য একটি চলমান পয়েন্টার। এই অংশে, আমরা বিভিন্ন শাখায় কাজ করার অন্বেষণ করব: কীভাবে একটি শাখা থেকে অন্য শাখায় পরিবর্তনগুলিকে একীভূত করা যায়, কী দ্বন্দ্ব দেখা দিতে পারে এবং আরও অনেক কিছু। সংগ্রহস্থলের সমস্ত শাখার একটি তালিকা দেখতে এবং আপনি কোনটিতে আছেন তা বুঝতে, আপনাকে লিখতে হবে:
git branch -a
আপনি দেখতে পাচ্ছেন যে আমাদের শুধুমাত্র একটি মাস্টার শাখা আছে। এর সামনের তারকাচিহ্নটি নির্দেশ করে যে আমরা এতে আছি। যাইহোক, আমরা কোন শাখায় আছি তা খুঁজে বের করতে আপনি "গিট স্ট্যাটাস" কমান্ডটিও ব্যবহার করতে পারেন। তারপরে শাখা তৈরি করার জন্য বেশ কয়েকটি বিকল্প রয়েছে (আরও হতে পারে — এগুলিই আমি ব্যবহার করি):
- আমরা যেটিতে আছি তার উপর ভিত্তি করে একটি নতুন শাখা তৈরি করুন (99% ক্ষেত্রে)
- একটি নির্দিষ্ট প্রতিশ্রুতির উপর ভিত্তি করে একটি শাখা তৈরি করুন (1% ক্ষেত্রে)
আসুন একটি নির্দিষ্ট প্রতিশ্রুতির উপর ভিত্তি করে একটি শাখা তৈরি করি
আমরা কমিটের অনন্য শনাক্তকারীর উপর নির্ভর করব। এটি খুঁজে পেতে, আমরা লিখি:
git log
আমি মন্তব্যটি হাইলাইট করেছি "হ্যালো ওয়ার্ল্ড যোগ করা হয়েছে..." এর অনন্য শনাক্তকারী হল 6c44e53d06228f888f2f454d3cb8c1c976dd73f8৷ আমি একটি "উন্নয়ন" শাখা তৈরি করতে চাই যা এই কমিট থেকে শুরু হয়। এটি করার জন্য, আমি লিখি:
git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
মাস্টার শাখা থেকে শুধুমাত্র প্রথম দুটি কমিট দিয়ে একটি শাখা তৈরি করা হয়। এটি যাচাই করার জন্য, আমরা প্রথমে একটি ভিন্ন শাখায় স্যুইচ করা নিশ্চিত করি এবং সেখানে কমিটের সংখ্যা দেখুন:
git status
git log
এবং প্রত্যাশিত হিসাবে, আমরা দুটি প্রতিশ্রুতি আছে. যাইহোক, এখানে একটি মজার বিষয়: এই শাখায় এখনও কোনো .gitignore ফাইল নেই, তাই আমাদের কম্পাইল করা ফাইল (GitTest.class) এখন "আনট্র্যাকড" স্ট্যাটাস দিয়ে হাইলাইট করা হয়েছে। এখন আমরা এটি লিখে আমাদের শাখাগুলি আবার পর্যালোচনা করতে পারি:
git branch -a
আপনি দেখতে পাচ্ছেন যে দুটি শাখা রয়েছে: "মাস্টার" এবং "উন্নয়ন"। আমরা বর্তমানে উন্নয়নে আছি।
চলুন বর্তমানের উপর ভিত্তি করে একটি শাখা তৈরি করি
একটি শাখা তৈরি করার দ্বিতীয় উপায় হল এটি অন্য থেকে তৈরি করা। আমি মাস্টার শাখার উপর ভিত্তি করে একটি শাখা তৈরি করতে চাই। প্রথমে, আমাকে এটিতে স্যুইচ করতে হবে এবং পরবর্তী ধাপটি হল একটি নতুন তৈরি করা। একবার দেখা যাক:- git checkout master — মাস্টার শাখায় স্যুইচ করুন
- গিট স্ট্যাটাস - যাচাই করুন যে আমরা আসলে মাস্টার শাখায় আছি
git checkout -b feature/update-txt-files
আপনি যদি নিশ্চিত না হন যে এই শাখাটি "মাস্টার" এর মতো একই কিনা, আপনি "গিট লগ" সম্পাদন করে এবং সমস্ত কমিটগুলি দেখে সহজেই পরীক্ষা করতে পারেন। তাদের মধ্যে চারটি হওয়া উচিত।
দ্বন্দ্ব সমাধান
দ্বন্দ্ব কী তা অন্বেষণ করার আগে, আমাদের একটি শাখাকে অন্য শাখায় একীভূত করার বিষয়ে কথা বলা দরকার। এই ছবিটি একটি শাখাকে অন্য শাখায় একীভূত করার প্রক্রিয়াকে চিত্রিত করে: এখানে, আমাদের একটি প্রধান শাখা রয়েছে। কিছু সময়ে, প্রধান শাখার বাইরে একটি মাধ্যমিক শাখা তৈরি করা হয় এবং তারপরে সংশোধন করা হয়। কাজ শেষ হয়ে গেলে, আমাদের একটি শাখাকে অন্য শাখায় একত্রিত করতে হবে। আমি বিভিন্ন বৈশিষ্ট্য বর্ণনা করব না: এই নিবন্ধে, আমি শুধুমাত্র একটি সাধারণ বোঝাপড়া জানাতে চাই। আপনার যদি বিশদ বিবরণের প্রয়োজন হয় তবে আপনি সেগুলি নিজেই দেখতে পারেন। আমাদের উদাহরণে, আমরা বৈশিষ্ট্য/আপডেট-txt-ফাইল শাখা তৈরি করেছি। শাখার নাম দ্বারা নির্দেশিত হিসাবে, আমরা পাঠ্য আপডেট করছি। এখন আমাদের এই কাজের জন্য একটি নতুন প্রতিশ্রুতি তৈরি করতে হবে:
git add *.txt
git commit -m "updated txt files"
git log
এখন, যদি আমরা বৈশিষ্ট্য/আপডেট-txt-ফাইল শাখাটিকে মাস্টারে মার্জ করতে চাই, আমাদের মাস্টারে যেতে হবে এবং লিখতে হবে "git merge feature/update-txt-files":
git checkout master
git merge feature/update-txt-files
git log
ফলস্বরূপ, মাস্টার শাখায় এখন সেই প্রতিশ্রুতিও অন্তর্ভুক্ত রয়েছে যা বৈশিষ্ট্য/আপডেট-txt-ফাইলে যোগ করা হয়েছিল। এই কার্যকারিতা যোগ করা হয়েছে, তাই আপনি একটি বৈশিষ্ট্য শাখা মুছে ফেলতে পারেন। এটি করার জন্য, আমরা লিখি:
git branch -D feature/update-txt-files
এখন পর্যন্ত সবকিছু পরিষ্কার, হ্যাঁ? পরিস্থিতি জটিল করা যাক: এখন বলি যে আপনাকে txt ফাইলটি আবার পরিবর্তন করতে হবে। কিন্তু এখন এই ফাইলটি মাস্টার ব্রাঞ্চেও পরিবর্তন করা হবে। অন্য কথায়, এটি সমান্তরালভাবে পরিবর্তিত হবে। যখন আমরা আমাদের নতুন কোডটি মাস্টার শাখায় মার্জ করতে চাই তখন কী করতে হবে তা গিট বুঝতে সক্ষম হবে না। চলো যাই! আমরা মাস্টারের উপর ভিত্তি করে একটি নতুন শাখা তৈরি করব, text_resource.txt-এ পরিবর্তন করব এবং এই কাজের জন্য একটি প্রতিশ্রুতি তৈরি করব:
git checkout -b feature/add-header
... we make changes to the file
git add *.txt
git commit -m "added header to txt"
মাস্টার শাখায় যান এবং বৈশিষ্ট্য শাখার মতো একই লাইনে এই পাঠ্য ফাইলটি আপডেট করুন:
git checkout master
… we updated test_resource.txt
git add test_resource.txt
git commit -m "added master header to txt"
এবং এখন সবচেয়ে আকর্ষণীয় পয়েন্ট: আমাদের বৈশিষ্ট্য/অ্যাড-হেডার শাখা থেকে মাস্টারে পরিবর্তনগুলি একত্রিত করতে হবে। আমরা মাস্টার শাখায় আছি, তাই আমাদের শুধুমাত্র লিখতে হবে:
git merge feature/add-header
কিন্তু ফলাফল test_resource.txt ফাইলের মধ্যে একটি দ্বন্দ্ব হবে: এখানে আমরা দেখতে পাচ্ছি যে গিট কীভাবে এই কোডটি একত্রিত করতে পারে তার নিজের সিদ্ধান্ত নিতে পারেনি। এটি আমাদের বলে যে আমাদের প্রথমে দ্বন্দ্ব সমাধান করতে হবে, এবং শুধুমাত্র তারপরই প্রতিশ্রুতি সম্পাদন করতে হবে। ঠিক আছে. আমরা একটি টেক্সট এডিটরে বিরোধ সহ ফাইলটি খুলি এবং দেখুন: গিট এখানে কী করেছে তা বোঝার জন্য, আমাদের মনে রাখতে হবে আমরা কোন পরিবর্তনগুলি করেছি এবং কোথায় করেছি এবং তারপরে তুলনা করুন:
- মাস্টার শাখায় এই লাইনে যে পরিবর্তনগুলি ছিল তা "<<<<<<< HEAD" এবং "=======" এর মধ্যে পাওয়া যায়৷
- বৈশিষ্ট্য/অ্যাড-হেডার শাখায় যে পরিবর্তনগুলি ছিল তা "=======" এবং ">>>>>>> বৈশিষ্ট্য/অ্যাড-হেডার" এর মধ্যে পাওয়া যায়।
git status
আমরা নিজেদেরকে বোঝাতে পারি যে এটি একটি বিশেষ, অস্বাভাবিক ঘটনা। চল অবিরত রাখি:
git add *.txt
আপনি লক্ষ্য করতে পারেন যে বিবরণ শুধুমাত্র "গিট কমিট" লেখার পরামর্শ দেয়। আসুন এটি লেখার চেষ্টা করি:
git commit
এবং ঠিক সেই মতো, আমরা এটি করেছি - আমরা কনসোলে দ্বন্দ্ব সমাধান করেছি। অবশ্যই, এটি সমন্বিত উন্নয়ন পরিবেশে একটু সহজ করা যেতে পারে। উদাহরণস্বরূপ, IntelliJ IDEA-তে, সবকিছু এত সুন্দরভাবে সেট আপ করা হয়েছে যে আপনি এটির মধ্যেই সমস্ত প্রয়োজনীয় ক্রিয়া সম্পাদন করতে পারেন। কিন্তু IDE গুলি "হুডের নীচে" অনেক কিছু করে এবং আমরা প্রায়শই বুঝতে পারি না সেখানে ঠিক কী ঘটছে। আর যখন বোঝাপড়া না থাকে, তখন সমস্যা দেখা দিতে পারে।
রিমোট রিপোজিটরি নিয়ে কাজ করা
শেষ ধাপ হল রিমোট রিপোজিটরির সাথে কাজ করার জন্য প্রয়োজনীয় আরও কয়েকটি কমান্ড বের করা। আমি যেমন বলেছি, রিমোট রিপোজিটরি এমন কিছু জায়গা যেখানে রিপোজিটরি সংরক্ষণ করা হয় এবং যেখান থেকে আপনি এটি ক্লোন করতে পারেন। রিমোট রিপোজিটরি কি ধরনের আছে? উদাহরণ:-
GitHub হল রিপোজিটরি এবং সহযোগী উন্নয়নের জন্য সবচেয়ে বড় স্টোরেজ প্ল্যাটফর্ম। আমি ইতিমধ্যে পূর্ববর্তী নিবন্ধগুলিতে এটি বর্ণনা করেছি। গিটহাবে
আমাকে অনুসরণ করুন । আমি প্রায়ই সেখানে আমার কাজ দেখাই যে এলাকায় আমি কাজের জন্য পড়াশোনা করছি। -
GitLab হল ওপেন সোর্স সহ DevOps লাইফসাইকেলের জন্য একটি ওয়েব-ভিত্তিক টুল । এটি একটি গিট -ভিত্তিক সিস্টেম যার নিজস্ব উইকি, বাগ ট্র্যাকিং সিস্টেম , CI/CD পাইপলাইন এবং অন্যান্য ফাংশন সহ কোড সংগ্রহস্থল পরিচালনার জন্য । মাইক্রোসফ্ট গিটহাব কিনেছে এমন খবরের পরে, কিছু বিকাশকারী গিটল্যাবে তাদের প্রকল্পগুলি নকল করেছে।
-
BitBucket হল মারকিউরিয়াল এবং গিট সংস্করণ নিয়ন্ত্রণ সিস্টেমের উপর ভিত্তি করে প্রকল্প হোস্টিং এবং সহযোগী উন্নয়নের জন্য একটি ওয়েব পরিষেবা। এক সময়ে এটি GitHub এর উপর একটি বড় সুবিধা ছিল যে এটি বিনামূল্যে ব্যক্তিগত সংগ্রহস্থল অফার করে। গত বছর, গিটহাবও বিনামূল্যে সবার কাছে এই ক্ষমতা চালু করেছে।
-
এবং তাই…
git clone https://github.com/romankh3/git-demo
এখন প্রকল্পটির একটি সম্পূর্ণ স্থানীয় অনুলিপি রয়েছে। প্রকল্পের স্থানীয় অনুলিপিটি সর্বশেষতম তা নিশ্চিত করতে, আপনাকে লিখে প্রকল্পটি টেনে আনতে হবে:
git pull
আমাদের ক্ষেত্রে, রিমোট রিপোজিটরির কিছুই বর্তমানে পরিবর্তিত হয়নি, তাই প্রতিক্রিয়া হল: ইতিমধ্যেই আপ টু ডেট৷ কিন্তু আমি যদি রিমোট রিপোজিটরিতে কোনো পরিবর্তন করি, আমরা সেগুলো টানার পর স্থানীয় আপডেট করা হয়। এবং অবশেষে, শেষ কমান্ডটি দূরবর্তী সংগ্রহস্থলে ডেটা পুশ করা। যখন আমরা স্থানীয়ভাবে কিছু করেছি এবং এটিকে রিমোট রিপোজিটরিতে পাঠাতে চাই, আমাদের প্রথমে স্থানীয়ভাবে একটি নতুন কমিট তৈরি করতে হবে। এটি প্রদর্শনের জন্য, আসুন আমাদের টেক্সট ফাইলে অন্য কিছু যোগ করি: এখন আমাদের জন্য বেশ সাধারণ কিছু — আমরা এই কাজের জন্য একটি প্রতিশ্রুতি তৈরি করি:
git add test_resource.txt
git commit -m "prepared txt for pushing"
এটিকে রিমোট রিপোজিটরিতে পুশ করার কমান্ড হল:
git push
ওয়েল, আমি সব বলতে চেয়েছিলেন. তোমার মনোযোগের জন্য ধন্যবাদ. GitHub- এ আমাকে অনুসরণ করুন , যেখানে আমি আমার ব্যক্তিগত অধ্যয়ন এবং কাজের সাথে সম্পর্কিত বিভিন্ন দুর্দান্ত উদাহরণ প্রকল্প পোস্ট করি।
দরকারী লিঙ্ক
- অফিসিয়াল গিট ডকুমেন্টেশন । আমি একটি রেফারেন্স হিসাবে এটি সুপারিশ.
GO TO FULL VERSION