জিপিজি কী দিয়ে গিটে কমিট করার জন্য "অটোসাইন" করার কোনও উপায় আছে কি?


213

গিটটি সর্বদা তৈরি হওয়া প্রতিটি প্রতিশ্রুতি বা ট্যাগকে স্বাক্ষর করার সহজ উপায় কি?

আমি এরকম কিছু দিয়ে চেষ্টা করেছি:

ওরফে কমিট = কমিট-এস

কিন্তু এটি কৌশলটি করেনি।

এটি ঘটানোর জন্য আমি কোনও আলাদা প্রোগ্রাম ইনস্টল করতে চাই না। এটি কি স্বাচ্ছন্দ্য সহকারে কার্যকর?

কেবলমাত্র একটি পক্ষের প্রশ্ন, সম্ভবত কমিটগুলি স্বাক্ষরিত হওয়া উচিত নয়, কেবল ট্যাগগুলি, যা আমি কখনই তৈরি করি না, যেমন আমি হোমব্রু ইত্যাদির মতো প্রকল্পের জন্য একক কমিটি জমা দিই etc.


8
আপনার উরফটি কাজ করার কারণ হ'ল আপনি ইতিমধ্যে বিদ্যমান একটি কমান্ডের মাধ্যমে উলামা করতে পারবেন না। (সম্পর্কিত: stackoverflow.com/questions/5875275/git-commit-v-by-default stackoverflow.com/questions/2500586/... stackoverflow.com/questions/1278296/... )
ড্যান ডি

2
শুধু তথ্যের জন্য: সমস্ত স্বাক্ষর করে তাদের সাইন ইন করার জন্য প্রতিশ্রুতি পুনর্লিখন: git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD(আমার অর্থ এই নয় যে আপনার এটি ব্যবহার করা উচিত)।
vi।

উত্তর:


275

দ্রষ্টব্য: আপনি যদি নিজের -Sচুক্তি স্বাক্ষরিত হয় তা নিশ্চিত করার জন্য যদি আপনি সমস্ত সময় যুক্ত করতে না চান তবে একটি প্রস্তাব রয়েছে ( puএখনকার জন্য, শাখা ' ', তাই এটি কোনও গিটার রিলিজে গ্যারান্টি দেবে না) কনফিগার করুন যা আপনার জন্য সেই বিকল্পটির যত্ন নেবে।
মে 2014 আপডেট করুন: এটি গিট 2.0 এ রয়েছে ( এই প্যাচ সিরিজে পুনরায় পাঠানোর পরে )

নিকোলাস ভিগিয়ার (বক্লম) দ্বারা প্রতিশ্রুতিবদ্ধ 2af2ef3 দেখুন :

commit.gpgsignসমস্ত কমিট সাইন করতে বিকল্প যুক্ত করুন

আপনি যদি জিপিজি আপনার সমস্ত প্রতিশ্রুতিতে স্বাক্ষর করতে চান তবে আপনাকে সর্বদা -Sবিকল্পটি যুক্ত করতে হবে। কনফিগ বিকল্প স্বয়ংক্রিয়ভাবে সব করে সাইন ইন করতে পারেন।
commit.gpgsign

commit.gpgsign

সমস্ত কমিট জিপিজি স্বাক্ষরিত হওয়া উচিত কিনা তা নির্দিষ্ট করার জন্য একটি বুলিয়ান।
রিবেসের মতো ক্রিয়াকলাপ করার সময় এই বিকল্পটি ব্যবহারের ফলে প্রচুর পরিমাণে চুক্তি স্বাক্ষরিত হতে পারে। আপনার জিপিজি পাসফ্রেজটি কয়েকবার টাইপ করা এড়াতে এজেন্ট ব্যবহার করা সুবিধাজনক হতে পারে।


এই কনফিগারেশনটি সাধারণত প্রতি রেপিতে সেট করা হয় (আপনার ব্যক্তিগত পরীক্ষামূলক স্থানীয় রেপগুলিতে আপনাকে সাইন করতে হবে না):

cd /path/to/repo/needing/gpg/signature
git config commit.gpgsign true

