<?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>ন্যানো বেসিX Archives &bull; Tuts by Mayeenul Islam</title>
	<atom:link href="https://mayeenulislam.github.io/tuts/category/nano-basix/feed/" rel="self" type="application/rss+xml" />
	<link>https://mayeenulislam.github.io/tuts/category/nano-basix/</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>ন্যানো বেসিX Archives &bull; Tuts by Mayeenul Islam</title>
	<link>https://mayeenulislam.github.io/tuts/category/nano-basix/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PHP-MySQL দিয়ে CSV ফাইল থেকে বাংলা তথ্য আপলোড</title>
		<link>https://mayeenulislam.github.io/tuts/csv-bengali-import-php-mysql/</link>
					<comments>https://mayeenulislam.github.io/tuts/csv-bengali-import-php-mysql/#respond</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Thu, 27 Aug 2015 12:48:40 +0000</pubDate>
				<category><![CDATA[ওয়ার্ডপ্রেস টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[ন্যানো বেসিX]]></category>
		<category><![CDATA[পিএইচপি টিউটোরিয়াল]]></category>
		<category><![CDATA[মাধ্যমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[Unicode CSV]]></category>
		<category><![CDATA[অ্যাক্সেস থেকে সিএসভি]]></category>
		<category><![CDATA[বাংলায় সিএসভি]]></category>
		<category><![CDATA[সিএসভি আপলোড]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=666</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/csv-bengali-import-php-mysql/">PHP-MySQL দিয়ে CSV ফাইল থেকে বাংলা তথ্য আপলোড</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>অনেক তথ্য একসাথে, ডাটাবেযে ঢুকানো বা আপলোড করার (bulk upload) কাজটি অনেক ব্লগে, টিউটোরিয়ালেই আলোচনা করা হয়েছে। আমরা আসলে সেগুলো পড়েই কাজটা খুব সহজে করে ফেলতে পারি। কিন্তু সমস্যাটা সৃষ্টি হবে, যদি আপনি বাংলায় লেখা তথ্যগুলো ডাটাবেযে ঢুকাতে যান&#8230; তাছাড়া পুরো প্রক্রিয়াটা কিভাবে কী হচ্ছে, তাও জানা থাকা দরকার। শেঁকড়টা পোক্ত থাকলে ডালপালায় দৌঁড়ানো খুব সহজ। আমরা তাই পুরো প্রক্রিয়াটি এখানে বিস্তারিত আলোচনা করছি:</p>



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



<h3>CSV ফাইল কী?</h3>



<p>Comma Separated Values কথাটিকে সংক্ষেপে CSV বলে। এধরণের ফাইলগুলোর এক্সটেনশন হলো <code>.csv</code> [ডট সিএসভি]। ব্যাপারটা খুব সহজ:</p>



<pre class="wp-block-preformatted">1,Someone Extraordinary,Developer
2,Someone New,Debugger
3,John Kauwa Kala,QA Manager</pre>



<p>এই যে ফাইলের তথ্যগুলো উপরে দেখা যাচ্ছে, এখানে তথ্য থেকে তথ্যকে আলাদা করা হয়েছে কমা (,) দিয়ে আর একেকটা আলাদা আলাদা তথ্যগোষ্ঠিকে আলাদা করা হয়েছে এন্টার চেপে লাইন ব্রেক করে। এখন এই তথ্যগুলো একটা ফাইলে রেখে তার এক্সটেনশন <code>.csv</code> করে নিলেই তা হয়ে যাবে আমাদের কাঙ্ক্ষিত CSV ফাইল।</p>



<h3>কখন লাগবে সিএসভি ফাইল?</h3>



<p>ধরা যাক, আপনার ডাটাবেযের টেবিলে তিনটা ফিল্ড আছে: id, name, এবং designation। এই টেবিলে ৫০০০ [পাঁচ হাজার] জন আলাদা আলাদা ব্যক্তির তথ্য আছে। এবারে কোনো কারণে আরেকটা ফিল্ড বাড়ানো লাগলো: age। তখন এই ৫০০০ জনের তথ্য আলাদা আলাদা করে এডিট করে করে তাদের প্রত্যেকের বয়স ডাটাবেযে ঢুকিয়ে নিতে হবে। চিন্তা করুন তো একবার? ৫০০০টা তথ্য খুলে, এডিট করে, সংরক্ষণ করা&#8230; কতটা বিরক্তিজনক কাজ হবে! &#8230;কিংবা এমনও হতে পারে, একটা কোম্পানী ২০ বছর ধরে খাতায়-পত্রে তাদের কোম্পানীর কর্মচারীদের তথ্য লিখে রাখতো। এখন তারা আপনাকে দিয়ে একটা সফ্‌টওয়্যার বানিয়েছে। তো তারা চায় নতুন যারা আসবে, তাদের তথ্য তো সফ্‌টওয়্যারে নতুন করে লিখে নিবেনই, কিন্তু ২০ বছরের পুরোন সব কর্মচারীদের তথ্যও যেন সফ্‌টওয়্যারে ঢোকানো থাকে। এখানেই বিপুল পরিমাণ তথ্য একবারে ঢুকিয়ে দেয়ার জন্য ব্যবহার করা হয় CSV।</p>



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



<p>এরকম ক্ষেত্রে আমরা সাধারণত মাইক্রোসফ্‌ট এক্সেল-এর বহুল ব্যবহার করে থাকি, তবে অন্য যেকোনো স্প্রেডশিট সফ্‌টওয়্যার ব্যবহার করা যেতে পারে। আমরা এখানে এক্সেল এবং Open Office-এর OpenOffice Calc ব্যবহার করে কাজটি করা দেখাবো ইনশাল্লাহ। স্প্রেডশিটে মূলত দরকারি তথ্যগুলো বিভিন্ন রো&#8217; এবং কলামে লিখে ফেলা হয়:</p>



<pre class="wp-block-preformatted">+----+-----------------------+----------------+-----+
| id | Name                  | Designation    | Age |
+----+-----------------------+----------------+-----+
| 1  | Someone Extraordinary | Developer      | 26  |
| 2  | Someone New           | Debugger       | 21  |
| 3  | John Kauwa Kala       | QA Manager     | 32  |
+----+-----------------------+----------------+-----+</pre>



<p>যেমন আমরা মান্ধাত্যা আমলের সব তথ্য নিতে হলে এভাবে নিলাম। কিন্তু ধরা যাক, আগের সব তথ্য আছে, এখন শুধু &#8216;বয়স&#8217;-এর তথ্যটা নতুন যোগ হবে, সেক্ষেত্রে id আর age কলামই শুধু লিখলাম। আইডি এজন্য লিখলাম, যাতে একটা আনকোরা (unique) তথ্য যেন থাকে, যা দিয়ে আমরা একটা তথ্য থেকে আরেকটা তথ্যকে আলাদা করতে পারি, এবং বয়সের তথ্যটা ঠিক সেই ব্যক্তির ক্ষেত্রেই বসে, যার বয়স যেটা। সেক্ষেত্রে তাদের আইডি ধরে ধরে বসানোটাই সবচেয়ে সহজ।</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> স্প্রেডশিটে তথ্য ঢোকানোর সময় যদি কোনো কলামের তথ্যে কমা (,) থেকে থাকে, তাহলে পুরো কলামের তথ্যটাকে অবশ্যই ডাবল কো’ট (“) দিয়ে আলাদা করে নিতে হবে। এই তথ্যগুলোকে আলাদা করার পদ্ধতি নিচে ফাংশনের ডেলিমিটার অংশে আলোচিত হলো।</p>



<p>এভাবে যত লক্ষ-কোটি তথ্য ইচ্ছা, আপনি প্রস্তুত করে নিতে পারেন স্প্রেডশিটে। এরপর <code>.csv</code> ফাইলে একে সংরক্ষণ করে নিতে হবে:</p>



<h4>মাইক্রোসফ্‌ট এক্সেল (২০০৭+) হলে:</h4>



<ul>
<li>ধরে নিচ্ছি আপনি স্প্রেডশিটে এভাবে তথ্যগুলো বসিয়ে নিয়েছেন, এবং একটা <code>.xlsx</code> কিংবা <code>.xls</code> ফাইল আছে আপনার। এবারে সেই ফাইল খুলে Office Button &gt; Save As &gt; Other Formats</li>



<li>ফাইলের একটা নাম দিয়ে, Save as type: ড্রপডাউন মেনু থেকে CSV (Comma delimited) (*.csv) বাছাই করুন</li>



<li>Save বোতাম চাপুন</li>



<li>ওয়ার্নিং আসতে পারে: প্রথম ওয়ার্নিং বলছে, <em>শুধু কিন্তু এই শিটটা সংরক্ষণ হচ্ছে (বাদবাকি শিট-এর খবর জানি না)</em> &#8211; আমরা Ok চাপবো</li>



<li>দ্বিতীয় ওয়ার্নিং বলছে, <em>CSV-তে এমন কিছু ফিচার আছে, যেগুলো কিন্তু সাপোর্ট করবে না</em> &#8211; আমরা সেটা মেনে নিবো &#8211; Yes চাপবো</li>



<li>এক্সেল বন্ধ করে দিই, এবং কোনো ডায়লগ বক্স এলে বলে দিই &#8211; No &#8211; আমরা আর সংরক্ষণ করতে চাই না (কারণ আমাদের কাজ তো হয়ে গেছে)</li>
</ul>



<h4><strong>ওপেনঅফিস ক্যাল্‌ক (4+) হলে:</strong></h4>



<ul>
<li>ধরে নিচ্ছি আপনি ক্যাল্‌ক-এর স্প্রেডশিটে তথ্যগুলো বসিয়ে নিয়েছেন, এবং একটা <code>.ods</code> ফাইল আছে আপনার। এবারে সেই ফাইল খুলে File &gt; Save as (<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>S</kbd>) চাপুন</li>



<li>ফাইলের একটা নাম দিয়ে, Save as type: ড্রপডাউন মেনু থেকে Text CSV (.csv) (*.csv) বাছাই করুন</li>



<li>Save বোতাম চাপুন</li>



<li>ওয়ার্নিং আসতে পারে: <em>আপনি কি আসলেই ODS ফর্মেটের বাইরে সেভ করতে যাচ্ছেন</em> &#8211; আমরা Keep Current Format বাছাই করবো</li>



<li>Export Text File নামের একটা ডায়লগ বক্স আসবে, এখানে: Character set: থেকে Unicode (UTF-8) বাছাই করে দিন। আর বাকিগুলো যেমন আছে থাকুক: আমরা কমা (,) দিয়ে আলাদা করছি, আর টেক্সট ডেলিমিটার ডাবল কো&#8217;ট রাখছি (&#8220;) &#8211; OK বোতাম চাপুন</li>



<li>ওয়ার্নিং আসতে পারে: <em>শুধু কিন্তু এই শিটটা সংরক্ষিত হচ্ছে</em> &#8211; আমরা বলবো &#8211; OK</li>
</ul>



<p>কাজ শেষ।</p>



<p>আমাদের <code>.csv</code> ফাইল তৈরি। এবারে ফাইলটা সরাসরি Open না করে মাউসের ডান বোতাম চেপে Notepad (অথবা যেকোনো টেক্সট এডিটর, যেমন: Notepad++, Sublime Text)-এ খুলি। তাহলেই দেখতে পাবো, আমাদের স্প্রেডশিটে দেয়া তথ্যগুলো কমা দিয়ে আলাদা আলাদা হয়ে সুন্দর করে বসে গেছে।</p>



<h3>কিভাবে PHP দিয়ে CSV ফাইল পড়বো?</h3>



<p>এবারে খুব সহজেই আমরা PHP ব্যবহার করে তথ্যগুলো পড়তে পারি। নিচের কোড স্নিপেটটি একটা ফাইলে রেখে ফাইলটা সার্ভার থেকে খোলা যাক&#8230; ইনলাইন মন্তব্যগুলো দেখুন, বিস্তারিত পরে বলছি:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/03864e63b073fc81694b">Gist</a>.
</div></figure>



<p>এবারে এই পাতাটা খুললে আমরা খুব সাধারণ একটা এইচটিএমএল ফর্ম দেখতে পাবো:</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/simple-form-to-upload-csv-file.png"><img decoding="async" width="431" height="92" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/simple-form-to-upload-csv-file.png" alt="সিএসভি আপলোড করার জন্য খুবই সাধারণ একটা HTML ফর্ম" class="wp-image-669" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/simple-form-to-upload-csv-file.png 431w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/simple-form-to-upload-csv-file-300x64.png 300w" sizes="(max-width: 431px) 100vw, 431px" /></a></figure></div>


<p>এখানে আমাদের তৈরি করা <code>.csv</code> ফাইলটা আপলোড করে Submit বোতাম চাইলেই সিএসভি&#8217;র চারটা কলামের তথ্যকে আমরা খুব সহজে দেখতে পাবো পর্দায়।</p>



<p>উপরের কোডটা এবার বোঝা যাক: একেবারে নিচে আমরা খুবই সাধারণ একটা এইচটিএমএল ফর্ম ব্যবহার করেছি, যা দিয়ে আমরা ফাইল আপলোড করতে পারি। ফর্মে <code>post</code> মেথড ব্যবহার করেছি, এবং এনক্রিপশন টাইপ রেখেছি <code>multipart/form-data</code>। এই ফর্মটা সাবমিট হলে উপরের পিএইচপি ব্লকে যায়। সেখানে চেক করে আসলেই কি কোনো ফাইল আপলোড হয়েছে কিনা, ফাইলের আকার (<code>size &gt; 0</code>) দেখে। তারপর আমরা ফাইলটাকে <code>$file</code> ভ্যারিয়েবলে রেখেছি। <code>$handle</code>-এ এসে আমরা ফাইলটাকে খুলে পড়েছি। এরপরে <code>while</code> loop-এর ভিতরে আমরা পিএইচপি&#8217;রই দেয়া <a href="http://php.net/manual/en/function.fgetcsv.php" target="_blank" rel="nofollow noopener"><code>fgetcsv()</code>^</a> ফাংশনটা ব্যবহার করেছি সিএসভি ফাইলটা নিজেদের মতো করে পড়ার জন্য। বাকিটা কেবলই ইতিহাস।</p>



<p>এপর্যায়ে fgetcsv() ফাংশনটাকে চেনা যাক:</p>



<pre class="wp-block-preformatted">fgetcsv( file, length, separator, enclosure);</pre>



<p>এখানে:</p>



<ul>
<li><code>file</code>&nbsp;হচ্ছে প্রথম প্যারামিটার, যা দিতেই হয়, এখানে আমরা আমাদের সিএসভি ফাইলটাকে দিবো</li>



<li><code>length</code>&nbsp;হচ্ছে আমাদের প্রতিটা লাইনে কতগুলো ক্যারেক্টার থাকবে তার পরিমাণ (যদি নিশ্চিত না হোন, তাহলে উল্লেখ করা থেকে বিরত থাকুন, কারণ ভুল হলে তথ্য ভেঙে যেতে পারে)</li>



<li><code>separator</code>&nbsp;হচ্ছে সেই ক্যারেক্টার, যা দিয়ে আপনার কলামগুলো আলাদা করা থাকবে, আমরা কমা দিয়ে কাজটি করছি। এক্ষেত্রে ফাংশনে তাই ডিফল্ট করা কমা (,), আমরা যদি অন্য কিছু দিয়ে করতাম, তাহলে এই প্যারামিটারে তা বলে দিতাম</li>



<li><code>delimiter</code>&nbsp;হচ্ছে স্ট্রিং-কে চিনিয়ে দেয়ার পদ্ধতি। CSV-তে কমা পেলেই সে আলাদা কলাম ধরে নিবে। কিন্তু আপনার তথ্যের মধ্যেই যদি কোনো কমা থেকে থাকে (যেমন: “He, you and I went there”), তখন কী হবে? তখন ঐ লেখাটিকে ডাবল কো’ট (“) দিয়ে আটকে দিতে হবে। আর সেটা এই প্যারামিটারে বলে দিলে একেকটা ডাবল কোটের ভিতরকার তথ্যে কমা থাকলেও সে সেটাকে কলাম ধরে নিবে না। এর ডিফল্ট হিসেবে ডাবল কো’ট (“) নির্ধারণ করে দেয়া আছে</li>
</ul>



<p>আমরা তথ্যগুলো পিএইচপি দিয়ে পড়ে ফেলার পর এতটুকু নিশ্চয়ই বুঝে গেছি যে, আমাদের স্প্রেডশিটে লেখা তথ্যগুলোর উপর দখল নিতে পেরেছি আমরা। তাহলে এপর্যায়ে আমরা এই তথ্য নিয়ে যা ইচ্ছা তা করতে পারি। আমরা নিশ্চয়ই এও বুঝে গেছি যে, কমা (,) দিয়ে আলাদা করা প্রতিটা কলামকে <code>fgetcsv()</code> একটা পিএইচপি অ্যারেতে নিয়েছে, তাই প্রথম কলামটা পেতে আমরা অ্যারের যিরো ইনডেক্স (<code>$data[0]</code>) ধরেছি। এভাবে প্রতিটা লাইনকে <code>fgetcsv()</code> আমাদের জন্য আলাদা করে বের করে নিয়ে এসেছে। যারা আগে থেকে কাজ করছেন, তাদেরকে আর বুঝিয়ে বলা লাগবে না, কিভাবে এই তথ্যকে ডাটাবেযে নিয়ে যেতে হবে। তবু আমরা সেবিষয়েও আলোকপাত করছি:</p>



<h3>কিভাবে MySQL ব্যবহার করে CSV ফাইলের তথ্য ডাটাবেযে নিবো?</h3>



<p>আমার উপরে কোড স্নিপেটটির সাথে MySQL কোড যোগ করে এখানে দেখিয়েছি, কিভাবে সিএসভি ফাইল থেকে আমরা যা পড়তে পারছি, তা খুব সহজে ডাটাবেযে নিয়ে যেতে পারি:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/03864e63b073fc81694b">Gist</a>.
</div></figure>



<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> অপরিশোধিত তথ্য ডাটাবেযে নেয়া খুবই বিপজ্জনক। এজন্য অবশ্যই তথ্যকে যথাযথ sanitization, validation আগে থেকে আপনাকে করে নিতে হবে – যা আমরা এখানে দেখাইনি।</p>



<p>আমরা ধরে নিয়েছি আপনি একটা MySQL ডাটাবেয তৈরি করে নিয়েছেন, যার নাম <code>csv_db</code> এবং তাতে একটা টেবিল আছে, যার নাম <code>csv_table</code>, যেখানে <code>id</code>, <code>name</code>, <code>designation</code>, <code>age</code> নামে চারটা কলাম তৈরি করাই আছে (এতগুলো বিষয় আমরা ইচ্ছে করেই দেখাচ্ছি না, টিউটোরিয়ালটাকে যথাসম্ভব ছোট রাখার জন্য)।</p>



<h4><code>$find_header &gt; 1</code> কেন?</h4>



<p>আপনারা আগের কোডের সাথে এখানে অতিরিক্ত একটা পিএইচপি কাউন্টার দেখতে পাচ্ছেন। আপনারা আগের কোডটি রান করালে দেখতে পাবেন, id, name, designation, age &#8211; স্প্রেডশিটের এই লাইনটাও আমাদের সিএসভি থেকে সে রিড করে ফেলেছে। এখন যখন আপনি বিপুল পরিমাণ ডাটা ডাটাবেযে ঢুকাতে যাবেন, তখন কিন্তু প্রথম ডাটা হিসেবে সে হেডারের এই তথ্যগুলোও নিয়ে নিবে। তাই আমরা প্রথম লুপটা অযথাই ঘুরিয়ে আনছি, আর যখন লুপটা একবার ঘুরে গেল, তার মানে প্রথম রো&#8217;-টা পার করে গেল, তখনই আমরা বলছি: <em>এবার তুমি ইনসার্ট করা শুরু করো</em>। তাই আমরা আমাদের কাউন্টার ১-এর বেশি হলে তখন থেকে শুরু করতে বলে দিচ্ছি।</p>



<p>ব্যস, আমরা আমাদের সিএসভি থেকে বিপুল পরিমাণ তথ্য নিয়ে ডাটাবেযে ঢুকিয়ে নিতে পেরেছি।</p>



<h3>CSV&#8217;র তথ্য যদি হয় বাংলায়?</h3>



<p>এটা একটা মহামসিবতের কথা!</p>



<p>আসলে, আমরা যখন প্রথম এই সমস্যার সম্মুখিন হয়েছিলাম, তখন আমরা মূলত বাংলা তথ্যকে ডাটাবেযে নিচ্ছিলাম। এবং মহামসিবতে পড়ে গিয়েছিলাম, কারণ ইউনিকোডে সিএসভি কনভার্শন রীতিমতো মহা ঝামেলার ছিল। কারণ উপরের পদ্ধতিমতে CSV-তে সংরক্ষণ করার পর ফাইলটা টেক্সট এডিটরে খুলে দেখা যায় সব বাংলা লেখা <code>??????</code> -এরকম প্রশ্নবোধক চিহ্ন হয়ে আছে।</p>



<p>তখন আমরা OpenOffice ব্যবহার করতাম না। কারণ ওপেনঅফিস-এর পদ্ধতিতে ৫ নম্বর ধাপে এনকোডিং যে Unicode (UTF-8)-এ হবে, তা বলে দেয়া যায়। আর তাতেই সমাধানটা হয়ে যায়। আমরা সমস্যায় পড়েছিলাম মাইক্রোসফ্‌টের Excell দিয়ে কাজটা করতে গিয়ে।</p>



<p>আমরা অনেক ঘাঁটাঘাঁটি করে তখন দুটো সমাধান পেয়েছিলাম, এখন আরেকটা বোনাস:</p>



<h4>এক্সেল দিয়ে Unicode CSV &#8211; সমাধান ১ (ঝামেলার):</h4>



<ul>
<li><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/csv-tab-replacing-with-commas.png"><img decoding="async" class="alignright size-medium wp-image-672" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/csv-tab-replacing-with-commas-300x265.png" alt="csv-tab-replacing-with-commas" width="300" height="265" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/csv-tab-replacing-with-commas-300x265.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/csv-tab-replacing-with-commas.png 417w" sizes="(max-width: 300px) 100vw, 300px" /></a>প্রথম ধাপ আগের মতো</li>



<li>দ্বিতীয় ধাপে এসে Save as type: থেকে Unicode Text (*.txt) বাছাই করুন (বুঝতেই পারছেন, আমরা সরাসরি সিএসভি বানাচ্ছি না)</li>



<li>ওয়ার্নিংগুলো আগের মতোই ডীল করুন, এবং এক্সেল বন্ধ করে দিন (এক্সেলে আর কোনো কাজ নেই)</li>



<li>এবারে যে <code>.txt</code> ফাইলটা তৈরি হয়েছে, তা Notepad-এ খুলুন, দেখবেন সবগুলো লেখাই পড়া যাচ্ছে, আগের মতো প্রশ্নবোধক চিহ্ন হয়ে যায়নি। কিন্তু এটা সিএসভি না, কারণ কলামগুলো কমা দিয়ে আলাদা নয়, বরং ট্যাব দিয়ে আলাদা করা</li>



<li>এবারে নোটপ্যাডের Edit &gt; Replace (<kbd>Ctrl</kbd> + <kbd>H</kbd>) চেপে Find&amp;Replace ডায়লগ বক্সটা খুলে নিয়ে Find what:-এ ছবিতে দেখানো পদ্ধতিতে ট্যাব-স্পেসটুকু কপি করে বসিয়ে দিতে পারেন। এতে দৃশ্যত প্রথম ফিল্ডটা আসলে ফাঁকাই দেখা যাবে। এবারে Replace with:-এ একটা কমা (,) বসিয়ে দিন। &#8230;হ্যা, বুঝে ফেলেছেন, যেহেতু পুরো ডকুমেন্ট ট্যাব দিয়ে আলাদা করা, আমরা ট্যাবগুলোকে কমা বানিয়ে ফেললেই এটা একটা কমা সেপারেটেড ফাইল হয়ে যাবে। &#8230;এবারে Replace All চাপুন</li>



<li>এবারে সাবধানতার জন্য ফাইলের এনকোডিংকে Unicode থেকে Unicode (UTF-8) করে নিতে হবে। এজন্য নোটপ্যাডে File &gt; Save as-এ ক্লিক করুন, এবং একেবারে নিচে Save বোতামের বাম দিকে Encoding থেকে UTF-8 বাছাই করে দিন। ফাইলের নতুন একটা নাম দিলে ঝামেলা নেই, একই নাম দিলে, রিপ্লেস করে নিতে হবে। কাজ শেষ, নোটপ্যাড বন্ধ করে দিন</li>



<li>এবারে ফাইলটা রিনেম করে এর <code>.txt</code> এক্সটেনশনটাকে বদলে <code>.csv</code> করে ফেলুন। যদি ফাইলের নাম হয়: <code>data.txt</code>, তাহলে একে আপনি বানাচ্ছেন <code>data.csv</code></li>
</ul>



<h4>এক্সেল দিয়ে Unicode CSV &#8211; সমাধান ২ (তুলনামূলক ঝামেলাহীন):</h4>



<ul>
<li>আমরা Jaimon Mathew-এর <a href="https://jaimonmathew.wordpress.com/2011/08/23/excel_addin_to_work_with_unicode_csv/" target="_blank" rel="nofollow noopener">এই ব্লগ পোস্টটি^</a> পেয়েছিলাম, যেখানে তাঁর তৈরি একটা অ্যাডইন রয়েছে (পুরো প্রোজেক্টের কোডটি তিনি <a href="https://github.com/jaimonmathew/Unicode-CSV-Addin" target="_blank" rel="nofollow noopener">গিটহাবে হোস্ট^</a> করে রেখেছেন)। অ্যাডইনটি ডাউনলোড করে নিতে হবে আগে (<a href="http://blog.jaimon.co.uk/UnicodeCSV/setupfiles.zip" target="_blank" rel="nofollow noopener">ডাউনলোড লিংক^</a> : <code>setupfiles.zip</code> &#8211; filesize: 247kb)</li>



<li>সেটআপ চালু হলে পিসি রিস্টার্ট নিবে, তাই কোনো কাজ থাকলে আগে ব্যাকআপ নিয়ে নিন</li>



<li>আনযিপ করে নিয়ে <code>Setup.exe</code> চালু করুন (ওটা কাজ না করলে <code>UnicodeCSVAddin.vsto</code> ফাইলটা চালু করতে নির্দেশনা রয়েছে)</li>



<li>এতে সে তার প্রয়োজনীয় ফাইল ইন্টারনেট ব্যবহার করে নামিয়ে নিয়ে তা কম্পিউটারে ইন্সটল করে নিবে। ইন্সটলেশনের অংশ হিসেবে সে পিসিকে নিজে থেকেই রিস্টার্ট করে নিবে। পিসিকে রিস্টার্ট হতে দিন</li>



<li>ইন্সটল করা হয়ে গেলে সরাসরি আপনার বাংলা লেখা এক্সেল ফাইলটা খুলে নিন এক্সেলে। এবারে রিবনে একটা আলাদা নাম দেখতে পাবেন: Unicode CSV। ওটাতে গিয়ে Save বোতাম চাপুন। নাম দিয়ে ফাইলটা সংরক্ষণ করে নিন</li>



<li>ব্যস, ইউনিকোডে আপনার সিএসভি ফাইল প্রস্তুত। যাচাই করতে এক্সেল বন্ধ করে দিয়ে <code>.csv</code> ফাইলটা নোটপ্যাডে খুলে দেখে নিন</li>
</ul>



<h4>এক্সেল দিয়ে Unicode CSV &#8211; সমাধান ৩ (গুগল ডক্স):</h4>



<ul>
<li>আপনার এক্সেল ফাইলটা <a href="http://drive.google.com/" target="_blank" rel="nofollow noopener">গুগল ড্রাইভে^</a> আপলোড করে দিন</li>



<li>এবারে তাকে Open with Google Sheets করে নিন</li>



<li>নতুন গুগল শিটে এবারে আপনার বাংলা স্প্রেডশিটটা খুললে File &gt; Download as &gt; Comma-separated values (.csv, current sheet) বাছাই করুন</li>



<li>ব্যস, ইউনিকোডে বদলে সিএসভি হয়ে নেমে আসবে আপনার স্প্রেডশিটটা</li>
</ul>



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



<p>দারুণ না! আমরা স্প্রেডশিট থেকে সিএসভি ফাইল তৈরি করা শিখলাম। তথ্যে ভাষা ইংরেজিভিন্ন অন্য যে কোনো ইউনিকোড হরফে হলে তাও আমরা সফলভাবে সিএসভি করে নিতে শিখলাম। এবং সর্বোপরি সিএসভি ফাইল পিএইচপি দিয়ে পড়তে পারলাম, এমনকি লুপ চালিয়ে তা সংযুক্ত মাইএসকিউএল ডাটাবেযেও ঢুকিয়ে নিতে পারলাম। <span style="text-decoration: underline;">আমরা অবশ্য ডাটাবেযে তথ্য নেয়ার আগে প্রয়োজনীয় স্যানিটাইযেশন, ভ্যালিডেশন এখানে দেখাইনি, যা খুবই গুরুত্বপূর্ণ, এবং বাস্তবে, কাজে সেগুলো অবশ্যই আসা উচিত।</span></p>



<h3>বোনাস: ওয়ার্ডপ্রেসে CSV পড়া</h3>



<p>ওয়ার্ডপ্রেসও কিন্তু PHP-MySQL-ভিত্তিক সিএমএস, সুতরাং আলাদা ঝামেলার কিছুই নেই। তবু আমি যেহেতু একজন ওয়ার্ডপ্রেস ডেভলপার, তাই ওয়ার্ডপ্রেসে কাজটি সহজে কিভাবে করা যায়, তা হয়তো বলে দিতেই পারি।</p>



<p>ওয়ার্ডপ্রেসে একটা পিএইচপি কোড রান করানোর জন্য বিভিন্নরকম প্লাগইন রয়েছে, যেমন: Otto&#8217;র <a href="https://wordpress.org/plugins/php-code-widget/" target="_blank" rel="nofollow noopener">PHP Code Widget^</a>। এই উইজেটে আপনার পিএইচপি কোড বসিয়ে নিয়ে তা ওয়ার্ডপ্রেসের যেকোনো উইজেট সক্রীয় অংশে রান করাতে পারবেন।</p>



<p>যাদের প্লাগইন ব্যবহার করতে মন চাইছে না, তারা কোডের বিপুল ঝামেলায় না গিয়ে যে কাজটি করতে পারেন খুব সহজে, তা হলো একটা Page Template বানিয়ে ফেলা, কিছুই না, শুধুমাত্র কমেন্টের ভিতরে Template Name: CSV বসিয়ে নিলেই যেকোনো ফাইলকে WordPress-এর পাতায় রান করানো যায়। এই ফাইলটা থিমের ফোল্ডারে থাকলে Add New Page থেকে নতুন পাতা তৈরি করে পেজ টেমপ্লেট হিসেবে CSV (আমাদের টেমপ্লেটের নাম) বাছাই করে দিলেই হলো।</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/03864e63b073fc81694b">Gist</a>.
</div></figure>



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



<p>এই লেখনি একটা প্রাথমিক দিকনির্দেশনা বলা যায়। আপনি কাজ করতে গিয়ে আরো সমস্যার সম্মুখিন হতে পারেন। সমাধানও বেরিয়ে আসবে ইনশাল্লাহ। তবে কাজে নেমে পড়ার জন্য যথেষ্ট তথ্য এখানে রয়েছে। কেমন কাজে লাগালেন, জানাতে ভুলবেন না কিন্তু।</p>



<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>



<p><span style="color: #999999;">____________________________________________________________</span></p>



<h3><strong>কৃতজ্ঞতা</strong></h3>



<p class="has-small-font-size">এই যাবতীয় অনুসন্ধিৎসায় আমার প্রাক্তন সহকর্মী ও টীম লীড তাহমিনা আখতার-এর সহায়তা কৃতজ্ঞতাচিত্তে স্মরণ করছি। আসলে আমরা উভয়ে মিলে, একটা পিএইচপি প্রোজেক্টে, এবিষয়ক সমস্যার সমাধান করছিলাম। এবং প্রায় ৩ লাখের বেশি তথ্য নিয়ে কাজ করেছিলাম আমরা, সাফল্যের সাথে, আলহ্বামদুলিল্লাহ। <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f60d.png" alt="😍" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="has-small-font-size">প্রচ্ছদের ছবি <a href="https://commons.wikimedia.org/wiki/File:CSV_Logo.svg" target="_blank" rel="nofollow noopener">Christlich Soziale Volkspartei-এর তৈরি ছবি^</a>, উইকিমিডিয়া কমন্স থেকে নিয়ে বদলে নেয়া হয়েছে প্রয়োজনমতো।</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/csv-bengali-import-php-mysql/">PHP-MySQL দিয়ে CSV ফাইল থেকে বাংলা তথ্য আপলোড</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/csv-bengali-import-php-mysql/feed/</wfw:commentRss>
			<slash:comments>0</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>
		<item>
		<title>বেসিX: ফটোশপের ওয়ার্কস্পেস</title>
		<link>https://mayeenulislam.github.io/tuts/basix-photoshop-workspace/</link>
					<comments>https://mayeenulislam.github.io/tuts/basix-photoshop-workspace/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Mon, 30 Apr 2012 18:38:09 +0000</pubDate>
				<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[ন্যানো বেসিX]]></category>
		<category><![CDATA[প্রাথমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[ফটোশপ টিউটোরিয়াল]]></category>
		<guid isPermaLink="false">http://nanodesigns.wordpress.com/?p=190</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/basix-photoshop-workspace/">বেসিX: ফটোশপের ওয়ার্কস্পেস</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>ফটোশপ basiX (প্রাথমিক জ্ঞান)</strong></p>



<p><strong>ভার্ষন:</strong> ফটোশপ ৭ (এবং সমমান)</p>



<p>এই টিউটোরিয়ালটা যখন লিখতে শুরু করি, তখন চিন্তা করছিলাম, এর কি আসলে কোনো দরকার আছে? কিন্তু লিখতে শুরু করে বুঝতে পারলাম, এর ঢের দরকার আছে। যাহোক, আজকের টিউটোরিয়াল হলো ফটোশপের ওয়ার্কস্পেস বা কর্মক্ষেত্র সম্পর্কে সম্যক ধারণা দেয়ার একটা চেষ্টা মাত্র। এই টিউটোরিয়াল থেকে আমরা জানবো ফটোপশ চালু হলে কোন অংশকে কী বলে, আর কোন অংশটা কী জন্যইবা।</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace.jpg"><img decoding="async" width="1753" height="858" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace.jpg" alt="ফটোশপ ৭-এর ওয়ার্কপ্লেস পরিচিতি" class="wp-image-107" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace.jpg 1753w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace-300x147.jpg 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace-1024x501.jpg 1024w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace-768x376.jpg 768w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/workspace-1536x752.jpg 1536w" sizes="(max-width: 1753px) 100vw, 1753px" /></a><figcaption class="wp-element-caption">স্ক্রিনশট ০১.১: ফটোশপ ৭-এর ওয়ার্কপ্লেস পরিচিতি (ছবিটা ক্লিক করে মূল রেযোল্যুশনে খুলুন)</figcaption></figure></div>


<p>চিত্র ১ থেকে আমরা পুরো উইন্ডো’র একটা পরিচিতি পেয়ে যাবো। নিচে সেগুলোর সংক্ষিপ্ত পরিচিতি দেয়া হলো (এগুলোর বিস্তারিত আমরা ভবিষ্যতে জানবো, ইনশাল্লাহ):</p>



<p><strong>টাইটেল বার:</strong> নাম শুনেই বোঝা যাচ্ছে এখানে দেখা যাবে পরিচিতিমূলক নাম বা টাইটেল। সবচেয়ে উপরের অংশটিতেই তা থাকে। যেহেতু আমাদের সফ্‌টওয়্যারের নাম ফটোশপ, তাই এখানে টাইটেল বারে লেখা Adobe Photoshop।</p>



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



<p><strong>মেনু বার</strong><strong>:</strong> যেখানে File, Edit, Image ইত্যাদি মেনু থাকে, এবং তার অধীনে সাবমেনু থাকে।</p>



<p><strong>টুলবার/টুলপ্যালেট:</strong> ‘প্যালেট’ বানানটা এরকম: Palette। এটা দিয়ে বোঝানো হয় চিত্রকরদের আঙ্গুল ঢুকিয়ে হাতের তালুতে ধরা একটা বোর্ড, যাতে রং লেপ্টে চিত্রকর ছবি আঁকেন। অনেকেই একে ভুল করে ‘প্লেট’ বলে, যা শুদ্ধ নয়। যাহোক, কাজ করার উপযোগী প্রয়োজনীয় সব টুলগুলো যেখানে গোছানো থাকে, তাই টুল প্যালেট।</p>



<p><strong>রিবন</strong><strong>:</strong> টুলবারে যে টুলটা সিলেক্ট করা হবে বা বাছাই করা হবে, সেই টুল সংক্রান্ত প্রয়োজনীয় ফিচার বা সেটিংসগুলো দেখা যাবে এই রিবনে। প্রাথমিকভাবে মুভ টুল (V) সিলেক্ট থাকে বলে চিত্রের (চিত্র ১) মতো ফিচারগুলো দেখা যাচ্ছে। আপনি তার পার্শ্ববর্তি র&#x200d;্যাক্টাঙ্গুলার মার্কিউ টুল (M) সিলেক্ট করলেই দেখবেন রিবনের অপশনগুলো বদলে গেছে।</p>



<p><strong>ইমেজ</strong><strong>এরিয়া</strong><strong> (</strong><strong>কর্মক্ষেত্র</strong><strong>):</strong> এটা হলো মূল কর্মক্ষেত্র। ফটোশপ খোলার পরে এটা দেখা যায় না, নতুন একটা ফাইল চালু করলে, কিংবা বিদ্যমান কোনো ছবির (ইমেজ) ফাইল খুললে এটা দেখা যাবে। এখানেই মূলত যাবতীয় কাজ করা হয়, এবং দেখা যায়।</p>



<p>ইমেজ এরিয়ার উপরে রয়েছে আরেকটা টাইটেল বার। এই টাইটেল বারও ডিযাইনারদের জন্য গুরুত্বপূর্ণ। কেননা এখানে যেমন থাকে ফাইলটার নাম, কত শতাংশে দেখা যাচ্ছে, কোন লেয়ারটা সিলেক্ট করা আছে এবং সবচেয়ে গুরুত্বপূর্ণ– ছবিটা কোন মোডে, অর্থাৎ RGB নাকি CMYK নাকি Grayscale-এ আছে, তা দেখা যায়।</p>



<p><strong>স্ট্যাটাস</strong><strong>বার</strong><strong>:</strong> ‘স্ট্যাটাস বার’ নামটা শুনেই বোঝা যাচ্ছে এখানে স্ট্যাটাস বা অবস্থা সম্পর্কে দেখা যায়। [স্ক্রিনশট ০১.২-এ] লক্ষ করুন, স্ট্যাটাস বারে আমরা কিছু স্থান, সংখ্যা দিয়ে মার্ক করেছি, সেগুলো হলো:</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/status-bar.jpg"><img decoding="async" width="662" height="136" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/status-bar.jpg" alt="স্ট্যাটাস বার পরিচিতি" class="wp-image-108" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/status-bar.jpg 662w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/status-bar-300x62.jpg 300w" sizes="(max-width: 662px) 100vw, 662px" /></a><figcaption class="wp-element-caption">স্ক্রিনশট ০১.২: স্ট্যাটাস বার পরিচিতি</figcaption></figure></div>


<p><strong>১</strong><strong>.</strong> যে ইমেজ এরিয়াটা খোলা আছে, কিংবা একাধিক ইমেজের ক্ষেত্রে যে ইমেজটা বা ইমেজ এরিয়াটা সিলেক্ট করা আছে, সেটা এই মুহূর্তে তার মূল আকৃতির কত শতাংশে দেখা যাচ্ছে, তা দেখা যায়। আমার ইমেজটা মূল আকারের 66.67% বড় করে দেখা যাচ্ছিল। আপনি চাইলে ওখানে টাইপ করে 100%, 80%, 53% -এভাবে যে পরিমাণ বড় করে দেখতে চান, দিতে পারেন। (একই ফাংশন Info প্যালেটে দেখা যায়)</p>



<p><strong>২</strong><strong>.</strong> এটা মূলত কোনো অনলাইন এডিটিং-এর সময়, কিংবা কোনো নেটওয়ার্কে একাধিক ব্যক্তি একটি ফাইলে কাজ করছেন, ওসব ক্ষেত্রে নেটওয়ার্কে যোগাযোগ ম্যানেজ করা যায় ওখান থেকে। নেটওয়ার্কে বসে একাধিক ব্যক্তি একসাথে কাজ না করলে ওটার দরকার পড়বে না। (একই ফাংশন মেনুবারে File &gt; Workgroup-এ দেখা যাবে)</p>



<p><strong>৩</strong><strong>.</strong> এখানে দেখা যায়, যে ফাইলটা খোলা আছে, বা চালু করেছি, তার প্রকৃত আকৃতি কত, যেমন: 3M মানে হচ্ছে ছবিটার পিক্সেল ডাইমেনশন, মানে পিক্সেলের আকার কেমন, তা নির্দেশ করছে। দ্বিতীয়াংশের লেখাটি ফাইলের সম্ভাব্য আকৃতি সম্পর্কে ধারণা দেয় কিলোবাইটে (k) কিংবা মেগাবাইটে (m)।</p>



<p><strong>৪</strong><strong>.</strong> ৩ নম্বর অংশে কোন তথ্যটা দেখতে চান, তা এখান থেকে ঠিক করে দেয়া যায়। প্রাথমিকভাবে Document Sizes সিলেক্ট করে দেয়া আছে, তাই ৩ নম্বর-স্থলে ডকুমেন্ট সাইযেস দেখাচ্ছে। যদি Document Dimensions সিলেক্ট করা থাকতো, তাহলে ডকুমেন্টের পাশ-উচ্চতা’র (width-height) পরিমাপ দেখাতো।</p>



<p>আর এর ঠিক পরের অংশটিতে দেখায়, যে টুলটি সিলেক্ট করা আছে, তা পরিচালনা করার প্রয়োজনীয় নির্দেশনা।</p>



<p><strong>ন্যাভিগেটর</strong><strong>প্যালেট</strong><strong> (Navigator)</strong><strong>:</strong> এখানে দেখা যায় নিবন্ধটা কত শতাংশ বড় করে দেখা যাচ্ছে, তা প্রয়োজনে ছোট-বড় করা যায়।</p>



<p><strong>ইনফো</strong><strong>প্যালেট</strong><strong> (Info)</strong><strong>:</strong> মাউসের কার্সরটা এই মুহূর্তে যেখানে আছে, সেখানটার রংয়ের মান কী (R=?, G=?, B=? অথবা C=?, M=?, Y=?, K=?), রুলারের হিসাবে ওটার X-অক্ষ এবং Y-অক্ষের মান কত –সবকিছু দেখাবে।</p>



<p><strong>কালার</strong><strong>প্যালেট</strong><strong> (Color)</strong><strong>:</strong> ফোরগ্রাউন্ড কালার (উপরের রং) আর ব্যাকগ্রাউন্ড কালার (পিছনের রং) এখন কী আছে, এবং তা প্রয়োজনে পরিবর্তন করে নেয়া যায় যে কোনো রঙে, এখান থেকে।</p>



<p><strong>সোয়াচেয</strong><strong>প্যালেট</strong><strong> (Swatches)</strong><strong>:</strong> এখানে অনেকগুলো রং একসাথে দেখা যাবে, তবে প্রত্যেকটা আলাদা আলাদা করে দেখানো হয়েছে। প্রয়োজনীয় রঙে ক্লিক করে সেই রংটি দ্রুততার সাথে বাছাই করা যাবে।</p>



<p><strong>স্টাইল্</strong><strong>‌</strong><strong>স</strong><strong>প্যালেট</strong><strong> (Styles)</strong><strong>:</strong> বিভিন্ন ইফেক্ট, যা আপনি আগে কোথাও দিয়েছিলেন, তা যদি সেভ করে রাখেন, তবে তা এখানে দেখাবে। সহজ ভাষায়, স্টাইল্‌স প্যালেটে থাকবে সব রেকর্ড করা ইফেক্ট, যা বারবার কাজে লাগানো যায়।</p>



<p><strong>হিস্ট্রি</strong><strong>প্যালেট</strong><strong> (History)</strong><strong>:</strong> যা যা কাজ করলেন, তার সবই ধারাবাহিকভাবে দেখা যাবে এই প্যালেটে, প্রয়োজনীয় ধাপে এক ক্লিকেই ঘুরে আসা যায়।</p>



<p><strong>এ্যাকশন্</strong><strong>‌</strong><strong>স</strong><strong>প্যালেট</strong><strong> (Actions)</strong><strong>:</strong> একই ধরণের কাজ (এ্যাকশন) করার একঘেয়েমী দূর করতে একবার করে তা এখানে রেখে দেয়া যায়, পরে এক ক্লিকে কাজে লাগানো যায়।</p>



<p><strong>টুল</strong><strong>প্রিসেট্</strong><strong>‌</strong><strong>স</strong><strong> (Tool Presets)</strong><strong>:</strong> টুলবারে যে টুলটা সিলেক্ট করা হলো, তার কোনো বিশেষ ইফেক্ট যদি সেভ করা থাকে, তবে সেটা এখানে দেখা যায়। ফটোশপে প্রাথমিকভাবে কিছু প্রিসেট দিয়ে দেয়া থাকে।</p>



<p><strong>লেয়ার্</strong><strong>‌</strong><strong>স</strong><strong>প্যালেট</strong><strong> (Layers)</strong><strong>:</strong> আমার সবচেয়ে পছন্দের প্যালেট, এবং ফটোশপের সবচেয়ে বেশি ব্যবহৃত একটা প্যালেট। এখানে বিভিন্ন স্তর তৈরি করে একই ছবিতেই বিভিন্ন স্তরে আলাদা আলাদাভাবে কাজ করা যায়।</p>



<p><strong>চ্যানেল্</strong><strong>‌</strong><strong>স</strong><strong>প্যালেট</strong><strong> (Channels)</strong><strong>:</strong> ছবিটা যদি আরজিবি মোডে থাকে, তবে তিনটার সংমিশ্রণে একটা আর তিনটাতে আলাদা আলাদা করে আরো তিনটা –এভাবে একাধিক চ্যানেলে ছবিটাকে দেখা যায়।</p>



<p><strong>পাথ্</strong><strong>‌</strong><strong>স</strong><strong>প্যালেট</strong><strong> (Paths)</strong><strong>:</strong> সাধারণত কিছুই থাকে না। ছবির কোনো সিলেকশন যদি সংরক্ষণ (সেভ) করা হয়, তাহলে সেটা এখানে সংরক্ষিত থাকে।</p>



<p><strong>ক্যারেক্টার</strong><strong>প্যালেট</strong><strong> (Character)</strong><strong>:</strong> ফটোশপে লেখার জন্য যখন টেক্সট টুলের কাজ আসবে, তখন আপনার সবচেয়ে বেশি কাজে লাগবে এই ক্যারেক্টার প্যালেট। এখান থেকে ফন্ট সংক্রান্ত যাবতীয় পরিবর্তন এবং পরিশুদ্ধি আপনি নিশ্চিত করতে পারবেন।</p>



<p><strong>প্যারাগ্রাফ প্যালেট</strong><strong> (Paragraph)</strong><strong>:</strong> লেখাগুলোকে সুন্দর করে গুছিয়ে উপস্থাপন করার জন্য প্যারাগ্রাফের বিভিন্ন ধরণ পরিবর্তনে সহায়তা করবে এই প্যালেটটি।</p>



<p><strong>প্যালেট কূপ</strong><strong> (Palette Well)</strong><strong>:</strong> নাম দেখে ঘাবড়ে যাবার কিছু নেই, ফটোশপ ৭-এ প্যালেটগুলোর উপরের দিকে রিবনের ডান অংশে ব্রাশেয আর ফাইল ব্রাউযার নামে দুটো প্যালেট বসে থাকতে দেখা যায়, ঐ অংশটাকে বলে প্যালেট ওয়েল, যার বাংলা করলে দাঁড়ায় প্যালেটের কুয়া বা কূপ। প্রাথমিকভাবে প্যালেট কূপে এই ব্রাশেয আর ফাইল ব্রাউযার- দুটো প্যালেটই থাকে।</p>



<p><strong>ব্রাশেয প্যালেট</strong><strong> (Brushes)</strong><strong>:</strong> টুলবারে যে ব্রাশটা সিলেক্ট করা আছে, সেটাকে এখানে ইচ্ছামতো বদলে নেয়া যায়।</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/file-manager.jpg"><img decoding="async" width="626" height="431" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/file-manager.jpg?w=300" alt="ফাইল ব্রাউযার প্যালেট পরিচিতি" class="wp-image-113" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/file-manager.jpg 626w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/file-manager-300x207.jpg 300w" sizes="(max-width: 626px) 100vw, 626px" /></a><figcaption class="wp-element-caption">স্ক্রিনশট ০২: ফাইল ব্রাউযার প্যালেট পরিচিতি</figcaption></figure></div>


<p><strong>ফাইল</strong><strong>ব্রাউযার প্যালেট (</strong><strong>File Browser</strong><strong>)</strong><strong>:</strong> সহজে নির্দিষ্ট ফাইলকে খুলতে ফাইল ব্রাউজার কাজের জিনিস। এখান থেকে যেকোনো স্থানে গিয়ে প্রয়োজনীয় ফাইলটা খোলা যায়। এমনকি লক্ষ করলে দেখবেন, ফাইল ব্রাউজারের একেবারে নিচে-ডানে সিলেক্ট করা ফাইলটাকে উৎসস্থলেই ৯০০[ডিগ্রী] রোটেট করা বা ঘোরানো যায়।</p>



<p>যদি কোনো প্যালেট দেখা না যায়, তাহলে খুব সহজেই মেনুবারের Window মেনুর অধীনে ক্লিক করে প্রয়োজনীয় প্যালেট চালু করে নেয়া যাবে, আবার প্রয়োজনে বন্ধও করে ফেলা যাবে।</p>



<h3>প্যালেট কূপে প্যালেট ফেলা</h3>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/dock-to-palette-well.jpg"><img decoding="async" width="339" height="314" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/dock-to-palette-well.jpg" alt="প্যালেট ওয়েলে প্যালেট ফেলা" class="wp-image-114" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/dock-to-palette-well.jpg 339w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/dock-to-palette-well-300x278.jpg 300w" sizes="(max-width: 339px) 100vw, 339px" /></a><figcaption class="wp-element-caption">পরিচিত্রণ ০১: প্যালেট ওয়েলে প্যালেট ফেলা</figcaption></figure></div>


<p>আপনার প্যালেটগুলো যদি ওয়ার্কস্পেসের ডানদিকে সংকুলান হয়না, তাহলে আপনি আপনার পছন্দের প্যালেটটিকে প্যালেট কূপে নোঙর (dock) করিয়ে রাখতে পারেন বা ফেলে দিতে পারেন। এজন্য পছন্দের প্যালেট শিরোনামে একটা ক্লিক করে প্যালেটটি নির্বাচন করে নিতে হবে। তারপর প্যালেটের ডানদিকে ডান-মুখী তীরটাতে ক্লিক করে তার মেনু বের করতে হবে। মেনুর প্রথম অপশনটাই হলো “Dock to Palette Well”। ওটাতে ক্লিক করলেই আপনার প্যালেটটি প্যালেট কূপে গিয়ে ঢুকে যাবে। কুয়ার মধ্যে পড়ে যাওয়ার যে এতো আনন্দ, ঐ প্যালেটকে না দেখলে বোঝা যাবে না তখন।</p>



<h3>ইচ্ছেমতো ওয়ার্কস্পেস সাজানো</h3>



<p>যেভাবে ফটোশপে প্যালেটগুলো সাজানো আছে, আপনাকে সেভাবে রেখেই কাজ করতে হবে –এমন অমোঘ বাণী কোথাও লেখা নেই। আপনি চাইলেই আপনার পছন্দমতো অবস্থানে প্রয়োজনীয় প্যালেটটি সরিয়ে রাখতে পারেন। পদ্ধতি খুবই সহজ: মাউস দিয়ে ধরুন প্রয়োজনীয় প্যালেটটা, তারপর ড্র্যাগ করে (ক্লিক করে ধরে রেখে মাউস সরানো) প্যালেটটা পছন্দের জায়গায় এনে ছেড়ে দিন। এভাবে যে যে প্যালেট যেখানে যেখানে রাখতে চান, রেখে দিলেই আপনার পছন্দমতো ওয়ার্কস্পেস বা কর্মক্ষেত্র প্রস্তুত হয়ে গেলো।</p>



<p>কিন্তু কথা হলো, আপনি যখন ফটোশপ বন্ধ করে দিবেন, তখন আবার তা আপনাআপনি আগের মতো হয়ে যাবে। তাহলে এতো কষ্ট করেইবা লাভ কী হলো, আর করলামই যখন, তখন কেন সেরকম থাকলো না?</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/save-workspace.jpg"><img decoding="async" width="921" height="243" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/save-workspace.jpg" alt="ওয়ার্কস্পেস সংরক্ষণ, পূণর্ব্যবহার, কিংবা প্রাথমিক অবস্থায় ফেরা" class="wp-image-115" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/save-workspace.jpg 921w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/save-workspace-300x79.jpg 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2012/01/save-workspace-768x203.jpg 768w" sizes="(max-width: 921px) 100vw, 921px" /></a><figcaption class="wp-element-caption">০২: ওয়ার্কস্পেস সংরক্ষণ, পূণর্ব্যবহার, কিংবা প্রাথমিক অবস্থায় ফেরা</figcaption></figure></div>


<p>এই সমস্যার সমাধান হলো, নিজের পছন্দের ওয়ার্কস্পেস সংরক্ষণ করে রাখা (সেভ করা)। নিজের পছন্দমতো প্যালেটগুলো সাজিয়ে নেয়া হয়ে গেলে, মেনু বারের Window &gt; Workspace &gt; Save Workspace&#8230; –এ ক্লিক করতে হবে (চিত্রে দ্রষ্টব্য 1)। একটা পপআপ আসবে (চিত্রে দ্রষ্টব্য 2), সেখানে আপনার পছন্দের ওয়ার্কস্পেসের জন্য একটা নাম লিখুন (আমরা যেমন লিখেছি nanodesigns workspace), তারপর সেভ বোতাম চাপুন। ব্যস, আপনার ওয়ার্কস্পেস সংরক্ষিত থাকলো। পরবর্তিতে ওয়ার্কস্পেস অন্যরকম হয়ে গেলেও Window &gt; Workspace–এর অধীনে থাকা আপনার সংরক্ষিত ওয়ার্কস্পেস লোড করতে (পূণরায় ব্যবহার করতে) পারেন (চিত্রে দ্রষ্টব্য 3)।</p>



<p>আর যদি কখনও মনে হয়, নাহ্, এগুলো আর ভালো লাগছে না, ফটোশপে যেভাবে দেয়া ছিল, সেভাবেই ফিরে যাই, তাহলে Window &gt; Workspace &gt; Reset Palette Locations –এ ক্লিক করে প্যালেটের অবস্থান রিসেট করে নিয়ে ডিফল্ট বা প্রাথমিক অবস্থায় ফিরে যাওয়া যাবে সহজেই।</p>



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



<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 href="https://mayeenulislam.github.io/" target="_blank" rel="noreferrer noopener">mayeenulislam.github.io</a></p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/basix-photoshop-workspace/">বেসিX: ফটোশপের ওয়ার্কস্পেস</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/basix-photoshop-workspace/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
