কিভাবে আমরা কোড এর স্ন্যাপশট নিব – ১ম পর্ব – How To Take Code Snapshot in git
Tags: gitgithub
Published: 2022-09-15 20:20:09

---
title: কিভাবে আমরা কোড এর  স্ন্যাপশট নিব – ১ম পর্ব – How To Take Code  Snapshot in git
published: true
date: 2022-09-08 18:05:46 UTC
tags: GitGitHUb,GitGitHub
canonical_url: https://blog.aldinn.com/how-to-take-code-snapshot-in-git/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-take-code-snapshot-in-git
---

 ![How to take code snap shot by git](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjYzMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

যদি আমরা গিটহাব ইফেক্টিভলি ব্যাবহার করতে চাই তাহলে প্রথমে আমাদের কোড স্ন্যাপশট নেওয়া শিখতে হবে । এই ব্লগে দেখব কিভাবে আমরা একটি রিপো ক্রিয়েট করতে পারি তারপর আমরা SnapShot গুলো নিতে পারি আমাদের কোড এর এবং আমরা git এর সব ফান্ডামেন্টাল বিষয়গুলো দেখব ।

প্রথমে আমদের তার জন্য একটা প্রজেক্ট ফোল্ডার ক্রিয়েট করতে হবে অথবা ক্রিয়েট করা থাকলে সেটা আমরা আমাদের টার্মিনাল এ ওপেন করতে হবে । তবে বলা রাখা ভাল আমি সবে মাত্র উইন্ডোজ থেকে লিনাক্স এর উবুন্টু ডিস্ট্রিবিউশন ব্যাবহার করছি । মোটামোটি সকল কমান্ড একই রকম হবে ভিন্ন হলে আমি সেটা উল্লেখ করে দেওয়ার চেষ্টা করব ।

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

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDEyIiBoZWlnaHQ9IjY3NSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

আমি আমার মেশিনে টার্মিনাল ওপেন করে নিয়েছি । আমি আপাতত আমি আমার প্রজেক্ট ফোল্ডারে আছি সেখানে আমি একটা নতুন একটা ফোল্ডার ক্রিয়েট করব । ফোল্ডার এর নাম হবে Tara । এটি আমাদের git এর প্রজেক্ট ফোল্ডার হবে । ফোল্ডার ক্রিয়েট করার জন্য আমরা `mkdir Tara ` কমান্ড দিব আমাদের টার্মিনালে ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDEyIiBoZWlnaHQ9IjY3NSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

উপরের ছবিতে দেখতে পাচ্ছেন যে আপনারা আমি আমার নতুন ডিরেক্টরি ক্রিয়েট করে তাতে প্রবেশ করেছি । এই ডিরেক্টরিতে আমরা git এর সকল কিছু দেখব ।

## Initializing A Repository 

যেকোন কোড স্ন্যাপশটনেওয়ার জন্য আমাদের আগে git ইনিশিয়ালাইজেশন করতে হবে ।

git ইনিশিইয়ালাইজেশন করার জন্য আমরা প্রথমে আমাদের টার্মিনালে নিচের কমান্ডটি দিব ।

```
git init 
```

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMTQyIiBoZWlnaHQ9Ijg1NSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

তারপর আমরা `ls` কমান্ড দিয়ে দেখব । কি কিছুই আসছে নাহ ? আমারা git init করার সাথে সাথে একটা .git নামের নতুন হিডেন ফোল্ডার ক্রিয়েট হয়েছে । যেহেতু এটা হিডেন ফোল্ডার হিসেবে ক্রিয়েট হয়েছে তাই টার্মিনালে শো করছে নাহ ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNTU1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

তবে আমরা যদি দেখতে চাই তাহলে `ls -a` কমান্ড দিব তাহলে দেখব নিচের স্ক্রিন শট এর মত কিছু দেখাচ্ছে ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNTU1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

যেহেতু আমাদের এই ফোল্ডারে আপাতত কোন কাজ নেই । এই গেল আমাদের ইলিশিয়ালাইজেশন এর পর্ব

আমরা চাইলে এই ফোল্ডারটি ডিলেট করতে পারি । তার জন্য আমরা `rm -rf git` কমান্ডটি এক্সিকিউট করব !

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNTU1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

আমরা এইভাবে যেকোন ফোল্ডার ডিলেট করতে পারি । এখন আমরা ls কমান্ড দিয়ে দেখলাম কোন ফোল্ডার এখনো এক্সিস্ট করে কিনা ? আমরা দেখতে পাচ্ছি এখানে আর কোন ফোল্ডার এক্সিস্ট করে নাহ ।

## Github Workflow Basic

গিটহাব কিভাবে কাজ করে তা বুঝার জন্য আমাদের গিটহাব এর ব্যাসিক workflow  
বুঝতে হবে । এই ব্লগে দেখব আমরা কিভাবে গিটহাব কাজ করে ।

আমরা যখন আমাদের প্রজেক্ট ডিরেক্টরিতে git ইনিশিয়েট করি তখন সেখানে git এর একটা হিডেন সাবডিরেক্টরি ক্রিয়েট হয় যেটাকে আমরা রিপোজেটরি বলে থাকি ।।  
আমরা যখন নিয়মিত আমাদের প্রজেক্ট অনেক কোড লিখি অনেক ফাইল চেইঞ্জ করি এবার আমদের মনে হইল এগুলোর রেকর্ড রাখার , তখন আমাদের চেইঞ্জেস গুলো সেই রিপোজেটরিতে কমিট করি ।

<video controls src="https://res.cloudinary.com/aldinn/video/upload/f_auto,q_auto/v1662195662/blog/Untitled-video-Made-with-Clipchamp_30586a48e.mp4?_i=AA" data-public-id="blog/Untitled-video-Made-with-Clipchamp_30586a48e.mp4" data-format="mp4" data-transformations="f_auto,q_auto" data-version="1662195662"></video>

এখানে দেখতে পাচ্ছি আমাদের বেগুনি প্রজেক্ট ফাইল এ আমরা কিছু ফাইল চেইঞ্জেস করে আমরা স্ন্যাপশট নিলাম তারপর রিপোজেটরিতে কমিট করলাম ।

বাট git এ বিষয়টি একটু ভিন্ন যা অন্য ভার্শন কন্ট্রোলিঙ্গ সিস্টেম এ নেই শুধু git এ আছে সেটি হচ্ছে স্টেজিং এরিয়া ( staging area ) । এটাকেও index ও বলা হয় । যখন আমরা git add . করি তখন আমাদের ফাইল গুলো এই staging area তে থাকে আমাদের চেইঞ্জেস গুলো রভিউ করার জন্য, যদি আমাদের সব কিছু ঠিক ঠাক থাকে তাহলে আমরা কমিট করার জন্য কনফার্মেশন করে দেই তখন এগুলো আমাদের রিপোজেটরিতে গিয়ে স্টোর হবে ।

<video controls src="https://res.cloudinary.com/aldinn/video/upload/f_auto,q_auto/v1662195639/blog/workflow-Made-with-Clipchamp.mp4?_i=AA" data-public-id="blog/workflow-Made-with-Clipchamp.mp4" data-format="mp4" data-transformations="f_auto,q_auto" data-version="1662195639"></video>

অর্থ্যাৎ এই staging area আমাদের একটা কোড রিভউ করার সুযোগ দে , আমরা যদি চাই কোন একটা ফাইল আনস্টেজড করতে তাহলে আমরা এইখানে থেকে ফাইগুলো আনস্টেইজড করে ফাইনাল কমিট এর জন্য কনফারমেশন দিতে পারব । এটা হচ্ছে গিট এর ব্যাসিক workflow ।

## Staging Files

এবার প্রথমে আমরা একটা ফাইল তৈরি করব এবং তারমধ্যে শুধু আমরা হ্যালো লিখব । ফাইলটি অবসহ্যই Txt ফাইল হবে

```
echo hello > file1.txt
```

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNTU1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এইখানে echo কোন গিট কমান্ড নয় এটি শুধুমাত্র একটি স্ট্যান্ডার্ড ইউনিক্স অথবা লিনাক্স কমান্ড । এর মাধ্যমে আমরা লিনাক্সে যেকোন ফাইল ক্রিয়েট করে তার মধ্যে কন্টেন্ট লিখতে পারি । echo এর পরবর্তীতে কন্টেন্ট তারপর greater than সিম্বল এর পর আমরা ফাইল এর নাম লিখ তার এক্সটেনশন সহ এইভাবে আমরা লিনাক্স এ কোন ফাইল ক্রিয়েট করতে পারি !

একই ভাবে আমরা আরেকটি ফাইল ক্রিয়েট করে নিব নিচের ছবির মত

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNTU1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এখন আমদের গিট প্রজেক্টে একদম নতুন দুইটা ফাইল রয়েছে । নিচের [?] এই সিম্বল দিয়ে বুঝাচ্ছে ? একদম সিম্পল এই আমরা যে নতুন কিছু ফাইল এড করেছি এগুলো এখনো আনট্রেকড ফাইল । আমাদের রিপোজেটরির মধ্যে গিট কখনো অটোমেটিকলি ফাইল গুলো ট্র্যাক করে নাহ । এখন যদি আপনার প্রজেক্টে কয়েক হাজার ফাইল থাকে তাহলে আপনাকে গিট কে ইন্সট্রাকশন দিতে হবে যে ফাইল গুলো যাতে গিট ট্যাক করে ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOTIiIGhlaWdodD0iOTIiPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPjxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIHZhbHVlcz0icmdiYSgxNTMsMTUzLDE1MywwLjUpO3JnYmEoMTUzLDE1MywxNTMsMC4xKTtyZ2JhKDE1MywxNTMsMTUzLDAuNSkiIGR1cj0iMnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPjwvcmVjdD48L3N2Zz4=)