আপনি এটি user.signingKeyএকটি বিশ্বব্যাপী সেটিংস হিসাবে ব্যবহারের সাথে একত্রিত করবেন (যেখানে প্রতিশ্রুতিতে সাইন করতে চান সেখানে সমস্ত রেপোর জন্য ব্যবহৃত অনন্য কী)

git config --global user.signingkey F2C7AB29

user.signingKeyসঙ্গে Git 1.5.0 (জানুয়ারি 2007) চালু হয় d67778e কমিট :

আমার গিট সংগ্রহস্থল এবং আমার জিপিজি কীতে আমার নামের একই ফর্মটি ব্যবহার করার দরকার নেই।
আরও আমার কিরিংগুলিতে আমার একাধিক কী থাকতে পারে এবং আমি প্রতিশ্রুতি বার্তাগুলিতে যে ঠিকানাটি ব্যবহার করি তার সাথে মেলে না এমন একটি ব্যবহার করতে চাই।

এই প্যাচটি একটি কনফিগারেশন এন্ট্রি যুক্ত করে " user.signingKey" যা উপস্থিত থাকলে, জিপিজি-র জন্য "-u" স্যুইচকে পাঠানো হবে, ট্যাগ সাইন ইন কীকে ওভাররাইড করার অনুমতি দেওয়া হবে।

এটি কেসটি ধরার জন্য কমিটমেন্ট aba9119 (গিট 1.5.3.2) দিয়ে প্রয়োগ করা হয়েছে যেখানে ব্যবহারকারী user.signingKeyযদি তাদের ভুল কনফিগারেশন করে থাকে .git/configবা কেবল কীরিংয়ে কোনও গোপন কী না থাকে।

মন্তব্য:


এটা দারুন. গিথুবটিতে গর্তের রেপো ডাউনলোড না করে গিট বর্ণনা করার মতো কিছু করার সহজ উপায় আছে?

13
আপনার ব্যক্তিগত পরীক্ষামূলক রেপগুলিতে আপনাকে সাইন করতে হবে না ... তবে আপনি কেন করবেন না?
অ্যান্ডি হেডেন

168
git config --global user.signingKey 9E08524833CB3038FDE385C54C0AFCCFED5CDE14
git config --global commit.gpgSign true

আপনার মূল আইডি দ্বারা 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 প্রতিস্থাপন করুন। মনে রাখবেন: শর্ট আইডি ব্যবহার করা কখনই ভাল ধারণা নয়

আপডেট: প্রতি একটি নতুন Git ফরমান , সমস্ত কনফিগ কী ক্যামেলকেস থাকা উচিত।


আপনি কি ভনসির উত্তর থেকে এটি অনুলিপি এবং অনুলিপি করেছেন ?
রবি অ্যাভারিল

19
না। সংস্করণ ইতিহাসে আপনি দেখতে পাচ্ছেন যে কেউ তার উত্তরে আমার উদাহরণ যুক্ত করেছে। ED5CDE14 আমার নিজস্ব ব্যক্তিগত কী। কিন্তু কোন সমস্যা নেই.
ফিলিপ

7
উদ্ভট। আপনার পক্ষে খারাপ
লাগছে বলেই

আপনি কী কী স্বাক্ষরকারী আইডি পাবেন? এছাড়াও, আমার সমস্ত গিট রিপোর জন্য কেবল 1 জিপিজি কী খারাপ আছে? কারণ আমি খুব বেশি সংযুক্ত প্রকল্পগুলিতে 4 ডিফ কীগুলি নিয়ে কাজ করতে পছন্দ করি না।
মার্কাসজে

