৭.৪ গিট টুলস – আপনার কাজ স্বাক্ষর করা

আপনার কাজ স্বাক্ষর করা

 গিট ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত, কিন্তু এটি নির্বোধ নয়। আপনি যদি ইন্টারনেটে অন্যদের কাছ থেকে কাজ নেন এবং যাচাই করতে চান যে কমিটগুলি আসলে একটি বিশ্বস্ত উৎস থেকে এসেছে কিনা, তবে গিট-এর কাছে GPG ব্যবহার করে কাজ স্বাক্ষর এবং যাচাই করার কয়েকটি উপায় রয়েছে।

GPG পরিচিতি 

প্রথমত, আপনি যদি কিছু সাইন ইন করতে চান তবে আপনাকে GPG কনফিগার করতে হবে এবং আপনার ব্যক্তিগত কী ইনস্টল করতে হবে।

				
					$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub   2048R/0A46826A 2014-06-04
uid                  Scott Chacon (Git signing key) <schacon@gmail.com>
sub   2048R/874529A9 2014-06-04
				
			

আপনার যদি কোনো কী  ইনস্টল না থাকে, তাহলে আপনি gpg –gen-key দিয়ে একটি তৈরি করতে পারেন।

				
					$ gpg --gen-key
				
			

একবার আপনার কাছে স্বাক্ষর করার জন্য একটি ব্যক্তিগত কী থাকলে, আপনি গিট কনফিগার  করে user.signingkey কনফিগার সেটিং সেট করার মাধ্যমে জিনিসগুলি স্বাক্ষর করতে পারেন।

				
					$ git config --global user.signingkey 0A46826A!
				
			

এখন ডিফল্টভাবে ট্যাগ সাইন ইন করতে এবং কমিট করতে চাইলে গিট আপনার কী-টি ব্যবহার করবে।

সাইনিং ট্যাগ

আপনার যদি একটি GPG প্রাইভেট কী সেট আপ থাকে, আপনি এখন নতুন ট্যাগ সাইন ইন করতে এটি ব্যবহার করতে পারেন৷ আপনাকে যা করতে হবে তা হল -a এর পরিবর্তে -s ব্যবহার করুন:

				
					$ git tag -s v1.5 -m 'my signed 1.5 tag'

You need a passphrase to unlock the secret key for
user: "Ben Straub <ben@straub.cc>"
2048-bit RSA key, ID 800430EB, created 2014-05-04
				
			

আপনি যদি সেই ট্যাগে git show চালান তবে আপনি এটির সাথে আপনার GPG স্বাক্ষরটি সংযুক্ত দেখতে পাবেন:

				
					$ git show v1.5
tag v1.5
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:29:41 2014 -0700

my signed 1.5 tag

				
			
				
					-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAABAgAGBQJTZbQlAAoJEF0+sviABDDrZbQH/09PfE51KPVPlanr6q1v4/Ut
LQxfojUWiLQdg2ESJItkcuweYg+kc3HCyFejeDIBw9dpXt00rY26p05qrpnG+85b
hM1/PswpPLuBSr+oCIDj5GMC2r2iEKsfv2fJbNW8iWAXVLoWZRF8B0MfqX/YTMbm
ecorc4iXzQu7tupRihslbNkfvfciMnSDeSvzCpWAHl7h8Wj6hhqePmLm9lAYqnKp
8S5B/1SSQuEAjRZgI4IexpZoeKGVDptPHxLLS38fozsyi0QyDyzEgJxcJQVMXxVi
RUysgqjcpT8+iQM1PblGfHR4XAhuOqN5Fx06PSaFZhqvWFezJ28/CLyX5q+oIVk=
=EFTF
-----END PGP SIGNATURE-----

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    Change version number

				
			

ট্যাগ যাচাই করা

একটি স্বাক্ষরিত ট্যাগ যাচাই করতে, আপনি git tag -v <tag-name> ব্যবহার করতে পারেন। এই কমান্ডটি স্বাক্ষর যাচাই করতে GPG ব্যবহার করে। এটি সঠিকভাবে কাজ করার জন্য আপনার কী-রিংয়ে স্বাক্ষরকারীর পাবলিক কী প্রয়োজন:

				
					$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700

GIT 1.4.2.1

Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg:                 aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7  4A7D C0C6 D9A4 F311 9B9A
				
			

যদি আপনার কাছে স্বাক্ষরকারীর পাবলিক কী  ( key ) না থাকে তবে আপনি এর পরিবর্তে এরকম কিছু পাবেন:

				
					gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
				
			

সাইনিং কমিট