এরপর আমরা নতুন কমান্ড দিব `git status` আমাদের রিপোজেটরির বর্তমান স্ট্যাটাস দেখার জন্য

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNjQ1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এইখানে দেখতে পাচ্ছেন আমার ব্রাঞ্চ দেখাচ্ছে তারপর আমরা আনট্রেক্টড ফাইল গুলো দেখাচ্ছে ।

এবার চলুন আমরা আমাদের ফাইল গুলো এড করি ।

আমরা অনেক ভাবে আমাদের ফাইল গুলো এড করতে পারি । যেমনঃ

যেকোন ফাইল অথবা একাধিক ফাইল এড করতে আমরা ইউজ করব `git add ` কমান্ডটি এর মাধ্যমে আমরা আমাদের রিপোজেটরির সকল ফাইল গুলো এড করব ।

যদি আমরা চাই শুধু সিঙ্গেল ফাইল এড করতে ? সিম্পলি আমরা গিট এড কমান্ড এর পর ওই ফাইল এর নাম লিখ তার ফাইল এক্সটেনশন নাম সহকারে যেভাবে আপনি নিচের চিত্রে দেখতে পাচ্ছেন ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MzIiIGhlaWdodD0iMTAxIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

আবার আমরা যদি একাধিক ফাইল একসাথে করতে চাই ? তাহলে সিম্পলই স্পেস দিয়ে পরের ফাইল এর নাম লিখে দিব ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3ODkiIGhlaWdodD0iMTI3Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এবার যদি আমি চাই txt যত ফাইল আছে একসাথে করতে ? এইখানে \* রিপ্রেজেন্ট করে রিপোজেটরি এর সমস্ত ফাইল এবং এর এক্সটেশন এর মাধ্যমে ওই ফাইল এক্সটেশন এর সকল ফাইল গুলোকে সে রিপ্রেজেনট করে । তাহলে আমরা চাইলে আমাদের ফাইলে কয়েক হাজার txt ফাইল থাকলে সব গুলোকে একসাথে এড করতে পারব শুধু একটি কমান্ড এর মাধ্যমে ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3ODkiIGhlaWdodD0iMTI3Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

