<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ভার্ষন কন্ট্রোল Archives &bull; Tuts by Mayeenul Islam</title>
	<atom:link href="https://mayeenulislam.github.io/tuts/tag/version-control/feed/" rel="self" type="application/rss+xml" />
	<link>https://mayeenulislam.github.io/tuts/tag/version-control/</link>
	<description>Technology Tutorials by Mayeenul Islam</description>
	<lastBuildDate>Sat, 21 Jan 2023 15:36:01 +0000</lastBuildDate>
	<language>bn-BD</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/cropped-tuts-nano-32x32.png</url>
	<title>ভার্ষন কন্ট্রোল Archives &bull; Tuts by Mayeenul Islam</title>
	<link>https://mayeenulislam.github.io/tuts/tag/version-control/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ২</title>
		<link>https://mayeenulislam.github.io/tuts/git-basics-2/</link>
					<comments>https://mayeenulislam.github.io/tuts/git-basics-2/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Wed, 12 Nov 2014 07:27:37 +0000</pubDate>
				<category><![CDATA[গিট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[ন্যানো বেসিX]]></category>
		<category><![CDATA[প্রাথমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[গিট]]></category>
		<category><![CDATA[গিট ব্যবহারের কৌশল]]></category>
		<category><![CDATA[গিট শেখা]]></category>
		<category><![CDATA[গিটহাব]]></category>
		<category><![CDATA[ভার্ষন কন্ট্রোল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=553</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/git-basics-2/">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ২</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong><a href="https://mayeenulislam.github.io/tuts/git-basics-1/">« আগের পর্ব</a></strong></p>



<p>গত পর্বে আমরা গিট সম্পর্কে অন্তর্নিহীত একটা প্রাথমিক ধারণা পেয়ে গিয়েছিলাম, এবং এখন আমরা গিট কী তা শুধু জানিই না, বুঝিও; কিভাবে গিট কাজ করে তাও জানি, খানিকটা বুঝিও &#8211; আজকে তা পুরোপুরি বুঝে নিবো ইনশাল্লাহ। আমরা কম্পিউটারে গিট ইন্সটল করে ফেলেছি আর সেটাকে সম্পূর্ণ <em>নিজের</em> করে নিয়েছি। এবারে কাজ শুরু করে দেয়া যাক:</p>



<p>আমরা গত পর্বে বলেছিলাম মাত্র ৬টা কমান্ড দিয়ে শিখে নিব, গিট কিভাবে ব্যবহার করতে হয়। &#8230;এখুনি হাত নোংরা করার দরকার নেই, একটু ভালো করে বুঝে নিতে হবে আগে। গিট রেপোযিটরি (কিংবা রেপোজিটোরি) কী? গিট কমিট কী (কমিটি নয় কিন্তু, কিংবা কম্মিট বলারও দরকার নেই)? স্টেজ করা কী? &#8230;বুঝে বুঝে এগোলে কনসেপ্ট পরিষ্কার হবে, নতুন কিছু গ্রহণ করাও সহজ হবে।</p>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-folder-structure.png"><img decoding="async" width="204" height="300" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-folder-structure-204x300.png" alt="গিট - ফোল্ডার স্ট্রাকচার" class="wp-image-555" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-folder-structure-204x300.png 204w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-folder-structure.png 386w" sizes="(max-width: 204px) 100vw, 204px" /></a><figcaption class="wp-element-caption">গিট &#8211; ফোল্ডার স্ট্রাকচার</figcaption></figure></div>


<h3>ধাপে ধাপে গিট</h3>



<p><span style="text-decoration: underline;">গিট রেপোযিটরি:</span> ধরা যাক, আমার একটা ওয়েবসাইট বানাতে হবে, যেখানে দুটো ফাইল থাকবে: (১) index.html আর (২) style.css। ওযেবসাইটের নাম &#8220;mywebsite&#8221;। এখন কী করবো? &#8230; খুব সহজ, mywebsite নামের একটা ফোল্ডার তৈরি করে তার ভিতরে ফাইল দুটো রাখবো। তাহলে আমরা যদি বলি ঐ mywebsite ফোল্ডারটা হলো আমাদের প্রজেক্ট ফোল্ডার, ইউনিক্সের ভাষায় যাকে বলে ডিরেক্টরি, আর গিটের ভাষায় যাকে বলে রেপোযিটরি (repository)। ব্যস রেপোযিটরি বুঝে ফেললাম আমরা &#8211; রেপোযিটরি হলো আমাদের প্রজেক্টের সকল ফাইল একত্র করে রাখার একটা স্থান। তাহলে দেখা যাচ্ছে, একটা ফোল্ডার আর রেপোযিটরির মধ্যে কোনো পার্থক্য নেই। &#8230;আসলে তা কিন্তু <strong>সত্যি নয়</strong> &#8211; পার্থক্য আছে।</p>



<span id="more-553"></span>



<p> একটা ফোল্ডারকে যখন আমরা গিট রেপোযিটরি বলি, তখন তার ভিতরে <code>.git</code> নামে একটা লুকানো বা হিডেন ফোল্ডার থাকে। এই ফোল্ডারটির মধ্যেই গিট তার যাবতীয় তথ্য, রেকর্ড সংরক্ষণ করে রাখে। কিভাবে এটি তৈরি করে নিতে হয়, আমরা তা ধীরে ধীরে জেনে যাব। আপাতত এগিয়ে যাওয়া যাক আমাদের মূল টিউটোরিয়ালে।</p>



<h4>ক্লাউড তৈরি করে নেয়া</h4>



<p>গিট নিয়ে কাজ করার জন্য আমাদেরকে বিনামূল্যে নিজেদের প্রজেক্ট আপলোড করার সুযোগ করে দিয়েছে github.com নামের ওয়েবসাইটটি (এরকম আরো অনেক গিট সাইট আছে)। আমরা তাই সেখানেই আমাদের রিমোট রেপোযিটরিটা রাখবো। এজন্য আমাদেরকে গিটহাবে বিনামূল্যে একটা অ্যাকাউন্ট খুলে নিতে হবে। নিজের ইমেইল ঠিকানা আর পাসওয়ার্ড দিয়ে গিটহাবে ঢুকে একটা নতুন রেপোযিটরি তৈরি করে ফেলা যাক। সময়ে সময়ে গিটহাবে নতুন পরিবর্তন হচ্ছে, আপাতত নামের পাশের যোগ চিহ্নে (+) ক্লিক করে New Repository চেপে নতুন রেপো তৈরি করে নিতে হবে। আমরা আপাতত git-tutorial নামে একটা রেপো তৈরি করে নিলাম, এবং নিচে README ফাইল যাতে যুক্ত হয় সেজন্য টিকচিহ্ন দিয়ে দিলাম। পাবলিক রেপো তৈরি করবো, কারণ প্রাইভেট রেপো তৈরি করতে খরচা করতে হবে। আমরা কাজ না বুঝে এখনই পয়সা ঢালতে রাজি না।</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/github-account.png"><img decoding="async" width="773" height="478" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/github-account.png" alt="গিটহাবে রেপোযিটরি তৈরি করা" class="wp-image-563" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/github-account.png 773w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/github-account-300x186.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/github-account-768x475.png 768w" sizes="(max-width: 773px) 100vw, 773px" /></a><figcaption class="wp-element-caption">গিটহাবে রেপোযিটরি তৈরি করা</figcaption></figure></div>


<p>ব্যস আপনার প্রথম গিট রেপোযিটরি আপনার জন্য তৈরি। আমরা এখন এই রেপোযিটরিটাকে আমাদের পিসিতে clone করবো। ক্লোন করা মানে হলো হুবহু আরেকটা রূপ দেয়া &#8211; পৃথিবীতে প্রথম (১৯৯৬ খ্রি.) সফল ক্লোন করা ভেড়ার নাম ডলি, সে ছিল অন্য একটা ভেড়ার অবিকল আরেকটা সত্তা। আমাদের ক্ষেত্রেও বিষয়টা তা-ই। আমাদের সার্ভারে বা ক্লাউডে যা আছে, আমরা সেটাকে লোকাল পিসিতে অবিকল নামিয়ে আনবো। এজন্য আমাদেরকে এই রেপো&#8217;র path-টা নিতে হবে। এটা রেপোযিটরির ডানদিকে পাওয়া যাবে, সেখান থেকে কপি করে নিতে হবে।</p>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/contextual-menu-command.png"><img decoding="async" width="238" height="49" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/contextual-menu-command.png" alt="মাউসের ডান বোতামে গিট ব্যবহারের সরাসরি কমান্ড" class="wp-image-556"/></a></figure></div>


<p class="has-background" style="background-color:#c2ecdb"><strong>টিপ্‌স:</strong> যেখানেই থাকি না কেন git bash প্রথমে user-এর ফোল্ডারে খোলে। তারপর ডস কমান্ড লিখে লিখে নিজের কাঙ্ক্ষিত ফোল্ডারে যেতে হয়। কিন্তু আমরা গত পর্বে &#8216;ধর্তব্য ধাপ ২&#8217;-তে যে কাজটা করেছিলাম, তা আমাদের কাজকে আরো সহজ করে দিয়েছে। যেখানেই আছেন, খালি জায়গায় মাউসের ডান বোতাম ক্লিক করুন, লেখা দেখবেন: Git Bash Here। ক্লিক করুন, আর গিট ব্যাশ সরাসরি ঐ পাথেই খুলবে। যারা Windows XP SP2 ব্যবহার করছেন, তারা এটা না পেলে Windows Explorer মোডে বামদিকে যে ফোল্ডার ট্রি আসে, সেখানে ফোল্ডারের উপরে মাউসের ডান বোতামে এই কমান্ডটি পাবেন।</p>


<div class="wp-block-image">
<figure class="alignleft"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/https-url-github-nanodesigns.png"><img decoding="async" width="300" height="171" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/https-url-github-nanodesigns-300x171.png" alt="গিটহাবের গিট রেপো'র ইউআরএল কপি করা" class="wp-image-1149" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/https-url-github-nanodesigns-300x171.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/https-url-github-nanodesigns.png 380w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption class="wp-element-caption">গিটহাবের গিট রেপো&#8217;র ইউআরএল কপি করা</figcaption></figure></div>


<p>একটা Notepad খুলে লেখাটা পেস্ট করলে দেখা যাবে সেটা আসলে আমার ঐ রেপোযিটরির URL-ই, শুধু শেষে একটা .git [ডট গিট] যুক্ত আছে।</p>



<p>এবারে আমাদের পিসিতে Start মেনু থেকে Git Bash চালু করি। ধরা যাক আমরা ক্লোন করে ডেস্কটপে (desktop) রাখবো, তাই আমাদেরকে কমান্ড লিখে আগে ডেস্কটপে যেতে হবে &#8211; এটা গিটের অংশ না। যারা ডস মোডে কাজ করেছেন, তারা এটাতে খুব বেশি অভ্যস্থ। আর এগুলো গোণায়ই ধরা যায় না। আমরা নিচের মতো করে লিখলেই ডেস্কটপে চলে যেতে পারি- বলছি <em>change directory to desktop</em>:</p>



<pre class="wp-block-preformatted">cd desktop</pre>



<p>এন্টার চাপতেই আমরা ডেস্কটপে চলে এলাম। সত্যি এসেছি কিনা তা যাচাই করা যায় <code>pwd</code> কমান্ডটি লিখে এন্টার চাপলে।</p>



<h4>কোড ১: ক্লোন করে নেয়া</h4>



<p>যাহোক এবারে আমাদের রেপোযিটরি পাথ ব্যবহার করে আমরা সার্ভারে থাকা গিট রেপোযিটরিটিকে আমাদের ডেস্কটপে নিয়ে আসবো। এজন্য আমাদেরকে লিখতে হবে:</p>



<pre class="wp-block-preformatted">git clone https://github.com/mayeenulislam/git-tutorial.git</pre>



<div class="is-layout-constrained wp-block-group has-background" style="background-color:#c2ecdb"><div class="wp-block-group__inner-container"><div class="wp-block-image">
<figure class="alignright size-full is-resized"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-bash-copy-paste-nanodesigns.png"><img decoding="async" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-bash-copy-paste-nanodesigns.png" alt="গিট ব্যাশে কপি-পেস্ট ব্যবহারের পদ্ধতি" class="wp-image-557" width="129" height="153"/></a></figure></div>


<p><strong>টিপ্‌স:</strong>&nbsp;গিট ব্যাশে কোনো কিছু কপি-পেস্ট করা একটু সমস্যার। এজন্য ব্যাশের বাম দিকের উপরের টাইটেল বারের আইকনে ক্লিক করে বের হওয়া মেনুর Edit সাব মেনু থেকে সুবিধাগুলো ব্যবহার করা যাবে।</p>



<p>এছাড়া গিটের নতুন সংস্করণের সাথে পাওয়া গিট ব্যাশে&nbsp;<kbd>Insert</kbd>&nbsp;কী চাপলেও লেখা পেস্ট হবে।</p>
</div></div>


<div class="wp-block-image">
<figure class="alignleft is-resized"><a href="https://mayeenulislam.github.io/tuts/git-basics-2/git-clone-remote-repo/" rel="attachment wp-att-558"><img decoding="async" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-clone-remote-repo-300x160.png" alt="ক্লাউডে থাকা রেপো লোকালে ক্লোন করে নেয়া" class="wp-image-558" width="489" height="261" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-clone-remote-repo-300x160.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-clone-remote-repo.png 759w" sizes="(max-width: 489px) 100vw, 489px" /></a></figure></div>


<p>লক্ষ করুন, আমরা ওখান থেকে যে লিংকটা কপি করেছিলাম, তা এখানে পেস্ট করেছি। পেস্ট করতে কষ্ট হলে নোটপ্যাডে পেস্ট করে দেখে দেখে টাইপ করে নিন। এবারে এন্টার চাপলে সার্ভার থেকে গিট রেপোযিটরিটি আমাদের পিসিতে হুবহু নেমে যাবে। &#8230;কোথায় নামবে? যেখানে আমরা সর্বশেষ ছিলাম (<code>pwd</code> লিখে চেক করে দেখেছিলাম)। &#8230;ক্লোন হবার সময় ব্যাশ আমাদের দেখিয়েছে <code>Cloning into 'git-tutorial'...</code>, তার মানে ডেস্কটপে আমাদের রেপোযিটরিটা <code>git-tutorial</code> নামে তৈরি হয়েছে। আমরা ডেস্কটপে সেই ফোল্ডারটা দেখেও নিতে পারি। সুতরাং আমরা এখন ঐ ফোল্ডার বা রেপোযিটরিতে ব্যাশ ব্যবহার করে ঢুকতে চাইলে লিখবো:</p>



<pre class="wp-block-preformatted">cd git-tutorial</pre>



<p>আমরা এখন আমাদের সদ্য নামানো রেপোযিটরির ভিতরে আছি।</p>



<h4>কোড ২: গিট, তোমার খবর কী?</h4>



<p>এবারে আমরা জানতে চাচ্ছি, এই রেপোযিটরির খবর কী। গিটের হালচাল জানতে হলে বহুল ব্যবহৃত কমান্ডটি হলো:</p>



<pre class="wp-block-preformatted">git status</pre>



<p>উত্তরে গিট আমাদেরকে বলবে: <em>হ্যা, হ্যা, খবর খুব ভালো। তোমার গিট রেপোযিটরিটা সার্ভারের ওরিজিনাল রেপোযিটরির সাথে এক্কেবারে সাম্প্রতিক (up-to-date), কমিট করার কিচ্ছুই নেই, পুরোপুরি সাফ-সুতরো। 🙂</em></p>



<pre class="wp-block-preformatted">    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    nothing to commit, working directory clean
</pre>



<p>আমরা কিন্তু দুটো কমান্ড ইতোমধ্যেই শিখে ফেলেছি। আর এটাও লক্ষ করেছি কিনা যে, গিটের অধিকাংশ কমান্ড শুরু হয় <code>git</code> লেখাটা দিয়েই। 🙂</p>



<p class="has-background" style="background-color:#c2ecdb"><strong>তথ্যকণিকা:</strong> এই যে রেপো&#8217;র ভিতরে গিয়ে <code>git status</code> লেখার সাথে সাথেই সে আপনাকে তথ্য দেখানো শুরু করলো, তার কারণ এটা একটা গিট রেপোযিটরি। আমরা যখন গিটহাবে রেপো বানানোর সময় README ফাইল যোগ করতে বলে দিয়েছিলাম, তখনই সে এটাকে একটা গিট রেপো বানিয়ে দিয়েছে। যদি আমাদের প্রজেক্টটি গিট রেপো বানানো না থাকতো, কিংবা একটা সাধারণ ফোল্ডারের ভিতর ঢুকে আমরা স্ট্যাটাস জানতে চাইতাম, তখন কিন্তু গিট আমাদেরকে কিচ্ছু বলতে পারতো না। আর তখনই আমাদেরকে আমাদের ফোল্ডারকে আগে গিট রেপো বানানো লাগতো। যেকোনো ফোল্ডারকে গিট রেপো বানানোর জন্য আপনাকে গিট ব্যাশে সেই ফোল্ডারে ঢুকে কোড লিখতে হবে <code>git init</code> — <em>গিটকে ইনিশিয়েট করো &#8211; চালু করো</em>। আর তখনই আমাদের শিখে আসা <code>.git</code> ফোল্ডারটি ঐ ফোল্ডারে তৈরি হয়ে নিজের কাজ শুরু করবে।</p>



<p>আমরা এবারে আসল ভার্সন কন্ট্রোল বা ভার্সন নিয়ন্ত্রণ করে দেখবো&#8230; আমাদের রেপোযিটরির ভিতরে একটা <code>index.html</code> ফাইল আছে। সেটা যদি আমরা টেক্সট এডিটরে খুলি, তাহলে নিচের মতো HTML কোড দেখা যাবে:</p>



<pre class="wp-block-preformatted">    &lt;html&gt;
        &lt;head&gt;&lt;title&gt;Test - nanodesigns&lt;/title&gt;&lt;/head&gt;
        &lt;body&gt;
            &lt;p&gt;This is a test file for git-tutorial repository.&lt;/p&gt;
        &lt;/body&gt;
    &lt;/html&gt;
</pre>



<p>ধরা যাক এটাই আমাদের ওয়েবসাইট, দারুণ সুন্দর একটা ওয়েবসাইট। আমরা করলাম কি, প্যারাগ্রাফ ট্যাগের শেষের ফুলস্টপটাই (.) শুধু ফেলে দিলাম। তারপর আবার ফাইলটা সেভ করলাম। তারমানে কি? আমাদের ফাইলে একটা পরিবর্তন করা হয়েছে। পরিবর্তনের পরিমাণ হিসেবে খুবই নগন্য (<em>হা হা হা, এটা কোনো পরিবর্তন হলো নাকি?</em>), কিন্তু তবু পরিবর্তন তো&#8230;। এবারে ব্যাশে ফিরে আসুন, আপনি আমাদের রেপো&#8217;র ভিতরে রয়েছেন, এবারে আবার গিটের হালচাল জানতে চান:</p>



<pre class="wp-block-preformatted">git status</pre>



<p>এবারে গিট লাল রং দিয়ে আমাদের test.html ফাইলটাকে দেখিয়ে বলবে: <em>এহ্‌হে, মডিফাই করা ফাইল পাওয়া গেছে, যা এখনও মঞ্চে তোলা হয়নি (not staged)</em>। ঠিকইতো, আমরা ফাইলটাতে পরিবর্তন করেছি, কিন্তু গিটের সাথে তো কোনো খেলাধুলা করিনি এপর্যন্ত।</p>



<h4>কোড ৩: মঞ্চে তোলো</h4>



<p>তাই এবারে গিটকে বলতে হবে, <em>গিট, হ্যা, ফাইলে পরিবর্তন যা তুমি দেখতে পাচ্ছো, তা ঠিকই আছে। এই পরিবর্তনকে এবার মঞ্চে নিয়ে এসো:</em></p>



<pre class="wp-block-preformatted">git add test.html</pre>



<p>আমরা গিটকে শুধুমাত্র <code>test.html</code> ফাইলটাকে মঞ্চে নিয়ে আসতে বললাম add বলার পরে ফাইলের নামটা লিখে। ধরা যাক, একবারে অনেকগুলো ফাইলে আমরা পরিবর্তন করলাম, তখন কি আমরা প্রত্যেকটা ফাইলের নাম ধরে ধরে এভাবে যোগ করে নিব? না তখন সব ফাইলকে এক কমান্ডে staged করে নেয়ার কমান্ড হলো <code>git add .</code> (<em>গিট অ্যাড ডট্‌</em>) কিংবা <code>git add -A</code>, অর্থাৎ, <em>গিট, সব (All) ফাইলকে যোগ করে নাও</em>। এবারে আবারও <code>git status</code> জানতে চাইলে সবুজ রঙে গিট আমাদের ফাইলটা দেখাবে: <em>হ্যা, তোমার পরিবর্তনটা মঞ্চে নিয়ে এসেছি (staged), এবারে তা কমিট করার অপেক্ষায়</em>। এবারে আমরা আমাদের পরিবর্তনটার একটা ছবি তুলে রাখবো।</p>



<h4>কোড ৪: ছবি তোলো</h4>



<p>&#8230;এই যে মঞ্চে তোলা বা যোগ করে নেয়া, একে বলা হয় stage করা। এর পরের ধাপটাই <em>ছবি তুলে রাখা</em> (snapshot)। তাহলে বুঝা গেল, staged না হলে, মঞ্চে আনা না হলে মডেলের snapshot নেয়া যায় না।</p>



<p>unstaged ফাইলকে staged করা হয়েছে, পর্দার পেছনের মডেলকে মঞ্চে আনা হয়েছে, এবারে আমাদের দরকার ছবিটা তুলে রাখা, আর একে গিট-এর ভাষায় বলে কমিট করা (commit)। আমরা গত পর্বে দেখেছিলাম, গিট আসলে ফাইল সংরক্ষণ করে না, ছবি তুলে রাখার মতোই ফাইলের অবস্থার রেকর্ড রাখে। কমিট করার মাধ্যমে আমরা আসলে গিটকে বলি: <em>গিট বাবাজি, করো&#8230;</em>। কী করবে? গিটের তো একটাই কাজ, ভার্সন নিয়ন্ত্রণ। সে তখন স্টেজ করা ফাইলগুলোর একটা রেকর্ড রেখে দিবে। এজন্য আমরা টাইপ করবো:</p>



<pre class="wp-block-preformatted">git commit -m "My first commit to learn git with nanodesigns"</pre>



<p>এই কোডে আমরা বললাম, <em>গিট, কমিট করো। [যাতে পরে চিনে নিতে পারি, তাই] কমিটটাকে একটা বার্তা (<code>-m</code>) দিয়ে সংরক্ষণ করে রাখো</em>। বুঝতেই পারছেন, পাশে ডাবল কোটের ভিতরে আমরা বার্তাটাই রেখেছি। &#8230;এবারে আবার <code>git status</code> টাইপ করে এন্টার চাপলে দেখাবে, <em>কমিট করার নতুন কিছুই নেই, প্রজেক্ট ফোল্ডার ফকফকা পরিষ্কার।</em></p>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-commit-nanodesigns.png"><img decoding="async" width="668" height="386" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-commit-nanodesigns.png" alt="git-commit-nanodesigns" class="wp-image-559" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-commit-nanodesigns.png 668w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-commit-nanodesigns-300x173.png 300w" sizes="(max-width: 668px) 100vw, 668px" /></a></figure>



<p class="has-background" style="background-color:#c2ecdb"><strong>সম্পূর্ণ লোকালি গিট:</strong> বারবার একই কথা, গিট দিয়ে লোকালি কাজ করা যায়, ইন্টারনেটের দরকারই নেই। কিন্তু আমরা তো শুরুই করলাম github.com দিয়ে? <em>ক্যামনে কী?</em>। ডেস্কটপে একটা ফোল্ডার খুলুন, নাম দিন &#8216;test&#8217;। ভিতরে একটা টেক্সট ফাইল খুলুন, নাম দিন &#8216;test.txt&#8217;। ঐ ফোল্ডার পাথে git bash খুলুন। লিখুন <code>git init</code>। ব্যস, গিট রেপো তৈরি। এবারে <code>git add -A</code> আর <code>git commit -m "Test"</code>। আমরা সবই পারি&#8230; <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3>হাত নোংরা করি…</h3>



<p>এবারে পটাপট কয়েকবার অনুশীলন করা যাক—</p>



<ol>
<li>HTML ফাইলটা খুলে কিছু পরিবর্তন করে ফেলুন।</li>



<li>এবারে ব্যাশ খুলে লিখুন <code>git status</code>,</li>



<li>স্ট্যাটাস দেখা হয়ে গেলে লিখুন <code>git add test.html</code> কিংবা <code>git add -A</code>, ব্যস হয়ে গেল মঞ্চে তোলা বা স্টেজ করা</li>



<li>এবারে আরেকটা কমিট করতে লিখুন <code>git commit -m "Another commit"</code></li>



<li>আবার git status চেপে অবস্থা দেখুন</li>



<li>ফাইলটা আরো খানিকটা বদলে তারপর
<ul>
<li>স্টেজ করুন, তারপর</li>



<li>আরেকটা কমিট করুন।</li>
</ul>
</li>
</ol>



<p>…সহজ না? ব্যস, আপনার গিট শেখা শেষ। আপনি গিট শিখে গেছেন।</p>



<p>আপনি বলবেন: এক মিনিট; কোড শেখার কথা ছিল ৬টা, শেখা হলো ৪টা, বাকি দুটোর কী হবে? আসলে বাকি দুটো না হলেও আপনি লোকালি গিট ব্যবহার করে এভাবে ভার্সনের পর ভার্সন সংরক্ষণ করতে পারবেন। গিটের পুরো কাজটাই হয় লোকালি, একারণে গিট অনেক দ্রুত। এবং সত্যি কথা হলো, &#8216;তথ্যকণিকা&#8217; সাথে নিয়ে কোড ২, ৩, আর ৪ দিয়েই আপনি লোকালি ভার্সন নিয়ন্ত্রণ করতে পারবেন (সহায়তার দরকার হলে ডানের বাক্সটা দেখুন)। …তবে যেহেতু আমরা সার্ভার থেকে জিনিসপত্তর নামিয়ে নিয়েছিলাম, তাই সার্ভারে আবার সেটা তুলে দেয়ার বিষয় থাকতেই পারে। এজন্য দরকার হবে এই দুটো কমান্ড-</p>



<h4>কোড ৫: ধাক্কা মেরে তুলে দাও</h4>



<p>যেহেতু ইতোমধ্যে আমাদের রেপোযিটরিতে আমরা বেশ কিছু পরিবর্তন করে ফেলেছি, তাই এবারে আমাদের পরিবর্তনটাকে আমাদের সার্ভারে তুলে দেয়া যাক, তাহলে লোকাল পিসিতে কোনো সমস্যার কারণে (যেমন: হার্ডডিস্ক ক্র্যাশ করা) ভার্সনের রেকর্ডগুলো মুছে গেলে আমরা যেন সার্ভার থেকে আবার, বারবার, যখন দরকার Clone করে নিতে পারি। তো, আমাদের লোকাল রেপোতে করা যাবতীয় কমিট সার্ভারে তুলে দিতে হলে লিখতে হবে:</p>



<pre class="wp-block-preformatted">git push origin master</pre>



<p>অর্থাৎ, <em>গিট, মূল যেখান থেকে একে পেয়েছো, সেখানে একে ধাক্কা (push) দিয়ে তুলে দাও</em>। আমরা যখন ক্লোন করে রেখেছিলাম, তখনই সে তার খাতায় জানিয়ে রেখেছিল, তার মূল অস্তিত্ব যে সার্ভারে, সেখানে তার জন্ম হয়েছিল। তাই এখন যখন আমি origin master-এ তুলে দিতে বলেছি, সে বুঝে গেছে, কোন অরিজিনাল মাস্টারে তাকে তুলতে বলেছি।</p>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-push-origin-master-nanodesigns.png"><img decoding="async" width="668" height="384" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-push-origin-master-nanodesigns.png" alt="গিট পুশ ব্যবহার করে গিটহাব রেপোতে আপলোড" class="wp-image-561" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-push-origin-master-nanodesigns.png 668w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-push-origin-master-nanodesigns-300x172.png 300w" sizes="(max-width: 668px) 100vw, 668px" /></a></figure>



<p>গিট তখন আমার গিটহাবের ব্যবহারকারী নাম আর পাসওয়ার্ড জানতে চাইলো, আমি লিখলাম, তারপর এন্টার চাপতেই সে আমার লোকাল পিসিতে করা পরিবর্তনটা সার্ভারে তুলে নিয়ে সার্ভারের রেপোটাকেও সাম্প্রতিক করে নিলো। আমরা সেটা যাচাইও করে নিলাম গিটের হালহকিকত জিজ্ঞেস করে।</p>



<h4>কোড ৬: টান দিয়ে নামিয়ে নাও</h4>



<p>যদি একই রেপোযিটরিতে আপনার বন্ধু কিংবা সহকর্মীও কিছু পরিবর্তন করে থাকেন, তাহলে সেটা আপনার লোকাল পিসিতে থাকার কথা না, কারণ আপনার বন্ধু আপনারই মতো প্রথমে ক্লোন করেছেন, তারপর তাঁর লোকাল পিসিতে কমিট করে তা সার্ভারে push করেছেন। পরদিন আপনি যখন কাজ শুরু করতে বসলেন, তখন যদি আপনি লোকাল পিসিতে থাকা ভার্সন নিয়েই কাজ শুরু করেন, তাহলে আপনার বন্ধু যে আরো কাজ এগিয়ে রেখেছিলেন, তা আপনি পেলেন না, হয়তো আবার আপনি একই কাজই করলেন বসে বসে, শ্রেফ একটা পণ্ডশ্রম হলো। এই ঝামেলা যাতে না হয়, সেজন্য আপনি পরদিন কাজ শুরুর আগে যে কাজটা করবেন, গিটকে বলবেন <em>গিট, টান দিয়ে নামাও আগে&#8230;</em>।</p>



<pre class="wp-block-preformatted">git pull</pre>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-pull-nanodesigns.png"><img decoding="async" width="669" height="389" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-pull-nanodesigns.png" alt="গিট পুল ব্যবহার করে গিটহাব রেপো থেকে পরিবর্তন লোকালে নামানো" class="wp-image-560" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-pull-nanodesigns.png 669w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/11/git-pull-nanodesigns-300x174.png 300w" sizes="(max-width: 669px) 100vw, 669px" /></a></figure>



<p>ব্যস, আপনার বন্ধুর/সহকর্মীর করা কাজ এবারে আপনার রেপোতেও আপডেট হয়ে গেল, এবারে আপনি নিশ্চিন্তে এগিয়ে যাওয়া কাজের উপর কাজ করে আরো এগিয়ে নিতে পারেন কাজকে। তারপর আবার push করে দিলেই আপনার বন্ধুও ওখান থেকে pull করে আপনার আপডেটগুলো পেয়ে যাবেন।</p>



<p>ব্যস, গিট আমাদের আয়ত্বে এসে গেছে। এবারে একে এগিয়ে নিতে হবে আরো অনেকদূর। আজ যে পথচলা শুরু হলো, এটা তো শুরু মাত্র। আমাদের জানার শেষ নেই। merge করা, merge conflict দূর করা, branch নিয়ে কাজ করা, প্রাইভেট রেপোতে কাজ করা, fetch করা, ফেচ করা তথ্যের সাথে পার্থক্য দেখা, অন্যের রেপোতে কাজ করা&#8230; কত রকম কাজ এখনও বাকি&#8230;। তাই এপর্যায়ে বোধহয় একটা উপযুক্ত সময় হয়েছে Scott Chacon-এর গিট পরিচিতিমূলক বক্তৃতাটা দেখে নেয়ার (এই ভিডিওটার লিংক দিয়ে বন্ধু নাজমুস সাকিব সর্বপ্রথম আমার গিট শেখার সূচনা করে, অবশ্য প্রথম হিসেবে একটু কঠিনই লাগছিল, কিন্তু এবারে আপনাদের আর কঠিন লাগবে না):</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Introduction to Git with Scott Chacon of GitHub" width="720" height="405" src="https://www.youtube.com/embed/ZDR433b0HJY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<p><strong>মঈনুল ইসলাম</strong><br><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" href="https://mayeenulislam.github.io/" target="_blank">mayeenulislam.github.io</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3>আরো তথ্য</h3>



<ul>
<li><a href="https://medium.com/@pierreda/understanding-git-for-real-by-exploring-the-git-directory-1e079c15b807" target="_blank" rel="noopener">Understanding git for real by exploring the .git directory &#8211;&nbsp;<em>Pierre de Wulf</em> (Medium.com)</a> &#8211; .git ফোল্ডারটি ঘুরে ঘুরে দেখা যেতে পারে, medium-এ প্রকাশিত এই টিউটোরিয়াল দেখে নিলে।</li>
</ul>



<p class="has-small-font-size"><strong>হালানাগাদ:</strong> ৬ আগস্ট ২০১৭</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/git-basics-2/">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ২</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/git-basics-2/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ১</title>
		<link>https://mayeenulislam.github.io/tuts/git-basics-1/</link>
					<comments>https://mayeenulislam.github.io/tuts/git-basics-1/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Thu, 06 Nov 2014 14:03:14 +0000</pubDate>
				<category><![CDATA[গিট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[ন্যানো বেসিX]]></category>
		<category><![CDATA[প্রাথমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[গিট]]></category>
		<category><![CDATA[গিট ব্যবহারের কৌশল]]></category>
		<category><![CDATA[গিট শেখা]]></category>
		<category><![CDATA[গিটহাব]]></category>
		<category><![CDATA[ভার্ষন কন্ট্রোল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=491</guid>

					<description><![CDATA[<p>গিট কী? কিভাবে গিট ব্যবহার করতে হয়? গিটহাব জিনিসটাইবা কী? কিভাবে গিট শিখবো? ...এই গিট আমরা শিখবো মাত্র ৬টা কমান্ড দিয়ে ইনশাল্লাহ... স্বাগতম</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/git-basics-1/">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ১</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/git-logo.png"><img decoding="async" width="151" height="273" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/git-logo.png" alt="গিট-এর লগো" class="wp-image-493"/></a></figure></div>


<p><strong>গিট (Git)</strong> হলো হাল আমলের সবচেয়ে প্রসিদ্ধ এবং জনপ্রিয় ভার্সন নিয়ন্ত্রণ সফ্‌টওয়্যার। &#8230;ভার্সন কন্ট্রোল বা ভার্সন নিয়ন্ত্রণ কী &#8211; আমরা সেটা দেখবো। আমরা যেহেতু একেবারে প্রাথমিক আলোচনা করছি, তাই অনেক বিষয়ই জানা থাকলেও একটু না একটু আলোচনা করতেই হবে, ধারণা পরিষ্কার হবে, আমরা বিষয়টা বুঝবোও সহজে। মনে রাখতে হবে, এপৃথিবীর সবকিছুর মূলে রয়েছে কিছু কনসেপ্ট বা ধারণা। ধারণাটা বুঝে ফেললে বাকি সব পানিভাত। Git নামটা বুঝার আগে আমি GitHub নামটা শুনেছিলাম, এবং এই দুটোর মধ্যে কোনো পার্থক্য করতে পারতাম না প্রথম প্রথম। আপনাদের মনেও যদি এই প্রশ্নটা থাকে, তাও আমরা পরিষ্কার করবো ইনশাল্লাহ। তবে শর্ত হলো দুটো &#8211;</p>



<ol>
<li>যদি জানতে হয়, শিখতে হয়, পুরো লেখাটা দুই পর্বেরই শেষ পর্যন্ত পড়তে হবে।</li>



<li>আমার প্রতি বিশ্বাস রাখুন, খুব সহজে, সংক্ষেপে গিট বুঝাতে চলেছি, এবং আমার মতো মোটা মাথায় যদি ঢুকতে পারে, আপনাদের জন্য তো চিন্তারই কারণ নেই।</li>
</ol>



<h3>সংক্ষেপে বলো &#8211; সহজে বলো</h3>



<p><em>গিট সম্পর্কে জানতে হলে কি আপনার এইসব ফিরিস্তি পড়তে হবে বসে বসে?</em> &#8230;মোট্টেই না।</p>



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



<ul>
<li><a title="Progit by Scott Chacon - PDF" href="https://progit2.s3.amazonaws.com/en/2014-11-04-ef9e4/progit-en.93.pdf" target="_blank" rel="nofollow noopener">গিট-এর উপর Scott Chacon-এর সম্পূর্ণ বই &#8211; <em>Pro Git</em> &#8211; বিনামূল্যে ডাউনলোড করুন</a></li>



<li><a title="Git Online Tutorial" href="http://try.github.io/" target="_blank" rel="nofollow noopener">অনলাইনে বসে হাতে-কলমে গিট শিখুন &#8211; Try Git থেকে</a></li>



<li><a title="গেটিং গিট রাইট - অ্যাটলাশিয়ান" href="https://www.atlassian.com/git/" target="_blank" rel="nofollow noopener">অ্যাটলাশিয়ান-এর গিট টিউটোরিয়াল</a></li>



<li><a href="https://youtube.com/playlist?list=PLoR56CteKZnC0lBlHdnVnq0J3yDhgbi9w" target="_blank" rel="nofollow noopener">গিট পরিচিতি</a> &#8211; হাসিন হায়দার &#8211; shell ব্যবহার করে গিট ব্যবহারের উপর বাংলায় ভিডিও টিউটোরিয়াল</li>
</ul>



<h3>ভার্সন নিয়ন্ত্রণ কী</h3>



<p>গিট বুঝতে গেলে একটু বুঝে নেয়া দরকার, ভার্সন নিয়ন্ত্রণ বিষয়টা কী। সহজে বলতে গেলে নিচের টেক্সট ফাইলটি (<code>Readme.txt</code>) দেখা যাক:</p>



<figure class="wp-block-table"><table><tbody><tr><td><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/readme-icon.png"><img decoding="async" class="aligncenter wp-image-494" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/readme-icon.png" alt="Readme.txt ফাইলের আইকন" width="45" height="65"></a></td><th>20140919~15:03:40</th><td>This is a readme file</td></tr><tr><td><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/readme-icon.png"><img decoding="async" class="aligncenter wp-image-494" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/readme-icon.png" alt="Readme.txt ফাইলের আইকন" width="45" height="65"></a></td><th>20140919~15:04:27</th><td>A readme file that is changed from its original state</td></tr><tr><td><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/readme-icon.png"><img decoding="async" class="aligncenter wp-image-494" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/readme-icon.png" alt="Readme.txt ফাইলের আইকন" width="45" height="65"></a></td><th>20140919~15:04:55</th><td>A readme file that is changed from its original state. And something appended after the first paragraph.</td></tr></tbody></table></figure>



<p>এই টেক্সট ফাইলটিকে আমরা একটা ছোট্ট উদাহরণ হিসেবে নিয়েছি। এখানে আপনারা ভালো করে লক্ষ করলে দেখবেন তিনটা আলাদা আলাদা সময়ের উল্লেখ আছে, যদিও তারিখটা একই আছে। তিনটা আলাদা সময়ে ফাইলটাতে তিনটা আলাদা পরিবর্তন হয়েছে। প্রথম সময়ে (15:03:40) যে লেখাটা ছিল, পরের সময়েই (15:04:27) সেই লেখাটা প্রায় পুরোপুরি বদলে ফেলা হয়েছে (মানে বাদ দিয়ে, যোগ করা হয়েছে)। আবার তার পরের সময়ে (15:04:55) দ্বিতীয় লেখাটা না ছুঁয়ে তার সাথে নতুন কিছু যোগ করা হয়েছে। মনে রাখতে হবে, এই তিনটা পরিবর্তনই কিন্তু একই ফাইলে হয়েছে, শুধু পার্থক্য হলো, এগুলো বিভিন্ন সময়ে হয়েছে। এখন আমরা এই তিনটা সময়কে যদি এই ফাইলটার তিনটা আলাদা আলাদা অবস্থা ধরে নিই, তাহলে তা-ই কিন্তু ভার্সন (version)।</p>



<p>আমাদের ফাইলটি এখন খুললে আমরা কোন অবস্থায় পাবো, মানে কোন ভার্সনে পাবো? অবশ্যই সর্বশেষ ভার্সনে, মানে 15:04:55 সময়ে আপডেট করা ভার্সনটি। কিন্তু ধরা যাক, কোনো কারণে আমাদের প্রথম বাক্যটার (A readme file that is&#8230;) জায়গায় দরকার একেবারে প্রথমে যে বাক্যটা লিখেছিলাম, সেই বাক্যটা (মানে: This is a readme file বাক্যটা)। এখন তাহলে কোথায় পাবো সেটা? &#8230;কোত্থাও পাওয়া যাবে না, কারণ ফাইলটার পুরোন সেই লেখাটা এখন আর ফাইলে নেই &#8211; ঐ লেখাটা মুছেইতো সর্বশেষ অবস্থা পেলাম। &#8230;এজন্যই দরকার পড়ে ভার্সন কন্ট্রোল বা ভার্সন নিয়ন্ত্রণের, যেখানে আমাদের পুরোন কাজগুলো কখন কেমন ছিল, তার একটা রূপ আমরা পরেও দরকার পড়লে পাই। আবার এমনও হতে পারে, ফাইলের সব লেখা মুছে কেউ সব উল্টাপাল্টা করে ফেললো, তখন ফাইলের বিভিন্ন ভার্সন থাকলে আমরা পুরোন ভার্সনটাতে ফাইলটাকে ফিরিয়ে নিয়ে গিয়ে বিপদ থেকে উদ্ধার পাবো সহজে। এই কালানুগ কিংবা অবস্থানুগ পরিবর্তনের চিত্রটাই হলো ভার্সন, আর উপরে বর্ণিত কারণগুলোর জন্যই মূলত আমাদের ভার্সন নিয়ন্ত্রণের দরকার পড়ে।</p>



<p>আমরা যারা কোড লিখি, ভার্সন নিয়ন্ত্রণ করাটা তাদের খুব কাজে লাগে। হয়তো তিন মাস আগের করা কোনো কাজ, যা পরে ফেলে দিয়েছিলাম, তা-ই আজকে অন্য এক জায়গায় কাজে লাগছে &#8211; তখন পুরোন ভার্সন থেকে আমরা সেটা পেয়ে যেতে পারি। আর, এখন এই গ্লোবালাইজেশনের যুগে আমাদেরকে কখনও কখনও নিজের গন্ডির বাইরেও অন্য কোনো কোডারের সাথে মিলেমিশে কাজ করতে হয়। তখন নিজেদের কাজগুলো এক জায়গায় রেখে দুজনের কাজকে বুঝে-শুনে একত্র করে করে এগিয়ে যাওয়ার একটা দারুণ উপায় হলো ভার্সন নিয়ন্ত্রণ &#8211; বিশেষ করে ডিস্ট্রিবিউটেড ভার্সন নিয়ন্ত্রণ &#8211; যা গিট-এর মাধ্যমে আরো বেগবান হয়েছে। আবার একই অফিসে একাধিক ডেভলপার একই প্রজেক্টে মিলেমিশে কাজ করলেও গিটের তুলনা নেই, তখন একই কাজের পূণরাবৃত্তি রোধ করে যার যার অবস্থান থেকে কাজকে এগিয়ে নিয়ে যাওয়া যায় খুব সহজেই।</p>



<h3>ভার্সন নিয়ন্ত্রণের পুরোন পদ্ধতি ফেলে এখন যখন গিট</h3>



<span id="more-491"></span>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/git-vs-contemporary-vcs.png"><img decoding="async" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/git-vs-contemporary-vcs-300x259.png" alt="অন্যান্য ভার্সন নিয়ন্ত্রণ পদ্ধতির সাথে গিট-এর তুলনা [স্কট চ্যাকন-এর ভিডিও ব্রিফ থেকে স্ক্রিনশট নেয়া]" class="wp-image-499"/></a><figcaption class="wp-element-caption">অন্যান্য ভার্সন নিয়ন্ত্রণ পদ্ধতির সাথে গিট-এর তুলনা [স্কট চ্যাকন-এর ভিডিও ব্রিফ থেকে স্ক্রিনশট নেয়া]</figcaption></figure></div>


<p><em>এই বিষয়টাও কি জানা লাগবে?</em> সত্যি বলতে কি এই বিষয়টাতে একটা মজার ব্যাপার আছে। উপরে ভার্সন নিয়ন্ত্রণ সম্পর্কে আমরা যে ধারণা পেয়েছি, সেই ধারণা অনুযায়ী আপনাকে যদি আপনার ফাইলের ভার্সন নিয়ন্ত্রণ করতে বলা হয়, কী করবেন আপনি? খুব সহজেই করা যায় &#8211; প্রথম লাইনটা লিখে ফাইলটার একটা কপি আলাদা একটা ফোল্ডারে রেখে দিব। তারপর ফাইলটাতে দ্বিতীয় লাইনটা লিখবো, তারপর আরেকটা নতুন ফোল্ডারে ফাইলটা রেখে দিব। এভাবে তিনবার করলে আমাদের একই ফাইলের তিনটা আলাদা আলাদা অবস্থার তিনটা ভার্সন থাকছে &#8211; সব সমস্যা সমাধান! হ্যা, প্রথম দিকে আপনার মতো করেই বিষয়টাকে দেখা হতো &#8211; আর আগেকার ভার্সন নিয়ন্ত্রণ হতোও এই ধারণার উপর, যেমন: SVN। গিট আসার আগে এসভিএন খুব জনপ্রিয় ছিল, যেখানে প্রতিটা আলাদা আলাদা অবস্থার জন্য একেকটা আলাদা আলাদা ফাইল কিংবা লগ রেখে দেয়া হতো ব্যাকআপ হিসেবে। &#8230;এবং সমস্যাটা সেখানেই।</p>



<p>আপনি যে ফাইলে কাজ করেছেন, সেই ফাইলটা ছাড়াও এখন আরো তিনটা ফাইল আপনার হয়ে গেছে। যদি একেকটা ফাইলের আকার 1kb করে হয়, তাহলে আপনার ডিস্কে এখন 4kb (মূল ফাইল + তিনটা ভার্সন) জায়গা জোড়া হয়ে গেছে। বিষয়টা বড় ফাইলের ক্ষেত্রে হলে কী হবে আশা করি আর বুঝিয়ে বলা লাগবে না। আর এখানেই গিট-এর কৃতিত্ব। <strong>গিট এই পদ্ধতিতে ভার্সন নিয়ন্ত্রণ করে না।</strong></p>



<p>গিট এসে বললো কি, <em>আচ্ছা, ভালো করে দেখুন তো, আমাদের ফাইল কি এখানে চারটা? &#8230;না। বরং একটা ফাইলেরই চারটা আলাদা অবস্থা। এক কাজ করি, প্রথম অবস্থার একটা ছবি তুলে রাখি, তারপর আরেকটা, তারপর আরো একটা ছবি (snapshot) তুলে রাখলেই তো হয় &#8211; সব অবস্থার একেকটা ছবি পাওয়া যায়&#8230;।</em> আর গিট করলোও তাই। ফাইলের পর ফাইল জমা না করে গিট করলো কি প্রত্যেকটা অবস্থার একেকটা ছবি তুলে রাখার মতো করে রেকর্ড জমা করে রাখলো, ফলে দেখা গেল, সেই রেকর্ডগুলো দেখলেই আমরা ফাইলের পরিবর্তনটা বুঝতে পারি, গাদা গাদা ফাইল জমা করে রাখার দরকার পড়ে না। একারণেই গিট একটি মডার্ন ভার্সন নিয়ন্ত্রণ পদ্ধতি আর সবাই তাকে গ্রহণও করেছে সাদরে।</p>



<h3>একটু পরিচিতি&#8230;</h3>



<p>একটু বলে নেয়া দরকার, গিট দিয়ে ভার্সন নিয়ন্ত্রণের পুরো বিষয়টাতে আপনার ইন্টারনেট সংযোগ থাকার কিন্তু কোনো দরকার নেই। পুরো বিষয়টাই হয় লোকালি, মানে আপনার পিসিতেই, তাই গিট অনেক দ্রুততর। কিন্তু আপনার যদি নিজের গন্ডির বাইরে কারো সাথে কোড শেয়ার করতে হয়, তখন তো স্বাভাবিকভাবেই ক্লাউডে একটু জায়গা আর যোগাযোগের বিষয়টি থাকবে &#8211; মানে তখন দরকার হবে ইন্টারনেট বা নেটওয়ার্ক ব্যবস্থা। আমাদের জন্য সেরকমই একটা বিনামূল্যের ক্লাউড হলো github.com, যা আসলে সোর্স কোড তুলে রাখার একটা জায়গা, যেখানে গিট দিয়ে ভার্সন নিয়ন্ত্রণ ছাড়াও অন্যান্য কোডারদের সাথে যোগাযোগ, উইকি, কোড সংক্রান্ত ফোরাম ইত্যাদি সুবিধা রয়েছে। তাহলে বোঝা গেল, git হলো ভার্সন নিয়ন্ত্রণের একটা প্রোগ্রাম বা সফ্‌টওয়্যার, আর গিটহাব হলো একটা ওয়েবসাইট, যেখানে গিট ব্যবহার করে ভার্সন নিয়ন্ত্রণ ছাড়াও সামাজিক কোডিং ধারণার মতো একটা ব্যাপার কাজ করে। গিটহাবের লগো বা প্রতীক হলো একটা অক্টোপাস।</p>



<p>গিট নিয়ে কাজ করতে দেখলেই আমরা দেখি অনেক অনেক কোড লেখালেখি, আসলে এটাই হলো গিট নিয়ে কাজ করার সহজতর পন্থা (<em>আমি কি &#8216;সহজতর পন্থা&#8217; বলিনি?</em>)। কিন্তু এছাড়াও গিট ব্যবহারের অনেক GUI বা Graphical User Interface বা দেখে-দেখে-ক্লিক-করে-করে-কাজ-করার প্রোগ্রাম রয়েছে, কিন্তু সেগুলো এখনও হয়তো অতটা সম্পূর্ণ না এবং অনেক ক্ষেত্রে সেগুলোতে সীমাবদ্ধতা আছে, তাই কোডাররা কোড লিখে কাজ করাকেই বেশি পছন্দ করেন। এবং GUI পদ্ধতিতে কাজ করলে একটা সমস্যা হলো একজন এই ইন্টারফেস পছন্দ করেন তো আরেকজন অন্য ইন্টারফেস পছন্দ করেন, তখন আপনার জন্য নিজের অবস্থান তৈরি করাটা কষ্টকর হয়ে উঠতে পারে। কিন্তু যে যেই ইন্টারফেসেই স্বচ্ছন্দবোধ করুন না কেন, যদি তাঁর গিট কোড জানা থাকে, তাহলে যেকোনো পরিবেশ-পরিস্থিতিতেই স্বাভাবিকভাবে, স্বচ্ছন্দে কোড করতে পারবেন তিনি। তাই আমরা আসলে ঐসব ইন্টারফেসভিত্তিক গিট না শিখে খুব সহজে কোড লিখে গিট শিখে নিব।</p>



<h3>গিট ব্যাশ &#8211; কোড লিখে ভার্সন নিয়ন্ত্রণ</h3>



<p>ইংরেজিতে Git Bash লেখা বলে অনেকে একে &#8216;গিট বাশ&#8217; বলেন, কিন্তু আসলে উচ্চারণটা &#8216;গিট ব্যাশ&#8217; হবে। গিট ব্যাশ হলো কমান্ড লাইনে, মানে কোড লিখে গিট ব্যবহার করার পদ্ধতি। এটা গিট ইন্সটল করার সময়ই ইন্সটল করে নেয়া যায়, অথবা উইন্ডোজের সাথে থাকা ডস মোডের কমান্ড প্রম্পট (ম্যাক-এর ক্ষেত্রে টার্মিনাল) ব্যবহার করেও কোড করা যায়। আমরা যেহেতু কোড মোডে কাজ করবো, তাই আমরা গিট ব্যাশ ইন্সটল করে নিবো গিট ইন্সটল করার সময়ই।</p>



<h3>গিট ইন্সটল করা</h3>



<p>মাইক্রোসফ্‌ট অফিস ব্যবহার করতে হলে যেমন তা ইন্সটল করে নিতে হয়, গিট ব্যবহার করার জন্যও তা ইন্সটল করে নিতে হয় &#8211; তবে গিট সফ্‌টওয়্যারটা যথেষ্ট হালকা। এজন্য আমাদেরকে নিচের URL থেকে গিট-এর সাম্প্রতিক সংস্করণটি ডাউনলোড করে নিতে হবে:</p>



<p><a href="https://git-scm.com/downloads" data-type="URL" data-id="https://git-scm.com/downloads" target="_blank" rel="noreferrer noopener"><strong>git-scm.com/downloads</strong></a></p>



<p><strong>ধর্তব্য ধাপ ১:</strong> ডাউনলোড করা ইন্সটলারটি চালু করলে Next চেপে চেপে এগোলে নিচের মতো একটি পর্দা আসবে। এখানে আপনাকে, গিট কোথায় ইনস্টল হবে, তা দেখিয়ে দিতে হবে। C:\ ড্রাইভে ইন্সটল করতেই হবে &#8211; এরকম কোনো বাধ্যবাধকতা নেই।</p>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-01.png"><img decoding="async" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-01-300x233.png" alt="উইন্ডোজে গিট ইনস্টল : ধাপ ১" class="wp-image-495"/></a></figure>



<p></p>



<p><strong>ধর্তব্য ধাপ ২:</strong> Next চাপলে আরেকটি পর্দা আসবে, যেখানে আপনাকে গিট-এর কম্পোনেন্ট মানে দরকারি অংশগুলো বাছাই করে নিতে হবে। এখানে আপনি Windows Explorer Integration অংশে Git Bash here এবং Git GUI here পছন্দ করে নিন &#8211; আমরা ব্যাশ নিয়ে কাজ করলেও GUI-টা পাশাপাশি থাকবে, এবং ঠিকমতো ইন্সটল হলে মাউসের রাইট বাটনের সাথে এই দুটো অপশন যোগ হয়ে যাবে। Next চাপুন।</p>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-02.png"><img decoding="async" width="300" height="233" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-02-300x233.png" alt="উইন্ডোজে গিট ইনস্টল : ধাপ ২" class="wp-image-498" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-02-300x233.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-02.png 505w" sizes="(max-width: 300px) 100vw, 300px" /></a></figure>



<p></p>



<p><strong>ধর্তব্য ধাপ ৩:</strong> PATH বাছাই পাতায় Use Git from Git Bash only বাছাই করে Next চাপুন।</p>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-03.png"><img decoding="async" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-03-300x233.png" alt="উইন্ডোজে গিট ইনস্টল : ধাপ ৩" class="wp-image-496"/></a></figure>



<p></p>



<p><strong>ধর্তব্য ধাপ ৪:</strong> Line ending conversions-এ Checkout Windows-style, commit Unix-style line endings বাছাই করে Next চাপুন।</p>



<figure class="wp-block-image"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-04.png"><img decoding="async" width="300" height="233" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-04-300x233.png" alt="উইন্ডোজে গিট ইনস্টল : ধাপ ৪" class="wp-image-497" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-04-300x233.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/install-git-on-windows-04.png 505w" sizes="(max-width: 300px) 100vw, 300px" /></a></figure>



<p></p>



<p>ব্যস, গিট ইন্সটল হয়ে গেল।</p>



<p>এবারে গিটকে নিজের, সম্পূর্ণ আপন করে নেয়ার পালা। Start » Git » Git Bash-এ ক্লিক করুন। ব্যস, উইন্ডোজের ডস মোডের মতো একটা কমান্ড কনসোল খুলবে, এখানেই আমরা কাজ শুরু করবো। গিটকে আপন করে নেবার জন্য দুটো কাজ করতে হবে:</p>



<ul>
<li>গিটকে নিজের নামটা বলে দেয়া</li>



<li>গিটকে নিজের ইমেইল ঠিকানাটা দিয়ে দেয়া</li>
</ul>



<p>ধরা যাক আমার নাম <code>Someone</code> আর ইমেইল ঠিকানা হলো <code>someone@example.com</code>, তাহলে যা লিখতে হবে-</p>



<pre class="wp-block-preformatted">git config --global user.name "Someone"
git config --global user.email "someone@example.com"
</pre>



<p>ব্যস গিট এবার আপনার, শ্রেফ আপনার জন্য প্রস্তুত। <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> এই কাজটা বারবার করতে হবে না, ব্যস এই একবারই।</p>



<p>গিট ব্যবহারের প্রাথমিক জ্ঞানের আজকের আলোচনা এই পর্যন্তই। এখানে আমরা গিট সম্পর্কে প্রায় সম্পূর্ণ অন্তর্নিহীত ধারণা পেয়ে গেলাম। আগামী পর্বে আমরা গিট ব্যবহার করে ভার্সন নিয়ন্ত্রণ করা শিখে নিব মাত্র ৬টা কমান্ড দিয়ে, ইনশাল্লাহ।</p>



<p>আগামী পর্বে সমাপ্য&#8230;</p>



<p class="has-text-align-right"><strong><a href="https://mayeenulislam.github.io/tuts/git-basics-2/">পরের পর্ব »</a></strong></p>



<p>&#8211; <strong>মঈনুল ইসলাম</strong><br><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" href="https://mayeenulislam.github.io/" target="_blank">mayeenulislam.github.io</a></p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/git-basics-1/">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ১</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/git-basics-1/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
	</channel>
</rss>
