
पारदर्शी PGP-एन्क्रिप्टेड push/pull संचालन के लिए Git रिमोट हेल्पर, जो local, rsync, SFTP, और git बैकएंड का समर्थन करता है, कॉन्फ़िगरेबल प्रतिभागी कुंजियों के साथ।
:मैनुअल अनुभाग: 1
git-remote-gcrypt एक git रिमोट हेल्पर है जो GnuPG से एन्क्रिप्टेड रिपॉजिटरी से push और pull करने के लिए एक कस्टम फॉर्मेट का उपयोग करता है। यह रिमोट हेल्पर gcrypt:: उपसर्ग वाले URI को संभालता है।
समर्थित बैकएंड local, rsync:// और sftp:// हैं, जहाँ रिपॉजिटरी को फ़ाइलों के एक सेट के रूप में संग्रहीत किया जाता है, या इसके बजाय कोई भी <giturl> जहाँ gcrypt उसी प्रतिनिधित्व को एक git रिपॉजिटरी में संग्रहीत करेगा, जो मनमाने git परिवहन पर ब्रिज होता है। यदि आप उनमें से किसी एक का उपयोग कर सकते हैं तो local या rsync:// को प्राथमिकता दें; चर्चा के लिए नीचे "प्रदर्शन" देखें।
एक प्रयोगात्मक rclone:// बैकएंड भी है जो केवल प्रारंभिक उपयोगकर्ताओं के लिए है (आपको चेतावनी दी गई है)।
लक्ष्य विशिष्ट अविश्वसनीय फ़ाइल होस्ट या सेवाओं का उपयोग करके गोपनीय, प्रमाणित git भंडारण और सहयोग प्रदान करना है।
स्थापना ............
install.sh स्क्रिप्ट चलाएँत्वरित आरंभ ..........
push करके एक एन्क्रिप्टेड रिमोट बनाएँ::
git remote add cryptremote gcrypt::rsync://example.com/repo
git push cryptremote master
> gcrypt: Setting up new repository
> gcrypt: Remote ID is :id:7VigUnLVYVtZx8oir34R
> [ more lines .. ]
> To gcrypt::[...]
> * [new branch] master -> master
निम्नलिखित git-config(1) चर समर्थित हैं:
remote.<name>.gcrypt-participants
..
gcrypt.participants
GPG कुंजी पहचानकर्ताओं की स्पेस-सेपरेटेड सूची। रिमोट इन प्रतिभागियों के लिए एन्क्रिप्ट किया जाता है और केवल इन्हीं से हस्ताक्षर स्वीकार किए जाते हैं।
gpg -k आपके ज्ञात सभी सार्वजनिक कुंजियों को सूचीबद्ध करता है।
यदि यह विकल्प सेट नहीं है, तो हम आपकी डिफ़ॉल्ट कुंजी में एन्क्रिप्ट करते हैं और किसी भी मान्य हस्ताक्षर को स्वीकार करते हैं। इस व्यवहार को प्रतिभागियों को ``simple`` पर सेट करके स्पष्ट रूप से अनुरोध किया जा सकता है।
रिमोट पर ``gcrypt-participants`` सेटिंग रिपॉजिटरी चर ``gcrypt.participants`` पर पूर्वता लेती है।
remote.<name>.gcrypt-publish-participants
..
gcrypt.publish-participants
डिफ़ॉल्ट रूप से, प्रतिभागियों के gpg कुंजी आईडी को gpg -R का उपयोग करके एन्क्रिप्ट करके अस्पष्ट किया जाता है। इस विकल्प को true पर सेट करने से वह सुरक्षा उपाय अक्षम हो जाता है।
``gpg -R`` का उपयोग करने में समस्या यह है कि डिक्रिप्ट करने के लिए, gpg प्रत्येक उपलब्ध गुप्त कुंजी को तब तक आज़माता है जब तक कि उसे उपयोग योग्य कुंजी न मिल जाए।
इसके परिणामस्वरूप अनावश्यक पासफ़्रेज़ संकेत हो सकते हैं।
gcrypt.gpg-args
इस सेटिंग की सामग्री को gpg को तर्क के रूप में पारित किया जाता है।
जैसे --use-agent।
remote.<name>.gcrypt-signingkey
..
user.signingkey
(बाद वाला नियमित git कॉन्फ़िगरेशन से) हस्ताक्षर करने के लिए उपयोग की जाने वाली कुंजी।
यदि आपकी डिफ़ॉल्ट हस्ताक्षर कुंजी प्रतिभागी सूची का हिस्सा नहीं है, तो आपको user.signingkey सेट करना चाहिए। आप विभिन्न रिमोट पर विभिन्न कुंजियों का उपयोग करके हस्ताक्षर करने के लिए प्रति-रिमोट संस्करण का उपयोग कर सकते हैं।
remote.<name>.gcrypt-rsync-put-flags
..
gcrypt.rsync-put-flags
जब rsync:// बैकएंड का उपयोग करके रिमोट पर अपलोड किया जाता है तो rsync को पारित किए जाने वाले फ़्लैग। यदि फ़्लैग किसी विशिष्ट रिमोट पर सेट किए गए हैं, तो वैश्विक फ़्लैग, यदि सेट भी हैं, तो उस रिमोट के लिए लागू नहीं होंगे।
remote.<name>.gcrypt-require-explicit-force-push
..
gcrypt.require-explicit-force-push
एक लंबे समय से चला आ रहा बग यह है कि प्रत्येक git push में प्रभावी रूप से --force होता है।
यदि यह फ़्लैग ``true`` पर सेट है, तो git-remote-gcrypt push करने से इंकार कर देगा, जब तक कि ``--force`` पारित न किया जाए, या refspecs को ``+`` से उपसर्गित न किया जाए।
यहाँ एक संभावित समाधान है: https://bugs.debian.org/877464#32
GCRYPT_FULL_REPACK जब सेट किया जाता है (खाली स्ट्रिंग के अलावा कुछ भी), यह पर्यावरण चर push करते समय पूर्ण रीपैक को बाध्य करता है।
दो प्रतिभागियों के लिए रिमोट कैसे सेट करें::
git remote add cryptremote gcrypt::rsync://example.com/repo
git config remote.cryptremote.gcrypt-participants "KEY1 KEY2"
git push cryptremote master
git बैकएंड का उपयोग कैसे करें::
# ध्यान दें कि लक्ष्य git रिपॉजिटरी पहले से मौजूद होनी चाहिए और
# इसकी `next` शाखा को अधिलेखित कर दिया जाएगा!
git remote add gitcrypt gcrypt::[email protected]:repo#next
git push gitcrypt master
URL खंड (यहाँ #next) इंगित करता है कि किस बैकएंड शाखा का उपयोग किया गया है।
सहयोग प्रतिभागी कॉन्फ़िगरेशन से मेल खाने के लिए प्रत्येक push पर मैनिफ़ेस्ट के एन्क्रिप्शन को अपडेट किया जाता है। प्रत्येक push करने वाले उपयोगकर्ता के पास सभी सहयोगियों की सार्वजनिक कुंजियाँ और सही प्रतिभागी कॉन्फ़िगरेशन होना चाहिए।
निर्भरताएँ
क्रमशः rsync://, sftp:// और rclone:// रिमोट के लिए rsync, curl और rclone। मुख्य निष्पादन योग्य को एक POSIX-अनुपालन शेल की आवश्यकता है जो local का समर्थन करता हो।
GNU Privacy Guard
GPG 1.4 और 2 दोनों समर्थित हैं। आपको एक व्यक्तिगत GPG कुंजी की आवश्यकता है। GPG कॉन्फ़िगरेशन सार्वजनिक-कुंजी एन्क्रिप्शन, सममित एन्क्रिप्शन और हस्ताक्षर के लिए एल्गोरिदम विकल्पों पर लागू होता है। अधिक जानकारी के लिए man gpg देखें।
रिमोट आईडी रिमोट आईडी गुप्त नहीं है; यह केवल यह सुनिश्चित करता है कि एक ही उपयोगकर्ता द्वारा हस्ताक्षरित दो रिपॉजिटरी को प्रतिष्ठित किया जा सके। यदि रिमोट आईडी बदलती है, तो आपको एक चेतावनी दिखाई देगी, जो केवल तभी होनी चाहिए जब रिमोट को पुनः बनाया गया हो।
प्रदर्शन
किसी भी <giturl> या sftp:// URI का उपयोग करने के लिए प्रत्येक push के साथ पूरे रिपॉजिटरी इतिहास को अपलोड करने की आवश्यकता होती है। इसका मतलब है कि आपकी रिपॉजिटरी का push समय के साथ धीमा होता जाता है, जैसे-जैसे आपका git इतिहास लंबा होता है, और यह आसानी से उस बिंदु तक पहुँच सकता है जहाँ git-remote-gcrypt का निरंतर उपयोग अव्यावहारिक हो जाता है।
इस प्रकार, आपको इन बैकएंड का उपयोग केवल तभी करना चाहिए जब आप जानते हैं कि आपकी रिपॉजिटरी कभी भी बहुत बड़ी नहीं होगी, न कि केवल यह कि अभी बड़ी नहीं है। इसका मतलब है कि ये बैकएंड अधिकांश रिपॉजिटरी के लिए अनुपयुक्त हैं, और केवल असामान्य मामलों के लिए उपयुक्त होने की संभावना है, जैसे कि छोटे क्रेडेंशियल स्टोर। तब भी, यदि संभव हो तो `rsync://` का उपयोग करें। हालाँकि, ध्यान दें कि `rsync://` Gitolite, GitHub या GitLab जैसी रिपॉजिटरी होस्टिंग सेवा के साथ काम नहीं करेगा।
rsync URI
rsync बैकएंड के लिए URI फॉर्मेट rsync://user@host/path है, जो rsync स्थान user@host:/path में अनुवादित होता है, ssh के माध्यम से एक्सेस किया जाता है। ध्यान दें कि पथ निरपेक्ष है, होम निर्देशिका के सापेक्ष नहीं। एक पहले का गैर-मानक URI फॉर्मेट भी समर्थित है: rsync://user@host:path, जो rsync स्थान user@host:path में अनुवादित होता है।
rclone बैकएंड
rclone बैकएंड को gcrypt::rclone://remote:subdir जैसे URI वाले रिमोट के रूप में जोड़ने के अलावा, आपको rclone कॉन्फ़िगरेशन में भी रिमोट जोड़ना होगा। यह आमतौर पर rclone config निष्पादित करके किया जाता है। rclone(1) देखें।
rclone बैकएंड को प्रयोगात्मक माना जाता है और यह केवल प्रारंभिक उपयोगकर्ताओं के लिए है। आपको चेतावनी दी गई है।
रिपॉजिटरी फॉर्मेट .................