গিট-এর আরও সাম্প্রতিক সংস্করণে  ( v1.7.9 এবং তার উপরে ), আপনি এখন স্বতন্ত্র কমিটগুলোতেও স্বাক্ষর করতে পারেন। আপনি যদি ট্যাগগুলির পরিবর্তে সরাসরি স্বাক্ষর করতে আগ্রহী হন তবে আপনাকে যা করতে হবে তা হল আপনার git commit কমান্ডে -S যোগ করুন।

				
					$ git commit -a -S -m 'Signed commit'

You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04

[master 5c3386c] Signed commit
 4 files changed, 4 insertions(+), 24 deletions(-)
 rewrite Rakefile (100%)
 create mode 100644 lib/git.rb
				
			

এই স্বাক্ষরগুলি দেখতে এবং যাচাই করার জন্য, git log করার জন্য একটি –show-signature এর মতো একটি অপশন ও রয়েছে।

				
					$ git log --show-signature -1
commit 5c3386cf54bba0a33a32da706aa52bc0155503c2
gpg: Signature made Wed Jun  4 19:49:17 2014 PDT using RSA key ID 0A46826A
gpg: Good signature from "Scott Chacon (Git signing key) <schacon@gmail.com>"
Author: Scott Chacon <schacon@gmail.com>
Date:   Wed Jun 4 19:49:17 2014 -0700

    Signed commit
				
			

এছাড়াও, আপনি git log কমান্ডটি কনফিগার করে, এটি পায় এমন যেকোন স্বাক্ষর যাচাই এবং %G? বিন্যাসের সাথে তার আউটপুটে তালিকাভুক্ত করতে পারেন।

				
					$ git log --pretty="format:%h %G? %aN  %s"

5c3386c G Scott Chacon  Signed commit
ca82a6d N Scott Chacon  Change the version number
085bb3b N Scott Chacon  Remove unnecessary test code
a11bef0 N Scott Chacon  Initial commit
				
			

এখানে আমরা দেখতে পাচ্ছি যে শুধুমাত্র সর্বশেষ কমিটটি স্বাক্ষরিত এবং বৈধ এবং পূর্ববর্তী কমিট গুলি নয়। 

গিট 1.8.3 এবং পরবর্তী সংস্করনগুলোতে, –verify-signatures  কমান্ডের সাথে একটি বিশ্বস্ত GPG স্বাক্ষর বহন করে না এমন একটি কমিট মার্জ করার সময় git merge এবং git pulll-কে নিরক্ষন এবং বাতিল করতে বলা যেতে পারে।

আপনি যদি একটি ব্রাঞ্চ মার্জ করার সময় এই অপশনটি ব্যবহার করেন এবং এতে স্বাক্ষরিত নয় এবং অবৈধ কমিট থাকে, তাহলে এটি মার্জ কাজ করবে না।

				
					$ git merge --verify-signatures non-verify
fatal: Commit ab06180 does not have a GPG signature.
				
			

যদি মার্জিং-এ শুধুমাত্র বৈধ স্বাক্ষরিত কমিট থাকে, তাহলে মার্জ কমান্ড আপনাকে এটি চেক করা সমস্ত স্বাক্ষর দেখাবে এবং তারপর মার্জ নিয়ে এগিয়ে যাবে।

				
					$ git merge --verify-signatures signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
Updating 5c3386c..13ad65e
Fast-forward
 README | 2 ++
 1 file changed, 2 insertions(+)
				
			

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



				
					$ git merge --verify-signatures -S  signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>

You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04

Merge made by the 'recursive' strategy.
 README | 2 ++
 1 file changed, 2 insertions(+)
				
			

সবাইকে সাইন করতে হবে 

ট্যাগ এবং কমিট-এ স্বাক্ষর করা দুর্দান্ত, কিন্তু আপনি যদি এটি আপনার স্বাভাবিক কর্মপ্রবাহে ব্যবহার করার সিদ্ধান্ত নেন, তাহলে আপনাকে নিশ্চিত করতে হবে যে আপনার দলের প্রত্যেকে এটি কীভাবে করতে হবে তা বুঝতে পারে। আপনি যদি তা না করেন, তাহলে স্বাক্ষরিত সংস্করণগুলির সাথে কীভাবে তাদের কমিটগুলি পুনরায় লিখতে হবে তা নির্ধারণ করতে এবং এক্ষেত্রে লোকেদের সাহায্য করতেই আপনি অনেক সময় ব্যয় করবেন। আপনার স্ট্যান্ডার্ড ওয়ার্কফ্লো’র অংশ হিসাবে এটি গ্রহণ করার আগে আপনি GPG এবং জিনিসগুলি স্বাক্ষর করার সুবিধাগুলি বুঝতে পেরেছেন তা নিশ্চিত করুন৷