চাইলে আমরা রিপোজেটরির সকল ফাইল এড করতে পারি নিচের কমান্ড এর মাধ্যমে

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3ODkiIGhlaWdodD0iMTI3Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

তবে এই কমান্ডটি দেওয়ার ক্ষেত্রে সতর্ক থাকতে হবে এমন অনেক ফাইল এড হয়ে যেতে পারে যেগুলো আপনি কখ্যনো এড করতে চাননি যেমন নোড মডিউলস , বাইনারি ফাইল , লগ ফাইল সহ আর আনন্যাসাসারি ফাইল । কেননা এর ফলে আপনার রিপোজেটরির সাইজ বেড়ে যেতে পারে । পরবর্তীতে আমি দেখিয়ে দিব কিভাবে গিটইগ্নোরের মাধ্যমে এইসব ফাইল গুলো এগনোর করতে হয় । আপাতত আমরা আমাদের এই টপিক এ ফিরে আসি ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNjQ1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এবার আপনি লক্ষ করলে দেখতে পাবেন এখন main এর পর + সিম্বল এসেছে এর মানে এই যে আমাদের ফাইলগুলো এখন কমিট এর জন্য প্রস্তুত তার আগে আমরা আমাদের রিপোজেটরির স্ট্যাটাস দেখে নেই

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNjQ1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

তাহলে আপনি দেখতে পাচ্ছেন আমদের ফাইল গুলো কমিট এর জন্য প্রস্তুত

> What is Staged or staging ?
> 
> **Staged**  files are files that are ready to be  **committed**  to the repository you are working on. You will learn more about `commit` shortly.