1
এটি লিনাক্স ব্যবহারকারীদের সহায়তা করতে পারে: কিছু ক্ষেত্রে এটি কাজ করার জন্য (উদাহরণস্বরূপ ভিমে, পিন এন্ট্রি প্রয়োজন এমন একটি স্মার্ট কার্ডে থাকা কী ব্যবহার করে) আমাকে সম্পাদনা করতে ~/.gnupg/gpg-agent.confএবং যোগ করতে হয়েছিল pinentry-program /usr/bin/pinentry-gtk-2(এই গাইডটি অনুসরণ করে wiki.archlinux.org/ index.php / GnuPG # penterry )
iakovos গুরুুলিয়ান

49

সম্পাদনা: Git সংস্করণটি 1.7.9 পর্যন্ত এটা হল সম্ভব গীত করে সাইন ইন করতে ( git commit -S)। এটি প্রতিফলিত করতে উত্তরটি সামান্য আপডেট করা।

প্রশ্নের শিরোনামটি হ'ল:

জিপিজি কী দিয়ে গিটে কমিট করার জন্য "অটোসাইন" করার কোনও উপায় আছে কি?

সংক্ষিপ্ত উত্তর: হ্যাঁ, তবে এটি করবেন না।

প্রশ্নের টাইপকে সম্বোধন করা: git commit -sপ্রতিশ্রুতিতে স্বাক্ষর করে না। বরং man git-commitপৃষ্ঠা থেকে :

-s, --signoff
কমিট লগ বার্তা শেষে কমিটর দ্বারা সাইন-অফ-বাই লাইন যুক্ত করুন।

এটি নিম্নলিখিতগুলির মতো একটি লগ আউটপুট দেয়:


± $ git log                                                                                 [0:43:31]
commit 155deeaef1896c63519320c7cbaf4691355143f5
Author: User Name 
Date:   Mon Apr 16 00:43:27 2012 +0200

    Added .gitignore

    Signed-off-by: User Name 

"স্বাক্ষরিত-দ্বারা: ..." বিটটি নোট করুন; যে -sপতাকা পতাকা দ্বারা উত্পাদিত হয়েছিল git-commit

প্রকাশের ঘোষণার ইমেলটি উদ্ধৃত করে :

  • জিপিজি-স্বাক্ষর করতে "গিট কমিট" শিখেছি "-এস"; এটি "গিট লগ" এর "- শো-স্বাক্ষর" বিকল্পের সাহায্যে দেখানো যেতে পারে।

হ্যাঁ, আপনি কমিট সাইন করতে পারেন। যাইহোক, আমি ব্যক্তিগতভাবে এই বিকল্পের সাথে সতর্কতার জন্য অনুরোধ করছি; স্বয়ংক্রিয়ভাবে চুক্তিতে স্বাক্ষর করা অর্থহীনের পাশে, নীচে দেখুন:

কেবলমাত্র একটি পক্ষের প্রশ্ন, কমিটসকে স্বাক্ষর করা উচিত নয়, কেবলমাত্র ট্যাগস, যা আমি কখনই তৈরি করি না, যেমন আমি একক কমিটি জমা দিই।

এটাই সঠিক. কমিট স্বাক্ষরিত হয় না; ট্যাগ হয়। এর কারণ লিনাস টরভাল্ডসের এই বার্তায় পাওয়া যাবে , যার শেষ অনুচ্ছেদে বলা হয়েছে:

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

আমি লিঙ্কযুক্ত বার্তার একটি ব্রাউজকে উত্সাহিত করব, যা স্পষ্ট করে যে কেন স্বতঃসংশ্লিষ্টভাবে স্বাক্ষর করা আমার চেয়ে বেশি ভাল উপায়ে ভাল ধারণা নয়।

তবে , আপনি যদি কোনও স্বয়ংক্রিয়ভাবে কোনও ট্যাগ সাইন করতে চান, তবে আপনি git-tag -[s|u]একটি উপনামটি মোড়ানো দ্বারা এটি করতে সক্ষম হবেন ; আপনি যদি এটি করতে যাচ্ছেন তবে আপনি সম্ভবত আপনার কী আইডি ~/.gitconfigবা প্রকল্প-নির্দিষ্ট .git/configফাইলটিতে সেটআপ করতে চান । এই প্রক্রিয়া সম্পর্কে আরও তথ্য গিট সম্প্রদায়ের বইয়ে দেখা যায় । স্বাক্ষর ট্যাগগুলি আপনার করা প্রতিটি প্রতিশ্রুতিতে স্বাক্ষর করার চেয়ে অসীম কার্যকর।


74
"প্রতিটি প্রতিশ্রুতিতে স্বাক্ষর করা সম্পূর্ণ বোকামি।" -> যখন কোনও "ইঁদুর" বিকাশকারী যখন নকল লেখক এবং প্রতিশ্রুতিবদ্ধ ব্যক্তির সাথে কমিটস ঠেকানো পছন্দ করে তখন কমিটগুলি সুরক্ষিত করার সর্বোত্তম উপায় কী? সার্ভারে কিছু হুক যাদু না থাকলে git blameতিনি যাকে চান নির্দেশ দিতে পারেন ।
vi।

11
0. একটি নিবন্ধ > "কিভাবে জানাতে আমি দাবী করে যে -, 1." তাদের সব সাইন ইন করতে যথেষ্ট " এই সত্যিই আমার । পরিবর্তন (কিন্তু আগের কোনো এবং আরও করে সম্পর্কে নিশ্চিত) আমি কোনো স্বাক্ষর লাগাতে চান আমার কমিট কমিটস সম্পর্কে কিছু না বলেই আমি কেন্দ্রীয় সার্ভার / যা-ই হোক না কেন টানলাম 2.. অবিশ্বস্ত পরিবেশে এখনও কে দোষী তা খুঁজে পাওয়ার জন্য একটি নির্ভরযোগ্য সরঞ্জাম থাকা উচিত the সার্ভারটি যদি পরীক্ষা করে যে সমস্ত প্রতিশ্রুতিবদ্ধ প্রতিজ্ঞার ইমেলের কীতে স্বাক্ষরিত হয়েছে, এটি হ'ল কমিটিকে জাল করা শক্ত (যদি আপনি নিজের কম্পিউটারটি ভালভাবে সুরক্ষিত করেন)
vi।

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

22
আমার মনে হচ্ছে লিনাস একরকম পয়েন্ট মিস করছে missing মনে হয় স্বাক্ষরিত কমিটের ক্ষেত্রে সেই থ্রেডের তুলনায় এটির তুলনায় সম্পূর্ণ আলাদা ব্যবহারের মামলা রয়েছে। (পুরো প্রকল্পের অখণ্ডতা যাচাই করা, একটি একক প্রতিশ্রুতি
রচয়িতা যাচাইকরণ

9
-1 "হ্যাঁ, তবে এটি করবেন না" এর জন্য। উত্তরটি কেবল "হ্যাঁ" এর সমতল হওয়া উচিত। চুক্তিতে স্বাক্ষর করা লেখককে প্রমাণ করে, এমন কিছু যা অন্যথায় প্রতিশ্রুতিবদ্ধতায় মিথ্যা বলা যেতে পারে।
উর্দা

6

গিট সংস্করণ ২.০ পূর্ববর্তী সময়ে অটো স্বাক্ষরকরণের কাজটি করতে, আপনাকে কমিটের জন্য গিট ওরফে যুক্ত করতে হবে।

# git config --global alias.commit commit -S
[alias]
    commit = commit -S

0

আপনাকে পরিষ্কার করতে হবে যে আপনি যদি কোনও প্রতিশ্রুতি বা ট্যাগ সাইন করেন তবে এর অর্থ এই নয় যে আপনি পুরো ইতিহাসটি অনুমোদন করেছেন। কমিটের ক্ষেত্রে আপনি কেবলমাত্র হাতের পরিবর্তনে স্বাক্ষর করুন এবং ট্যাগের ক্ষেত্রে, ভাল .. আপনার এটির অর্থ কী তা বোঝাতে হবে। আপনি সম্ভবত এমন একটি পরিবর্তন এঁকেছেন যা দাবি করে যে এটি আপনার কাছ থেকে এসেছে তবে তা ছিল না (কারণ অন্য কেউ এটিকে আপনার রিমোটে ঠেলে দিয়েছে)। বা এটি আপনি পরিবর্তন করতে চান না এমন একটি পরিবর্তন যা আপনি ট্যাগটিতে সাইন ইন করেছেন।

সাধারণ ওএসএস প্রকল্পগুলিতে এটি কম সাধারণ হতে পারে তবে এমন একটি উদ্যোগের দৃশ্যে যেখানে আপনি কেবল এখনই কোডটি স্পর্শ করেন এবং আপনি পুরো ইতিহাসটি পড়েন না এটি হয়ত নজরে পড়ে।

কমেন্টস সাইন ইন করা একটি সমস্যা হয় যদি তারা অন্য বাবা-মাকে পুনঃনির্বাচিত বা চেরি-বাছাই করে। তবে এটি যদি ভাল হয় যে কোনও পরিবর্তিত প্রতিশ্রুতি "মূল" প্রতিশ্রুতিতে নির্দেশ করতে পারে যা আসলে যাচাই করে।


3
মুক্তি দেওয়া মিথ্যা বলার মতো। এটি খুব অল্প পরিমাণে ব্যবহার করা উচিত। অন্যটি বিষয় হ'ল একটি স্বাক্ষরের সাথে প্রতিশ্রুতিবদ্ধ করা কোডটি "সাইন অফ" কোড, তাই দ্বিগুণ নিশ্চিত হয়ে নিন যে এটি ক) সিওয়াইএবিরোধী নয় এবং খ) প্রচেষ্টা নষ্ট না করা।

11
@ ব্যারি “রিবেসিং মিথ্যা বলার মতো। এটি অতিমাত্রায় ব্যবহার করা উচিত ”- এটি ঠিক সত্য নয়। রিবেস-ভিত্তিক কর্মপ্রবাহগুলি মার্জ-ভিত্তিক ওয়ার্কফ্লো হিসাবে ঠিক বৈধ। অপ্রয়োজনীয়ভাবে ব্যবহার করা যায় না এমনভাবে মুক্তি দেওয়া খুব শক্তিশালী।
লুকাস জুহরিচ

1
এটি একচেটিয়াভাবে গিটহাবের সাথে ব্যবহার করার সময় এটি কোনও সমস্যা নয়, গিটহাব এটি সমর্থন করে না বলে মার্জ কমিটগুলি আপনার দ্বারা স্বাক্ষরিত হবে না। এই পরিবেশে প্রতিটি (একীভূত না হওয়া) প্রতিশ্রুতিতে স্বাক্ষর করার সুবিধাটি হ'ল এটি কী খুব স্পষ্ট করে তোলে যখন কোনও জিআরজি কী দিয়ে স্বাক্ষরিত হবে না বলে যখন কোনও দুর্বৃত্ত অঙ্গীকার একটি PR এর মাধ্যমে যুক্ত করা হয়েছিল।
অরণান কুডবার্ড-বেল

3
"আপনি যদি কোনও প্রতিশ্রুতি বা ট্যাগতে স্বাক্ষর করেন তবে এটি বিপজ্জনক (উভয়ই পুরো ইতিহাসকে স্বাক্ষর করবে) যে আপনি এমন কোনও পরিবর্তন এনেছেন যা দাবি করেছেন এটি আপনার পক্ষ থেকে" যদি আপনি কেবল একটি চুক্তিতে স্বাক্ষর করেন তবে আমি এটিকে কোনও হিসাবে ব্যাখ্যা করি না যদি আপনার কাছ থেকে প্রত্যেকটি কমিটের কাছে পৌঁছানোর অনুমোদন। আপনি অগত্যা বলছেন না যে পূর্ববর্তী পরিবর্তনগুলি আপনার দ্বারা বৈধ বা সমর্থনযোগ্য, কেবলমাত্র আপনি এই পরিবর্তনগুলির ভিত্তিতে একটি প্রতিশ্রুতি তৈরি করেছিলেন। (যদিও কোনও ট্যাগ সহ, আপনি সম্মত হন যে আপনি ট্যাগটির মাধ্যমে সমস্ত
প্রকারের

1
@ অরণান কুডবার্ড-বেল ঠিক যেমন একটি আপডেট হিসাবে আপনি commit.gpgsign
জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.