৭.২ গিট টুলস – ইন্টারেক্টিভ স্টেজিং

ইন্টারেক্টিভ স্টেজিং 

এই বিভাগে, আপনি কয়েকটি ইন্টারেক্টিভ গিট কমান্ড দেখবেন যা আপনাকে শুধুমাত্র নির্দিষ্ট সংমিশ্রণ এবং ফাইলগুলির অংশ অন্তর্ভুক্ত করার জন্য আপনার কমিটগুলি তৈরি করতে সহায়তা করতে পারে। এই সরঞ্জামগুলি সহায়ক যদি আপনি অনেকগুলি ফাইলকে ব্যাপকভাবে পরিবর্তন করেন, তারপরে সিদ্ধান্ত নিলেন যে আপনি সেই পরিবর্তনগুলিকে একটি বড় অগোছালো কমিটের পরিবর্তে কয়েকটি ফোকাসড কমিটগুলিতে বিভক্ত করতে চান৷ এইভাবে, আপনি নিশ্চিত করতে পারেন যে আপনার কমিটগুলি যৌক্তিকভাবে পৃথক পরিবর্তনসমূহের সেট এবং আপনার সাথে কাজ করা ডেভেলপারগণ সহজেই এই কমিটগুলি পর্যালোচনা করতে পারে।

আপনি যদি  git add কমান্ডের সাথে -i বা –iteractive চালান, গিট একটি ইন্টারেক্টিভ শেল মোডে প্রবেশ করে, এইরকম কিছু প্রদর্শন করে:

				
					$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now>
				
			

আপনি দেখতে পাচ্ছেন যে, এই কমান্ডটি আপনাকে আপনার স্টেজিং এরিয়ার তুলনায় অনেক আলাদা একটি আউটপুট দেয় , যেটি দেখতে আপনি হয়তো অভ্যস্ত নন– — মূলত, আপনি git status কমান্ডের সাহায্যে একই তথ্য পাবেন কিন্তু তা একটু বেশি সংক্ষিপ্ত এবং তথ্যপূর্ণ। এটি বাম দিকে স্টেজিং এর পরিবর্তনগুলো এবং ডান দিকে আন-স্টেজড পরিবর্তনগুলো লিস্ট করে আউটপুট দেয়। 

এর পরে একটি “কমান্ড” বিভাগ আসে, যা আপনাকে ফাইলগুলিকে স্টেজিং এবং আনস্টেজিং, ফাইলের স্টেজিং অংশগুলি, আনট্র্যাক করা ফাইলগুলি যোগ করা এবং যা স্টেজড এরিয়া-তে করা হয়েছে তার পার্থক্যগুলি প্রদর্শন করার মতো অনেকগুলি কাজ করতে দেয়৷ 

স্টেজিং এবং আনস্টেজিং ফাইল

আপনি যদি What now> প্রম্পটে u বা 2  ( আপডেটের জন্য ) টাইপ করেন, তাহলে আপনি কোন ফাইলগুলি স্টেজ করতে চান তার জন্য আপনাকে অনুরোধ করা হবে:

				
					What now> u
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>
				
			

TODO এবং index.html ফাইলগুলি স্টেজ করার জন্য, আপনি নম্বরগুলি টাইপ করতে পারেন:

				
					Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>
				
			

প্রতিটি ফাইলের পাশে * মানে ফাইলটি স্টেজ করার জন্য নির্বাচন করা হয়েছে। আপনি যদি Update>> প্রম্পটে যে কোন কিছুই টাইপ করার পরে এন্টার চাপ দেন, Git কোন কিছু সিলেক্ট করে নেয় এবং এটি আপনার জন্য স্টেজিং করে:

				
					Update>>
updated 2 paths

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
				
			

এখন আপনি দেখতে পাচ্ছেন যে TODO এবং index.html ফাইলগুলি স্টেজ করা হয়েছে এবং simplegit.rb ফাইলটি এখনও আনস্টেজ করা আছে। আপনি যদি এই মুহুর্তে TODO ফাইলটি আনস্টেজ করতে চান তবে আপনি r বা 3  ( আগেকার অবস্থায় আসার জন্য ) অপশনটি ব্যবহার করুন:

				
					*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> 1
           staged     unstaged path
* 1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path
				
			

আবার আপনার গিট স্ট্যাটাস দেখুন , আপনি দেখতে পাবেন যে আপনি TODO ফাইলটি আনস্টেজ করেছেন:

				
					*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
				
			