আমরা যদি এবার file1.txt কে মডিফাই করি তাহলে কি করতে হবে ? তাহলে নিচের কমান্ডটি দিব

```
echo Hello world >> file1.txt
```

তাহলে আমদের ফাইলটি মডিফাইড হবে এবং নিচের ছবির মত [!+] এমন একটি সিম্বল আসবে । এর মানে হচ্ছে আমাদের স্টাগিং করা ফাইলটি মডিফাইড হয়েছে তাই এটি আনস্টেজ অবস্থায় আছে । যদি আমরা এর স্ট্যা টাস চেক করি তাহলে বুঝতে পারব ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNjQ1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4ODIiIGhlaWdodD0iNzM1Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

আমাদের নতুন ফাইল এর ভিতর এর চেইঞ্জেস গুলো এখনো আনস্টেইজড অবস্থায় আছে । এবং নিচে সেই ফাইল এর নামটি দেখাচ্ছে । এবার আমরা সেই git add file1.txt কমান্ড ব্যাবহার করে আমাদের file1 টি আমরা স্টেইজড করে নিব ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2ODAiIGhlaWdodD0iNDA0Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এবার আমাদের ফাইলগুলো কমিট এর জন্য প্রস্তুত । কিভাবে কমিট করব আমরা পরের ধাপে দেখব

## Committing Changes

আমাদের স্নাপশট গুলো এখন স্টেজিং এরিয়াতে রয়েছে এখন আমরা চাইলে কমিট করতে পারি । কমিট করার জন্য আমরা আমরা টাইপ করব।

```
git commit -m “initial commit ”
```

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NDkiIGhlaWdodD0iNTQ0Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

এই ডবল কোট এর ভিতর আমরা আমাদের ডিটেলস লিখব কেন আমরা এই স্ন্যাপশট নিয়েছিলাম ।

অনেক সময় আমাদের এক লাইন এর কমেন্ট সাফিসিয়েন্ট নাও হতে হবে পারে আমাদের কয়েক লাইন এর ডিটেলস লিখতে হতে পারে । যেমন আপনি যদি কোন বাগ এর উপর কাজ করে থাকেন এবং আপনি যদি সেটি কমিট করতে চান তাহলে আপনাকে বাগ এর খুঁটি নাটি কিছু জিনিস লিখতে হতে পারে যে আপনি কি জিনিস আবার সলভ করেছেন ।

তখন আমরা শুধু এই কমান্ডটি রান করব ।

```
git commit
```

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NDkiIGhlaWdodD0iNTQ0Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9InJnYmEoMTUzLDE1MywxNTMsMC41KTtyZ2JhKDE1MywxNTMsMTUzLDAuMSk7cmdiYSgxNTMsMTUzLDE1MywwLjUpIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz48L3JlY3Q+PC9zdmc+)

গিট কমিট রান করার সাথে সাথে আমাদের ভিএস কোড এ আমাদের এইরকম একটা একটা প্যানেল ওপেন হবে । এইটা আমি আমার ডিফল্ট ভাবে সেট করে নিয়েছি আপনি যদি সেট করতে চান তাহলে নিচের এই কোডটি রান করুন

```
git config --global core.editor "code"
```

তাহলে গিট এর ডিফল্ট এডিটর হিসেবে আপনার কোড ডিট সেট হয়ে যাবে ।

যেহেতু আমাদের নিচের মত একটি কোড এডিটর ওপেন হয়েছে ।

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNTExIiBoZWlnaHQ9IjY3OSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNDIxIiBoZWlnaHQ9IjUwMiI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

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

![](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMzU5IiBoZWlnaHQ9IjMxMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSJyZ2JhKDE1MywxNTMsMTUzLDAuNSk7cmdiYSgxNTMsMTUzLDE1MywwLjEpO3JnYmEoMTUzLDE1MywxNTMsMC41KSIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+PC9yZWN0Pjwvc3ZnPg==)

আপনাকে এইখানে দেখাবে সে কয়টা ফাইল চেইঞ্জ হয়েছে কি কি চেইঞ্জ হয়েছে নতুন কয়টা ইন্স্ররটেশন হয়েছে ।

তাহলে আজকে এত টুকুই দেখা হবে পরের পর্বে

The post [কিভাবে আমরা কোড এর স্ন্যাপশট নিব – ১ম পর্ব – How To Take Code Snapshot in git](https://blog.aldinn.com/how-to-take-code-snapshot-in-git/) appeared first on [Aldinn Rocks](https://blog.aldinn.com).