<?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/git/feed/" rel="self" type="application/rss+xml" />
	<link>https://mayeenulislam.github.io/tuts/tag/git/</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/git/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>গিটহাবে স্ট্যাটিক ডেমো সাইট বানানোর কৌশল</title>
		<link>https://mayeenulislam.github.io/tuts/hosting-github-static-pages/</link>
					<comments>https://mayeenulislam.github.io/tuts/hosting-github-static-pages/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Wed, 07 Dec 2016 10:12:33 +0000</pubDate>
				<category><![CDATA[গিট টিউটোরিয়াল]]></category>
		<category><![CDATA[গিটহাব টিউটোরিয়াল]]></category>
		<category><![CDATA[গিট]]></category>
		<category><![CDATA[গিটহাব]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=1085</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/hosting-github-static-pages/">গিটহাবে স্ট্যাটিক ডেমো সাইট বানানোর কৌশল</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>আপনি HTML, CSS, JavaScript দিয়ে একটা অপূর্ব কাজ করে ফেলেছেন। সেটা ছড়িয়ে দেবার জন্য Github-এ একটা রেপোযিটরিও করে ফেলেছেন এবং সেখানে আপলোডও করে দিয়েছেন। লোকজন এখন চাইলেই আপনার রোপোযিটরিটা ফর্ক করতে পারছেন, ক্লোন করতে পারছেন, ডাউনলোডও করতে পারছেন। কিন্তু একটা ব্যাপারে ঠিক মন ভরছে না &#8211; যদি কাজটার একটা ডেমো দেখানো যেত অনলাইনেই? তাহলে তো সোনায় সোহাগা হতো।</p>



<p>আমরা এখানে জানবো: কিভাবে গিটহাবে একটা স্ট্যাটিক ডেমো সাইট তৈরি করা যায়।</p>



<p>একটু বলে রাখি, বারবার স্ট্যাটিক সাইট কথাটা কেন বলছি? স্ট্যাটিক সাইটে সার্ভার সাইড কোনো কোড থাকছে না, পিওর এইচটিএমএল, সিএসএস আর জাভাস্ক্রিপ্ট দিয়ে আপনি সাইটটা তৈরি করছেন, আর দেখাচ্ছেন। কারণ ডাটাবেজ স্টোর করার মতো কোনো জায়গা আমরা পাচ্ছি না।</p>



<h3>যা যা জানা থাকা লাগবে</h3>



<p>অন্তত একটা HTML ফাইল বানানো জানা লাগবে। এছাড়া, যখন যা জানার দরকার পড়বে, একটু ঢু মেরে সেটা জেনে নিলেই চলবে।</p>



<h3>কিভাবে কী করতে হয়?</h3>



<h4>প্রথম ধাপ: গিটহাবে কোড ডিপ্লয়</h4>



<p>কাজটা খুবই সহজ।</p>



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



<p> ধরে নিচ্ছি আপনার একটা স্ট্যাটিক সাইট আগে থেকেই বানানো আছে যেখানে একটা <code>index.html</code> আছে। (যেমন <a href="https://github.com/mayeenulislam/tuts-nano-github-pages" target="_blank" rel="noopener">আমরা একটা স্ট্যাটিক সাইট বানিয়ে রেখেছি</a>)</p>



<p>এই ডিরেক্টরিটিকে এবারে একটা গিট রিপো বানিয়ে ফেলি। গিট কিভাবে ব্যবহার করতে হয়, জানা না থাকলে চট করে একটা ঢু মেরে শিখে ফেলা যাক:</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-tuts-by-mayeenul-islam wp-block-embed-tuts-by-mayeenul-islam"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="LgYPwCO2Ur"><a href="https://mayeenulislam.github.io/tuts/git-basics-1/">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ১</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" title="&#8220;গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ১&#8221; &#8212; Tuts by Mayeenul Islam" src="https://mayeenulislam.github.io/tuts/git-basics-1/embed/#?secret=droFqhee0M#?secret=LgYPwCO2Ur" data-secret="LgYPwCO2Ur" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>এবারে git bash-এ কমান্ড লিখি:</p>



<pre class="wp-block-preformatted">git init
git add -A
git commit -m "Initial Commit"</pre>



<p>এবারে গিটহাবে প্রোজেক্টটা তুলে দিতে হলে গিটহাবে গিয়ে একটা ফাঁকা রিপো তৈরি করে নিই: New Repository-তে গিয়ে শুধু একটা নাম দেই, আর কিচ্ছু দেয়া লাগবে না। এবারে Create Repository-তে ক্লিক করলে আপনাকে ইন্সট্রাকশন দিবে কী করা লাগবে। সেখান থেকে এই লাইনটা লেখা যাক গিট ব্যাশ-এ:</p>



<pre class="wp-block-preformatted">git remote add origin https://github.com/{username}/{repository-path}.git</pre>



<p>বুঝতেই পারছেন, এখানে <code>{username}</code> আর <code>{repository-path}</code> আপনার পাথ আর ইউযারনেম দিয়ে পূরণ করবেন। এতে গিটহাবের ঐ রিপোযিটোরিটা আমরা রিমোট হিসেবে যোগ হয়ে যাবে। ব্যাস, এবার আপনার কোডগুলো গিটহাবে তুলে দিন:</p>



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



<h4>শেষ ধাপ: গিট পেজ তৈরি করা</h4>



<h5><strong>পদ্ধতি ১ : মাস্টার ব্রাঞ্চকেই ব্যবহার করা</strong></h5>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/11/github-pages-setup.png"><img decoding="async" width="300" height="180" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/11/github-pages-setup-300x180.png" alt="গিটহাব প্যাজেস সেটিংসমূহ" class="wp-image-1090" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/11/github-pages-setup-300x180.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/11/github-pages-setup.png 750w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption class="wp-element-caption">গিটহাব প্যাজেস সেটিংসমূহ</figcaption></figure></div>


<p>যেহেতু আমরা আমাদের <code>master</code> ব্রাঞ্চে যা যা আছে, সেটাকেই Demo আকারে দেখাতে চাচ্ছি, আমাদের জন্য কাজটা খুব সহজ। গিটহাবে আপনার রেপোযিটোরি&#8217;র Settings পাতায় যান (ইউআরএলটা এরকম হবে: <code>https://github.com/{username}/{repository-name}/settings</code>)</p>



<p>এবারে নিচের দিকে Github Pages ব্লকের Source অংশের None লেখা ড্রপডাউন থেকে বাছাই করে দিন <code>master branch</code>। তারপর Save বোতাম চাপুন। কাজ শেষ।</p>



<p>আপনার Demo সাইটটা আপনার <code>master</code> ব্রাঞ্চের তথ্য (<code>index.html</code>) নিয়ে তৈরি হয়ে গেছে। দেখা যাবে এরকম একটা পাথে:</p>



<pre class="wp-block-preformatted">https://{username}.github.io/{repository-name}/</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>



<h5><strong>পদ্ধতি ২ : ব্রাঞ্চ করে নেয়া</strong></h5>



<p>যদি আপনি চান যে, ডেমো পাতাটা সম্পূর্ণ অন্যভাবে করতে, মূল কোডের সাথে মিল না রাখতে, কিংবা কিছুটা ভিন্ন রাখতে, তাহলে আলাদা একটি ব্রাঞ্চ তৈরি করে সেখানে দেখিয়ে দেয়াটাই উত্তম হবে। এমতাবস্থায় আমরা গিট রিপোযিটোরিতে একটা ব্রাঞ্চ তৈরি করবো। যদি গিটে ব্রাঞ্চিং কিভাবে করতে হয়, জানা না থাকে, চট করে শিখে নেয়া যাক:</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-tuts-by-mayeenul-islam wp-block-embed-tuts-by-mayeenul-islam"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="LfhDqJLVlD"><a href="https://mayeenulislam.github.io/tuts/git-branching/">গিট দিয়ে ভার্ষন নিয়ন্ত্রণ &#8211; git branch</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" title="&#8220;গিট দিয়ে ভার্ষন নিয়ন্ত্রণ &#8211; git branch&#8221; &#8212; Tuts by Mayeenul Islam" src="https://mayeenulislam.github.io/tuts/git-branching/embed/#?secret=Z5YeYl9Tvd#?secret=LfhDqJLVlD" data-secret="LfhDqJLVlD" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>এই ব্রাঞ্চটা দিয়ে গিটহাবে Git Pages কাজ করে, আর ব্রাঞ্চের নামটাও নির্ধারিত <code>gh-pages</code>। সুতরাং চট করে গিট ব্যাশে লিখে ফেলুন:</p>



<pre class="wp-block-preformatted">git checkout -b gh-pages</pre>



<p>হলো কী &#8211; <code>gh-pages</code> নামে একটা গিট ব্রাঞ্চ তৈরি হয়ে গেলো আর আমরা সেই ব্রাঞ্চে চলেও এলাম। যদি গিট ব্রাঞ্চ আমরা বুঝে থাকি, তাহলে জানি, <code>master</code> ব্রাঞ্চে যা আছে এই নতুন ব্রাঞ্চেও এখন তা তা আছে। অর্থাৎ আমাদের <code>index.html</code> ফাইলটাও এখানে আছে। এই ব্রাঞ্চে আপনি যেমন যেমন চাচ্ছেন, তেমন তেমন ইচ্ছেমতো পরিবর্তন করে নিন, আপনার ডেমো সাইটটা। তারপর গিট অ্যাড আর গিট কমিট করে গিট পুশ করে দিন নতুন ব্রাঞ্চটা:</p>



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



<p>এটা স্বয়ংক্রীয়ভাবেই নিম্নোক্ত পাথে আপনার ডেমো সাইটটা তৈরি করে দিবে:</p>



<pre class="wp-block-preformatted">https://{username}.github.io/{repository-name}/</pre>



<h4>বাড়তি তথ্য</h4>



<ul>
<li>ডেমো সাইটের জন্য <code>gh-pages</code> ব্রাঞ্চটা যে বাধ্যতামূলক (ম্যান্ডেটরি) না, সেটা আশা করি বুঝে ফেলেছেন। সেক্ষেত্রে যে ব্রাঞ্চ থেকেই ডেমো দেখান না কেন, তা Settings পাতায় বাছাই করে দিলেই কাজ শেষ।</li>



<li>আপনি যদি চান নিজস্ব ডোমেইন থেকেও ডেমো পাতাটি দেখা যাক, যেমন: example.com লিখে এন্টার করলেও যেন এই সাইটটা দেখা যাকে, তাহলে সেটাও করতে পারবেন: Custom domain অংশে <code>http://example.com/</code> লিখে দিতে হবে। কিন্তু শর্ত হচ্ছে ঐ ডোমেইনের CNAME রেকর্ডে বলে দিতে হবে যে, এই হোস্টটা ব্রাউজ করতে হবে।</li>



<li>আপনি যদি <a href="https://jekyllrb.com/" target="_blank" rel="noopener">Jekyll^</a> কিংবা অন্য কোনো স্ট্যাটিক সাইট জেনারেটরে অভ্যস্থ হন, তাহলে নিশ্চিন্তে আপনি সেসব সাইটও গিটহাব পেজেস-এ ডিপ্লয় করতে পারেন। এছাড়া গিটহাবেই Automatic Page Generator রয়েছে, সেটা দিয়েও আপনি Markdown সিনট্যাক্সে আপনার স্ট্যাটিক সাইট বানিয়ে নিতে পারেন।</li>
</ul>



<h4>উপসংহার</h4>



<p>সুতরাং আশা করি এখন থেকে আপনার করা HTML, CSS, JavaScript-এর স্ট্যাটিক কাজগুলোর একটা ডেমো আমরা অনায়াসে দেখতে পারবো ইনশাল্লাহ।</p>



<p>আমাদের স্ট্যাটিক সাইটের ডেমোটা দেখা যাক:</p>



<p><a href="https://mayeenulislam.github.io/tuts-nano-github-pages/">https://mayeenulislam.github.io/tuts-nano-github-pages/</a></p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/hosting-github-static-pages/">গিটহাবে স্ট্যাটিক ডেমো সাইট বানানোর কৌশল</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/hosting-github-static-pages/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>গিট দিয়ে ভার্ষন নিয়ন্ত্রণ &#8211; git branch</title>
		<link>https://mayeenulislam.github.io/tuts/git-branching/</link>
					<comments>https://mayeenulislam.github.io/tuts/git-branching/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Sun, 21 Feb 2016 15:45:12 +0000</pubDate>
				<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=850</guid>

					<description><![CDATA[<p>গিট দিয়ে ভার্ষন নিয়ন্ত্রণ যখন জেনে গেছি, তখন গিট দিয়ে ব্রাঞ্চ বা শাখা তৈরি করার সহজ কিন্তু অপূর্ব আর শক্তিশালী ফিচারটা জেনে নেয়া যায়ই... স্বাগতম</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/git-branching/">গিট দিয়ে ভার্ষন নিয়ন্ত্রণ &#8211; git branch</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>গিট নিয়ে ভয়-ভীতি আমরা এবারে কাটিয়ে উঠেছি। এখন সময় এসেছে এর নতুন নতুন ফিচার জানার। তাই এই ধারাবাহিক আলোচনাকে &#8220;একেবারে প্রাথমিক জ্ঞান&#8221; আর বলছি না, বরং গিট নিয়ে খেলাধুলা বলা যেতে পারে। কিন্তু যারা এখনও গিট নিয়ে ভয়-ভীতি কিংবা দোটানার মধ্যে আছেন, এবারে তাদেরকে অনুরোধ করবো আমাদের পূর্বতন দুটো টিউটোরিয়াল দেখে নেয়ার জন্য, আগে (কথা দিচ্ছি এর চেয়ে সহজ করে কেউ বলবে না কখনও):</p>



<ul>
<li><a href="https://mayeenulislam.github.io/tuts/git-basics-1/" target="_blank" rel="noreferrer noopener">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ১</a>, এবং</li>



<li><a href="https://mayeenulislam.github.io/tuts/git-basics-2/" target="_blank" rel="noreferrer noopener">গিট ব্যবহারের একেবারে প্রাথমিক জ্ঞান : পর্ব ২</a></li>
</ul>



<p>এবারে আমরা জানি গিট কাকে বলে, কত প্রকার, কী কী 🙂 । তাই আজকে আমরা আলোচনা করছি গিট ব্রাঞ্চিং নিয়ে।</p>



<p>অন্যান্য ভার্ষন নিয়ন্ত্রণ সফ্‌টওয়্যারের সাথে গিট-এর পার্থক্য করতে গেলে অনেককেই বলতে শুনি যে, গিটে ব্রাঞ্চিং যথেষ্ট cheap। এই cheap কথাটার&nbsp;মানে যেমন স্বল্প খরচসাপেক্ষ, তেমনি এর দ্বারা বোঝায় এটা যথেষ্ট সহজ, দ্রুত এবং ঝামেলাহীনও। স্বস্তা, কারণ খুব অল্প রিসোর্স ব্যবহার করেই গিট ব্রাঞ্চিং করা যায় অগণিত।</p>



<p>কী এই গিট ব্রাঞ্চিং? ব্রাঞ্চ শব্দটা শুনলেই ব্যাংকের ব্রাঞ্চের কথা মনে হয় না? ঠিকই আছে। ব্রাঞ্চিং সেরকমইতো।&nbsp;এবারে একটা ঘটনা দেখা যাক:</p>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching.jpg" rel="attachment wp-att-853"><img decoding="async" width="200" height="300" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching-200x300.jpg" alt="গিট-এ ব্রাঞ্চিং-এর সহজ চিত্র" class="wp-image-853" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching-200x300.jpg 200w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching.jpg 668w" sizes="(max-width: 200px) 100vw, 200px" /></a><figcaption class="wp-element-caption">গিট-এ ব্রাঞ্চিং-এর সহজ চিত্র</figcaption></figure></div>


<p>আমি <strong>মূল রাস্তা</strong> ধরে হাঁটছি। আমার সাথে <strong>২জন</strong>&nbsp;বন্ধু আছেন।</p>



<p>আমি মূল রাস্তা ধরে আরো এক মাইল এগোলাম, এবারে আমার সাথে আরো ২জন&nbsp;বন্ধু যোগ দিলেন।&nbsp;অর্থাৎ মোট বন্ধুর সংখ্যা&nbsp;<strong>৪জন</strong>।</p>



<p>এবারে আমি রাস্তা বদল করলাম। <strong>ডানের গলি</strong>তে ঢুকে গেলাম। এই গলিতে আমি আরো ২জন&nbsp;বন্ধু জুটিয়ে নিলাম। মোট বন্ধু: [আগের] ৪জন + [নতুন] ২জন = <strong>৬জন</strong>।</p>



<p>আরো এক মাইল এগোলাম, আরো ৪জন&nbsp;বন্ধু জুটিয়ে&nbsp;নিলাম, মোট বন্ধু&nbsp;হলেন ৬+৪=<strong>১০জন</strong>।</p>



<p>এমন সময় হঠাৎ, পথে আপনার সাথে দেখা। আপনি জিজ্ঞেস করলেন, আপনি এই রাস্তায় কেন? আপনার মূল রাস্তা কোথায়? আমি বললাম, সেটাতো ফেলে এসেছি। আপনি বললেন, বাহ, দারুণ! ১০জন বন্ধু নিয়ে পথ চলছেন!&nbsp;<strong>মূল রাস্তা</strong>তে&nbsp;আপনার কয় জন বন্ধু&nbsp;ছিলেন? বললাম, ৪জন। কেন, ১০জন নয় কেন? কারণ, বাকি ৬জন যে আমি <strong>ডানের গলি</strong>তে পেয়েছি।</p>



<p>হ্যা, ব্রাঞ্চিং-এর ক্ষেত্রে এই ব্যাপারটাই ঘটে। যতক্ষণ পর্যন্ত আপনি মূল রাস্তা ধরে হাঁটছেন, ততক্ষণ পর্যন্ত যা ঘটেছে, গলিপথে বা শাখা পথে ঢোকার সময় শাখা পথ কিন্তু ততটুকুর খবরই জানে। আর গলিপথে ঢুকে আপনি কতটুকু এগিয়েছেন, কী করেছেন, মূল পথ কিন্তু তার খবর জানে না।</p>



<p>স্বস্তাশ্রেণীর&nbsp;একটা উদাহরণ হয়ে গেল, তবু এটা বুঝলে ব্রাঞ্চিং-এর কিছুটা ধারণা পাওয়া যাবে। &#8230;কথা না বাড়িয়ে এবারে হাত নোংরা করা যাক&#8230;</p>



<p></p>



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



<h3>গিট ব্রাঞ্চ তৈরি করা</h3>



<p>নিজের কম্পিউটারে&nbsp;একটা ডিরেক্টরি (ফোল্ডার)&nbsp;তৈরি করি test নামে। এই ডিরেক্টরিতে ১টা&nbsp;ফাইল তৈরি করি <code>index.html</code> এবং সেই ফাইলে কিছু একটা লিখে দিই।&nbsp;যা ইচ্ছা লিখতে না চাইলে নিচের মতো লিখে একটা ভ্যালিড HTML ফাইল বানিয়ে নেয়া যেতে পারে:</p>



<pre class="wp-block-preformatted">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
   &lt;head&gt;
      &lt;meta charset="UTF-8"&gt;
      &lt;title&gt;Testing Git Branching&lt;/title&gt;
   &lt;/head&gt;
   &lt;body&gt;
      &lt;h1&gt;Testing Git Branching&lt;/h1&gt;
   &lt;/body&gt;
&lt;/html&gt;</pre>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-init-and-first-commit.png" rel="attachment wp-att-856"><img decoding="async" width="300" height="221" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-init-and-first-commit-300x221.png" alt=" গিট রেপোযিটরি তৈরি এবং প্রথম কমিট করা" class="wp-image-856" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-init-and-first-commit-300x221.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-init-and-first-commit-768x567.png 768w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-init-and-first-commit.png 810w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption class="wp-element-caption"><strong>পর্দাদৃশ্য ১:</strong> গিট রেপোযিটরি তৈরি এবং প্রথম কমিট করা</figcaption></figure></div>


<p>ব্রাউযারে <code>index.html</code> ফাইলটা খুললে দেখা যাবে, সাদা দৃশ্যপটে কালো লেখা স্পষ্ট দেখা যাচ্ছে। এবারে সেই ডিরেক্টরি-পাথে git bash চালু করি (মাউসের ডান বোতামে git bash here চেপে &#8211; <a href="https://mayeenulislam.github.io/tuts/git-basics-2/" target="_blank" rel="noreferrer noopener">বিস্তারিত</a>)। যেহেতু এটা শ্রেফ একটা ডিরেক্টরি, তাই একে আগে গিট রেপোযিটোরিতে রূপান্তর করি: ব্যাশ-এ লিখি: <code>git init</code>। ব্যস, আমাদের ১টা ফাইলসমৃদ্ধ ডিরেক্টরিটা একটা গিট রেপোযিটোরিতে বদলে গেলো। আমরা এবারে আমাদের প্রথম commit করি, মানে আক্ষরিক অর্থে ভার্ষন নিয়ন্ত্রণ শুরু করি&#8230;। (দেখুন <strong>পর্দাদৃশ্য ১</strong>)</p>



<p>ভালো করে খেয়াল করে দেখুন, ঠিক প্রথম লাইনটার পরে পরের লাইনগুলোতে কোনো বিশেষ কিছু আপনার চোখে পড়ছে কিনা&#8230; &#8216;<strong><span style="color: #00ccff;">(master)</span></strong>&#8216; কথাটা যোগ হয়েছে প্রথম লাইনের পরে, এবং সেটা প্রতিবারই আপনার সাথে সাথে চলছে।</p>



<p>কী এই master?</p>



<h4><strong>কমান্ড: <code>git branch</code></strong></h4>



<p>কমান্ড দিই:</p>



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



<p>অর্থাৎ, আমরা গিটকে বললাম, গিট তোমার ব্রাঞ্চের খবর জানাও। এবারে সে আমাদের দেখাবে:</p>



<pre class="wp-block-preformatted">* master</pre>



<p>আবারো সেই master।&nbsp;মানে সে জানালো, তোমার ব্রাঞ্চ বা শাখা হচ্ছে master। ঠিকইতো আছে, এখনও তো আমি মূল রাস্তায় আছি। তো আমাকে যদি কেউ জিজ্ঞেস করে, কোন রাস্তায়? আমি বলবো, মূল রাস্তায় (master)&nbsp;&#8211;&nbsp;এর বাইরে তো কিছু বলার প্রশ্নই উঠে না, তাই না?</p>



<p>এবারে চলুন আমরা ব্রাঞ্চ তৈরি করে দেখি&#8230; ধরা যাক, আমরা ঠিক করলাম, এবারে আমরা এই প্রোজেক্টে কিছু স্টাইলিং যোগ করবো। কিন্তু মূল প্রোজেক্টটাতে সেই স্টাইলিং নিবো কি নিবো না, তা এখনও সিদ্ধান্ত নিতে পারিনি আমরা। হয়তো, এমন হতে পারে, স্টাইল ছাড়াই প্রোজেক্টটা আমাদের ঠিকই আছে। কিন্তু স্টাইল করলে কেমন লাগবে, সেটা একটু পরখ করে দেখতেও চাচ্ছি। যদি ভালো লেগে যায়, তাহলে কাজে লাগালেও লাগাতে পারি আমরা। &#8230;তো এরকম অবস্থায় আমরা style নামে একটা ব্রাঞ্চ তৈরির সিদ্ধান্ত নিয়েছি।</p>



<h4><strong>কমান্ড: <code>git branch &lt;branch-name&gt;</code></strong></h4>



<p>ব্যাশে লিখলাম:</p>



<pre class="wp-block-preformatted">$ git branch style</pre>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching.png" rel="attachment wp-att-865"><img decoding="async" width="300" height="211" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching-300x211.png" alt="পর্দাদৃশ্য ২: গিট ব্রাঞ্চিং" class="wp-image-865" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching-300x211.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/git-branching.png 675w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption class="wp-element-caption"><strong>পর্দাদৃশ্য ২:</strong> গিট ব্রাঞ্চিং</figcaption></figure></div>


<p>সে আমাদের কিছু না বললেও আসলে style নামে একটা ব্রাঞ্চ তৈরি করা শেষ। আপনার নামের ডানদিকে, এখনও দেখুন (master) কথাটাই আছে, তার মানে আমরা এখনও master ব্রাঞ্চেই রয়েছি। কিন্তু আমাদেরতো নতুন খোলা style ব্রাঞ্চে কাজ করার কথা। আসুন তবে নতুন পথ ধরি&#8230;</p>



<h3>গিট ব্রাঞ্চ অদলবদল</h3>



<h4><strong>কমান্ড: <code>git checkout&nbsp;&lt;branch-name&gt;</code></strong></h4>



<p>ব্যাশে লিখি:</p>



<pre class="wp-block-preformatted">$ git checkout style</pre>



<p class="has-background" style="background-color:#c2ecdb"><strong>টিপ্‌স:</strong><br>ব্রাঞ্চ তৈরি আর বদল করার জন্য দুটো কমান্ড শিখেছি। শর্টকাটে একটা কমান্ড দিয়েও কাজটা করা যায়, লিখতে হবে:<br><code>git checkout -b &lt;branch-name&gt;</code></p>



<p>সে বলছে, হ্যা, style ব্রাঞ্চে বদলে নিয়েছি। আমরা কিন্তু এবারে নতুন রাস্তায় উঠে গেছি। নতুন রাস্তাকে যদি জিজ্ঞেস করি, তোমার কাছে&nbsp;কয়টা ফাইল আছে? বলবে, ১টা (<code>index.html</code>)। তোমার কাছে কয়টা commit রেকর্ড আছে?&nbsp;বলবে, ১টা। আমরা যে আসলেই master ব্রাঞ্চ থেকে বদলে style ব্রাঞ্চে চলে এসেছি, সেটা আমরা এবারে নিজের নামের ডানদিকে দেখতেও পাচ্ছি, (master) নামটা বদলে &#8216;<strong><span style="color: #00ccff;">(style)</span></strong>&#8216; হয়ে গেছে। তবু আমরা একটু যাচাই করে দেখলাম:</p>



<pre class="wp-block-preformatted">$ git branch
  master
* style</pre>



<p>আশা করি বুঝে গেছি যে, ঐ স্টারটা (asterisk &#8211; <code>*</code>) আসলে আমাদের দেখায় আমার সক্রীয় ব্রাঞ্চ কোনটা।</p>



<p>এবারে আমাদের ডিরেক্টরিতে (ফোল্ডারে)&nbsp;একটা ফাইল তৈরি করলাম, <code>style.css</code> এবং তাতে লিখলাম:</p>



<pre class="wp-block-preformatted">body{
&nbsp; &nbsp;background-color: black;
&nbsp; &nbsp;color: white;
}
</pre>



<p>আর <code>index.html</code> ফাইলটা খুলে স্টাইলশিটটা লিংক&nbsp;করে দিলাম, <code>&lt;title&gt;</code> ট্যাগের ঠিক নিচেই লিখলাম:</p>



<p><code>&lt;link rel="stylesheet" href="style.css"&gt;</code></p>



<p>ব্যস, আমাদের সাইটে একটা দারুণ স্টাইলিং করা হয়ে গেল 🙂 ।</p>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/working-on-git-branch.png" rel="attachment wp-att-864"><img decoding="async" width="300" height="235" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/working-on-git-branch-300x235.png" alt="পর্দাদৃশ্য ৩: গিট ব্রাঞ্চে কাজ করা" class="wp-image-864" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/working-on-git-branch-300x235.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/working-on-git-branch-768x602.png 768w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/02/working-on-git-branch.png 810w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption class="wp-element-caption"><strong>পর্দাদৃশ্য ৩:</strong> গিট ব্রাঞ্চে কাজ করা</figcaption></figure></div>


<p>এবারে ব্যাশে <code>git status</code> জানতে চাইলে দেখাবে <code>index.html</code> পরিবর্তন হয়েছে, আর <code>style.css</code> নতুন যোগ হয়েছে, তাই untracked। আমরা সব পরিবর্তনকে স্টেজ করে তারপর আরেকটা কমিট করি (ধরা যাক, কমিট বার্তা দিয়েছি: &#8220;styles added&#8221;)। এবারে গিটের লগ (কমান্ড: <code>git log</code>) পরখ করলে দেখা যাবে দুটো কমিট হয়েছে:</p>



<ul>
<li>একটা কমিট হয়েছিল master ব্রাঞ্চে থাকা অবস্থায় (বার্তা: &#8220;Initial Commit&#8221;)</li>



<li>আরেকটা কমিট এইমাত্র করলাম, style ব্রাঞ্চে থাকা অবস্থায় (বার্তা: &#8220;styles added&#8221;)</li>
</ul>



<p>আমরা যা শিখেছিলাম, সব মিলে গেল। মূল রাস্তা পর্যন্ত যা যা হয়েছিল, সব শাখা রাস্তায় এসেছে। আর শাখা রাস্তায়ও নতুন বন্ধু জুটিয়ে নিয়েছি (নতুন ফাইল কিংবা নতুন লাইন কিংবা পরিবর্তিত লাইন)। ব্রাউযারে <code>index.html</code> ফাইলটা খুললে দেখা যাবে, কালো দৃশ্যপটে সাদা লেখা স্পষ্ট দেখা যাচ্ছে।</p>



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



<p>আসল মজাটা এখনও শুরু হয়নি। আসল মজাটা দেখা যাবে, যদি আমরা এখন আবার master ব্রাঞ্চে ফিরে যাই। ব্যাশ খুলে লিখলাম:</p>



<pre class="wp-block-preformatted">$ git checkout master</pre>



<p>master ব্রাঞ্চে নিয়ে চলো। সে বরাবরের মতোই বলবে:</p>



<pre class="wp-block-preformatted">Switched to branch 'master'</pre>



<p>হ্যা, master ব্রাঞ্চে, মানে মূল রাস্তায় ফিরে এসেছি। এবারে ডিরেক্টরিটা (ফোল্ডার) খুলে একটু দেখুন তো&#8230;</p>



<p><span style="color: #ff6600;"><em>অ্যাবরাক্যাডাবরা! ছুহ মন্তর ছুহ, যাদু মন্তর ছুহ!</em></span></p>



<p>আমাদের <code>style.css</code> হাওয়ায় মিলিয়ে গেছে। শুধু তা-ই নয়, <code>index.html</code> ফাইলটা খুলে দেখুন, স্টাইলশিটটা লিংক করেছিলেন যে লাইন লিখে, সেই লাইনটিও নেই। কী মনে করে ব্রাউযার খুলে দেখলেন, কালো রঙের ব্যাকগ্রাউন্ডও হাওয়া। মাথায় হাত:&nbsp;<em>হায়, হায়! আমার এতো কষ্টের কোড সব মুছে ফেললো গিট!</em></p>



<p>না বৎস, ধৈর্য্যই ধর্ম্ম!</p>



<p>গিট একেবারে ঠিক কাজটিই করেছে। আপনি গিটকে জিজ্ঞেস করেছেন, গিট তোমার মূল রাস্তার খবর বলো। সে বলছে, ১টা ফাইল, আর ১০ লাইনের কোড। বাকি যা যা যোগ করেছিলেন এই রেপোযিটোরিতে, সব করেছেন নতুন রাস্তায় গিয়ে। পরে যে রাস্তা যোগ হয়েছে, আগের রাস্তা তার খবর কী করে রাখবে? তাই সে আসলে নতুন রাস্তার খবর জানে না। &#8230;শান্ত হোন, আপনার কোড হারিয়ে যায়নি। আপনার কোড এখনও নতুন রাস্তায় আছে ঠিকই। আবারও যদি নতুন রাস্তায় ঘুরতে যান, ঠিকই সবকিছু ঠিকঠাক পাবেন, সেখানকার বন্ধুদেরও পাবেন। ব্যাশে লিখুন:</p>



<pre class="wp-block-preformatted">$ git checkout style</pre>



<p>দেখুন তো সব ফিরে এসেছে কিনা? &#8230;এবার একটু প্রাণ খুলে হাসুন 😀 ।</p>



<p>আমি যখন প্রথম ব্যাপারটা লক্ষ করেছিলাম, আমি ব্যাশটাকে একপাশে এমনভাবে সরিয়ে রেখেছিলাম, যাতে মনিটরের আরেক পাশে ডিরেক্টরিটাও দেখতে পারি। তারপর ব্রাঞ্চ থেকে ব্রাঞ্চে একটু চেকআউট করে এই মজার দৃশ্য দেখেছিলাম মন ভরে। দারুণ লেগেছিল ব্যাপারটা আমার কাছে। 🙂</p>



<p>ব্যস, ব্রাঞ্চিং শেখা শেষ।</p>



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



<h3>গিট ব্রাঞ্চ মিশিয়ে&nbsp;নেয়া</h3>



<p>এবারে যদি আপনার style ব্রাঞ্চে করা স্টাইলগুলো দেখে আপনার মন পরিবর্তন করেন, চিন্তা করেন যে, <em>নাহ্‌! ভালোইতো লাগছে কালো ব্যাকগ্রাউন্ডটা</em> (নতুন রাস্তার বন্ধুরা তো ভালো মানুষই)। এক কাজ করি না কেন, মুল প্রজেক্টেই নিয়ে আসি না কেন (মূল রাস্তায়ই নিয়ে আসি বন্ধুদের)? যেই ভাবা, সেই কাজ। আপনি এবারে আপনার style ব্রাঞ্চটিকে master ব্রাঞ্চের সাথে মিলিয়ে নিবেন (merge করবেন)।</p>



<h4><strong>কমান্ড: <code>git merge&nbsp;&lt;branch-name&gt;</code></strong></h4>



<p>গাছের একটা ডাল কাটবেন, তো সেটা কি ডালে বসে কাটবেন, নাকি গাছের কান্ডে বসে কাটবেন?&nbsp;&#8230;তো সেজন্যই আগে কান্ডে ফিরে আসুন (মানে যে ব্রাঞ্চের মধ্যে অন্য ব্রাঞ্চটাকে মিলিয়ে নিতে চলেছেন)। আর তারপর ডালটার বিহিত করুন (master ব্রাঞ্চে style ব্রাঞ্চটা মার্জ্‌ করুন):</p>



<pre class="wp-block-preformatted">$ git checkout master
$ git merge style</pre>



<p>এতে সে দেখাবে: <em>এই হয়েছে, সেই হয়েছে, তোমার দুটো ব্রাঞ্চ মার্জ করে ফেলেছি।</em> অর্থাৎ style ব্রাঞ্চে যা যা করেছিলে, এখন তা হুবহু master ব্রাঞ্চেও যোগ/বিয়োগ করে মিলিয়ে নিয়েছি। তোমার সবকিছু রেডি। ব্যাশে লক্ষ করুন, আপনি এখন master ব্রাঞ্চে আছেন। ডিরেক্টরিতে লক্ষ করুন, style.css ফাইলটা দেখা যাচ্ছে। এই অবস্থায় আপনি ব্রাউযার রিলোড করে দেখুন, আপনার ওয়েবসাইট কালো ব্যাকগ্রাউন্ডে সাদা লেখা দেখাচ্ছে।</p>



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



<h3>গিট ব্রাঞ্চ&nbsp;রিমোটে তোলা</h3>



<p>যদি আপনি আপনার রেপোযিটরিটা সার্ভারে কোথাও ব্যাকআপ রাখেন, হতে পারে সেটা github, gitlab, bitbucket, meat ইত্যাদি আপনার নিজস্ব git সার্ভার কিংবা শ্রেফ কোনো শেয়ার্ড রেপোযিটরি। আমরা বোধহয় আলাদা করে গিট রিমোট যোগ করা দেখিনি। খুবই মামুলি কাজ, আমরা এবারে সেটা করে নিই। ধরা যাক, আমাদের গিটহাবে একটা রেপোযিটরি আছে test নামে, তার পাথটা নিলাম, তারপর ব্যাশে লিখলাম:</p>



<pre class="wp-block-preformatted">$ <span class="user-select-contain">git remote add origin <span class="js-git-clone-help-text">https://github.com/mayeenulislam/test.git</span></span></pre>



<p>ব্যস, তাতেই হয়ে গেল। origin নামে আমাদের একটা রিমোট যোগ হয়ে গেল, অর্থাৎ একটা সার্ভার কানেক্ট করে ফেললাম আমরা আমাদের এই রেপোযিটরিতে। এবারে আমরা চাচ্ছি, আমাদের style ব্রাঞ্চটা [মার্জ করি বা না করি], সেটা সার্ভারেও তুলে দিতে।</p>



<h4><strong>কমান্ড: <code>git push&nbsp;&lt;remote-name&gt; &lt;branch-name&gt;</code></strong></h4>



<p>ব্যাশে লিখতে হবে, সেই পুরোন জানা কমান্ডটি, ধাক্কা দিয়ে তুলে দাও:</p>



<pre class="wp-block-preformatted"><span class="user-select-contain">$ git push origin master</span>
$ git push origin style</pre>



<p>প্রথমে&nbsp;আমরা master ব্রাঞ্চটাকে ধাক্কা দিয়ে তুলে তারপর style ব্রাঞ্চটাকে ধাক্কা দিয়ে তুলে দিচ্ছি। (ইউযারনেম, পাসওয়ার্ড চাইলে দিয়ে দিতে হবে)</p>



<p>ব্রাঞ্চগুলোকে একবার পরখ করে দেখে নেয়া যেতে পারে:</p>



<pre class="wp-block-preformatted"><span class="user-select-contain">$ git branch --all</span>
* master
  style
  remotes/origin/master
  remotes/origin/style</pre>



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



<h3>গিট ব্রাঞ্চ&nbsp;মুছে ফেলা</h3>



<p>যেহেতু আমাদের style ব্রাঞ্চের কাজটা আমরা মূল ব্রাঞ্চে (master) মিশিয়ে নিয়েছি, আর ঐ ব্রাঞ্চ নিয়ে কাজ করারও ইচ্ছে নেই, তাই এখন আমরা চাইলে ব্রাঞ্চটা মুছে ফেলতে পারি। নতুন রাস্তার বন্ধুরা যদি আমার রাস্তায় চলে আসে, নাইবা থাকলো সে নতুন রাস্তা। 🙂</p>



<h4><strong>কমান্ড: <code>git branch -d&nbsp;&lt;branch-name&gt;</code></strong></h4>



<p>মুছে ফেলার কাজটা খুব সোজা, কান্ডে থাকা অবস্থায় কিন্তু ডাল কাটতে হবে, অর্থাৎ master ব্রাঞ্চে থাকা অবস্থায় শাখা মুছে ফেলার কমান্ড দিতে হবে:</p>



<p class="has-background" style="background-color:#c2ecdb"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>সতর্ক থাকুন:</strong><br>ব্রাঞ্চ ডিলিট করার জন্য -d লেখাটা নিরাপদ। এতে সে মার্জ করতে না পারলেও কারণ দেখাবে। আর যদি আমরা -d না লিখে -D লিখতাম, তাহলে কিন্তু সে জোর করে ব্রাঞ্চটা ডিলিট করে দিত।</p>



<pre class="wp-block-preformatted">$ git branch -d style</pre>



<p>অর্থাৎ, গিট, style ব্রাঞ্চটাকে মুছে ফেলো তো। এতে সে লোকাল রেপোযিটরি থেকে style ব্রাঞ্চটা মুছে ফেলবে। পরখ করে দেখে নিতে পারেন:</p>



<pre class="wp-block-preformatted"><span class="user-select-contain">$ git branch --all</span>
* master
  remotes/origin/master
  remotes/origin/style</pre>



<p>আমরা যেহেতু style ব্রাঞ্চটাকে master ব্রাঞ্চে মার্জ করেই ফেলেছি, সেটাকে তাহলে আর সার্ভারে তুলে দেখানোর কোনো মানেই ছিল না। ভুয়া একটা কাজ করেছি। কিন্তু তবু শিখে রাখলাম, মার্জ করি বা না করি, উভয় অবস্থায়ই ব্রাঞ্চকে রিমোটে তুলে রাখা যায়। কিন্তু এইমাত্র আমরা লোকাল style ব্রাঞ্চটাকে মুছে ফেলেছি। সার্ভারেরটা কিন্তু এখনও আছে। সেটা কিভাবে মুছবো?</p>



<p>সার্ভারের style ব্রাঞ্চটা মুছে ফেলা খুব সোজা। শুধু লোকালের style ব্রাঞ্চটা সার্ভারে একটু কেরামতি করি তুলে দিলেই হলো।</p>



<h4><strong>কমান্ড: <code>git push &lt;remote-name&gt;&nbsp;:&lt;branch-name&gt;</code></strong></h4>



<p>তাহলে আমাদের origin রিমোট থেকে style ব্রাঞ্চটি মুছে ফেলতে লিখতে হবে:</p>



<pre class="wp-block-preformatted">$ git push origin :style</pre>



<p>ব্রাঞ্চের নামের আগে কোলন (<code>:</code>) খেয়াল করবেন কিন্তু। এটা হচ্ছে <code>true</code>&#8216;র প্রতীক।</p>



<p class="has-background" style="background-color:#c2ecdb"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>সতর্কতা</strong><br>গিট ব্রাঞ্চিং ব্যবহার করার সময় খুব সতর্ক থাকতে হয় আপনি আসলে&nbsp;<em>কোন</em>&nbsp;ব্রাঞ্চে কাজ করছেন। ধরা যাক আপনি একটা ফিচার ব্রাঞ্চ খুলে কাজ করছিলেন, অথচ সপ্তা’খানেক পরে ভুলে গেলেন সেটা। আপনি অন্য কোনো কাজ ভুলে, এই ব্রাঞ্চে করে যাচ্ছেন অনবরত। অনেকদিন কাজ করার পর মনে পড়লো, হায় হায়, এটা কী করলাম, এই কাজ তো এই ব্রাঞ্চে করার কথা ছিল না। এই এত্তোগুলো কমিট তো এই ব্রাঞ্চে করার কথা ছিল না। তখন হয়তো ফেরা যাবে, কিন্তু সেটা যে বন্ধুর পথ হবে, সেটা আন্দাজ করা যায়।<br><br>এজন্য, যে এডিটর/আইডিই আপনি ব্যবহার করছেন, তাতে গিট ইন্টেগ্রেড করা গেলে খুব কাজের হয়। আর যদি তা না করা যায়, তাহলে প্রতিবার কাজে নামার আগে ব্যাশ খুলে ব্রাঞ্চটা দেখে নেয়ার অভ্যাস করতে পারেন।</p>



<p class="has-background has-small-font-size" style="background-color:#c2ecdb"><strong>আমার অভিজ্ঞতা:</strong><br>যারা আমার মতো LESS বা Sass দিয়ে সিএসএস করেন, তারা কোনো না কোনো কম্পাইলার ব্যবহার করে থাকেন। এই কম্পাইলারগুলো যদি সেটআপ করা থাকে যে স্বয়ংক্রীয়ভাবে কম্পাইল হবে, তাহলে এগুলো ফাইলের modified টাইমস্ট্যাম্পের দিকে খেয়াল রাখে। যদি এধরণের কম্পাইলার সক্রীয় থাকে আর আপনি কম্পাইল করে একটা মিনিফাইড সিএসএস ফাইল তৈরি করে থাকেন, তাহলে ব্রাঞ্চ থেকে ব্রাঞ্চে অদলবদল হবার সময় সে মনে করে ফাইলটা বদলেছে, সাথে সাথে সে একটা কম্পাইল্‌ড সংস্করণ তৈরি করে। এটা ব্রাঞ্চ থেকে ব্রাঞ্চে দৌঁড়াদৌঁড়ির সময় খুবই বিশ্রী রকমের ঝামেলা তৈরি করে। এই ঝামেলা এড়াতে আমি ব্রাঞ্চ বদলের আগে কম্পাইলারটা সাময়িক বন্ধ করে নিই। …আপনাদের কাছে ভালো কোনো সমাধান থাকলে, তা মন্তব্য করে জানালে খুব উপকার হবে।</p>



<h3>পরিশেষ</h3>



<p>ব্যস, গিট ব্রাঞ্চিং-এর প্রাথমিক আলোচনা শেষ। এবারে এই জ্ঞানকে আরো বাড়িয়ে নিতে হবে। <a href="https://www.youtube.com/watch?v=ZDR433b0HJY" target="_blank" rel="nofollow noopener">স্কট চ্যাকনের যে ভিডিও ইন্ট্রোটা দিয়েছিলাম গত পর্বে</a>, তাতে ব্রাঞ্চিং বিষয়ে আলোচনা আছে বিস্তারিত। এই আলোচনা আর কিছু অনুশীলনের পরে ঐ ভিডিওটা রীতিমতো চক্ষু-খুলে-দেয়া&#8217;র মতো হবে, কথা দিচ্ছি।</p>



<p>ব্রাঞ্চিং-এ গেলে কিংবা একাধিক ডেভলপার মিলে কাজ করতে গেলে সবচেয়ে বড় যে সমস্যাটার সম্মুখিন সবাই হয়, তা হলো merge conflict বা মেশানোতে&nbsp;সংঘর্ষ। এই মার্জ কনফ্লিক্ট, কলেবোরেট করে, মানে একাধিক ডেভলপার মিলে ঝামেলা না করে কাজ করা বিষয়ে আরেকটা আলোচনার জোর দাবি রাখে। আগামী কোনো পর্বে সেটা নিয়ে আলোচনা করার আশা রাখি, ইনশাল্লাহ। সেদিন আমরা সহজে বোধগম্য কোনো গিট মডেল নিয়ে আলোচনা করতে পারি, যা আমাদের কাজকে আরো ঝামেলাহীন করে কলেবোরেটিভ কোড করতে সহায়তা করবে।</p>



<h3>আরো গভীরে জানা যাক:</h3>



<ol>
<li><a href="https://git-scm.com/book/en/v2/Git-Branching-Branch-Management" target="_blank" rel="nofollow noopener">Git Branching &#8211; Branch Management &#8211; Git^</a> &#8211; Scott Chacon-এর বই</li>



<li><a href="http://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote" target="_blank" rel="nofollow noopener">Git: Delete a branch (local or remote)^</a> &#8211; Tobias Kraze</li>



<li><a href="http://stackoverflow.com/q/24582319/1743124" target="_blank" rel="nofollow noopener">Branching and merging best practices in Git^</a> &#8211; StackOverflow</li>
</ol>



<p><small>প্রচ্ছদের ছবি:&nbsp;chloepettersson.com থেকে নেয়া ছবি ও অন্যান্য গিট ব্রাঞ্চিং মডেলের মন্তাজ।</small></p>



<p><strong>হালনাগাদ:</strong> ৩১ জানুয়ারি ২০১৭</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/git-branching/">গিট দিয়ে ভার্ষন নিয়ন্ত্রণ &#8211; git branch</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-branching/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<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>