আপনি যা স্টেজড করেছেন তার পার্থক্য দেখতে, d বা 6  ( diff এর জন্য ) কমান্ডটি ব্যবহার করতে পারেন। এটি আপনাকে আপনার স্টেজ করা ফাইলগুলির একটি তালিকা দেখায় এবং আপনি সেগুলি নির্বাচন করতে পারেন যার জন্য আপনি স্টেজড ডিফ দেখতে চান৷ এটি অনেকটা কমান্ড লাইনে git diff –cached নির্দিষ্ট করার মতো:

				
					*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> d
           staged     unstaged path
  1:        +1/-1      nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder

 <p id="out">...</p>

-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>

 <script  data-wpmeteor-after="REORDER" type="javascript/blocked" data-wpmeteor-type="text/javascript" >
				
			

এই বেসিক কমান্ডগুলির সাহায্যে, আপনি আপনার স্টেজিং এরিয়াটি আরও সহজে পরিচালনা করতে ইন্টারেক্টিভ অ্যাড মোড ব্যবহার করতে পারেন।

স্টেজিং প্যাচ  ( Staging Patches )

গিটের পক্ষে ফাইলগুলির নির্দিষ্ট অংশগুলি স্টেজ করা এবং বাকিগুলি স্টেজ না করা সম্ভব। উদাহরণ স্বরূপ, আপনি যদি আপনার simplegit.rb ফাইলে দুটি পরিবর্তন করেন এবং সেগুলোর একটিকে স্টেজ করতে চান এবং অন্যটিকে নয়, তাহলে গিট-এ তা করা খুবই সহজ। পূর্ববর্তী বিভাগে ব্যাখ্যা করা একই ইন্টারেক্টিভ প্রম্পট থেকে, p বা 5  ( প্যাচের জন্য ) টাইপ করুন। গিট আপনাকে জিজ্ঞাসা করবে কোন ফাইলগুলি আপনি আংশিকভাবে স্টেজ করতে চান; তারপর, নির্বাচিত ফাইলগুলির প্রতিটি বিভাগের জন্য, এটি ফাইলের পার্থক্যের হাঙ্কগুলি প্রদর্শন করবে এবং জিজ্ঞাসা করবে যে আপনি সেগুলিকে এক এক করে স্টেজ করতে চান কিনা:

				
					diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
				
			

এই মুহুর্তে আপনার কাছে অনেকগুলি অপশন রয়েছে। এটি ?  টাইপ করলে আপনি কি করতে পারেন তার একটি তালিকা দেখায়:

				
					Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
				
			

সাধারণত, আপনি যদি প্রতিটি হাঙ্ক স্টেজ করতে চান তবে আপনি y বা n টাইপ করবেন, তবে সেগুলিকে নির্দিষ্ট ফাইলে স্টেজিং করা বা পরবর্তী পর্যন্ত একটি হাঙ্ক সিদ্ধান্ত এড়িয়ে যাওয়াও সহায়ক হতে পারে। আপনি যদি ফাইলের একটি অংশ স্টেজ করেন এবং অন্য অংশটি স্টেজ ছাড়াই রেখে দেন, আপনার স্ট্যাটাস আউটপুট এইরকম দেখাবে:

				
					What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:        +1/-1        +4/-0 lib/simplegit.rb
				
			

simplegit.rb ফাইলের অবস্থা আকর্ষণীয়। এটি আপনাকে দেখায় যে কয়েকটি লাইন স্টেজিং করা হয়েছে এবং কিছু সংখ্যক স্টেজিং করা হয়নি। আপনি এই ফাইলটি আংশিকভাবে স্টেজিং করেছেন। এই মুহুর্তে, আপনি ইন্টারেক্টিভ যুক্ত স্ক্রিপ্ট থেকে প্রস্থান করতে পারেন এবং আংশিকভাবে স্টেজ করা ফাইলগুলি কমিট করতে git commit চালাতে পারেন। আংশিক-ফাইল স্টেজিং করার জন্য আপনাকে ইন্টারেক্টিভ অ্যাড মোডে থাকতে হবে না — আপনি কমান্ড লাইনে git add -p বা git add –patch ব্যবহার করে একই স্ক্রিপ্ট শুরু করতে পারেন। উপরন্তু, আপনি git reset –patch কমান্ডের সাহায্যে ফাইলের আংশিকভাবে রিসেট করার জন্য প্যাচ মোড ব্যবহার করতে পারেন, git checkout –patch কমান্ডের মাধ্যমে ফাইলের অংশগুলি পরীক্ষা করতে পারেন এবং git stash save –patch কমান্ডের সাহায্যে ফাইলের অংশগুলিকে স্ট্যাশ করতে পারেন। আমরা এই কমান্ডগুলির আরও উন্নত ব্যবহারে পৌঁছানোর সাথে সাথে এর প্রতিটি সম্পর্কে আরও বিশদে যাব।