
आपको गुप्त जानकारी और क्रेडेंशियल्स को git रिपॉजिटरी में कमिट करने से रोकता है
.. contents:: :depth: 2
::
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
git secrets --scan-history
git secrets --install [-f|--force] [<target-directory>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <pattern>
git secrets --add-provider [--global] <command> [arguments...]
git secrets --register-aws [--global]
git secrets --aws-provider [<credentials-file>]
git-secrets कमिट, कमिट संदेश और --no-ff मर्ज को स्कैन करता है ताकि आपके git रिपॉजिटरी में गुप्त जानकारी जुड़ने से रोका जा सके। यदि कोई कमिट, कमिट संदेश, या --no-ff मर्ज हिस्ट्री में कोई कमिट आपके कॉन्फ़िगर किए गए निषिद्ध रेगुलर एक्सप्रेशन पैटर्न से मेल खाता है, तो कमिट अस्वीकार कर दिया जाता है।
git-secrets को आपके PATH में कहीं रखा जाना चाहिए ताकि git secrets चलाने पर git द्वारा इसे पहचाना जा सके।
*nix (Linux/macOS)
आप दिए गए Makefile के ``install`` लक्ष्य का उपयोग करके ``git secrets`` और मैन पेज को स्थापित कर सकते हैं।
आप PREFIX और MANPREFIX वेरिएबल का उपयोग करके स्थापना पथ को अनुकूलित कर सकते हैं।
::
make install
Windows
~~~~~~~
दिए गए ``install.ps1`` पॉवरशेल स्क्रिप्ट को चलाएँ। यह आवश्यक फ़ाइलों को एक स्थापना निर्देशिका (डिफ़ॉल्ट रूप से ``%USERPROFILE%/.git-secrets``) में कॉपी करेगा और वर्तमान उपयोगकर्ता ``PATH`` में निर्देशिका जोड़ेगा।
::
PS > ./install.ps1
Homebrew (macOS उपयोगकर्ताओं के लिए)
::
brew install git-secrets
.. warning::
**आपने अभी तक काम पूरा नहीं किया है! आपको प्रत्येक रिपॉजिटरी के लिए git हुक स्थापित करने होंगे जिसके लिए आप** ``git secrets --install`` **का उपयोग करना चाहते हैं।**
यहाँ एक त्वरित उदाहरण दिया गया है कि कैसे सुनिश्चित करें कि प्रत्येक कमिट पर एक git रिपॉजिटरी को गुप्त जानकारी के लिए स्कैन किया जाए::
cd /path/to/my/repo
git secrets --install
git secrets --register-aws
यदि आप भविष्य में आरंभ या क्लोन किए जाने वाले सभी रिपॉजिटरी में हुक जोड़ना चाहते हैं तो एक कॉन्फ़िगरेशन टेम्पलेट जोड़ें।
::
git secrets --register-aws --global
अपने सभी स्थानीय रिपॉजिटरी में हुक जोड़ें।
::
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets
सुरक्षा क्रेडेंशियल्स को स्कैन करने के लिए कस्टम प्रदाता जोड़ें।
::
git secrets --add-provider -- cat /path/to/secret/file/patterns
git-secrets के साथ सभी संशोधनों सहित किसी रिपॉजिटरी को स्कैन करना भी संभव है:
::
git secrets --scan-history
संचालन मोड
इनमें से प्रत्येक विकल्प कमांड लाइन पर सबसे पहले आना चाहिए।
``--install``
किसी रिपॉजिटरी के लिए git हुक स्थापित करता है। एक git रिपॉजिटरी के लिए हुक स्थापित होने के बाद, उस रिपॉजिटरी के लिए कमिट और नॉन-फास्ट-फॉरवर्ड मर्ज को गुप्त जानकारी कमिट करने से रोका जाएगा।
``--scan``
एक या अधिक फ़ाइलों को गुप्त जानकारी के लिए स्कैन करता है। जब किसी फ़ाइल में कोई गुप्त जानकारी होती है, तो स्कैन की जा रही फ़ाइल से मेल खाने वाला टेक्स्ट stdout पर लिखा जाएगा और स्क्रिप्ट गैर-शून्य स्थिति के साथ बाहर निकलेगी। प्रत्येक मेल खाने वाली पंक्ति को मेल खाने वाली फ़ाइल के नाम, एक कोलन, मेल खाने वाली पंक्ति संख्या, एक कोलन, और फिर मेल खाने वाली टेक्स्ट की पंक्ति के साथ लिखा जाएगा। यदि कोई फ़ाइल प्रदान नहीं की गई है, तो ``git ls-files`` द्वारा लौटाई गई सभी फ़ाइलों को स्कैन किया जाता है।
``--scan-history``
सभी संशोधनों सहित रिपॉजिटरी को स्कैन करता है। जब किसी फ़ाइल में कोई गुप्त जानकारी होती है, तो स्कैन की जा रही फ़ाइल से मेल खाने वाला टेक्स्ट stdout पर लिखा जाएगा और स्क्रिप्ट गैर-शून्य स्थिति के साथ बाहर निकलेगी। प्रत्येक मेल खाने वाली पंक्ति को मेल खाने वाली फ़ाइल के नाम, एक कोलन, मेल खाने वाली पंक्ति संख्या, एक कोलन, और फिर मेल खाने वाली टेक्स्ट की पंक्ति के साथ लिखा जाएगा।
``--list``
वर्तमान रिपॉजिटरी या वैश्विक git कॉन्फ़िगरेशन के लिए ``git-secrets`` कॉन्फ़िगरेशन को सूचीबद्ध करता है।
``--add``
एक निषिद्ध या अनुमत पैटर्न जोड़ता है।
``--add-provider``
एक गुप्त प्रदाता पंजीकृत करता है। गुप्त प्रदाता ऐसे निष्पादन योग्य होते हैं जो चलाए जाने पर निषिद्ध पैटर्न आउटपुट करते हैं जिन्हें ``git-secrets`` को निषिद्ध मानना चाहिए।
``--register-aws``
git कॉन्फ़िगरेशन में सामान्य AWS पैटर्न जोड़ता है और सुनिश्चित करता है कि ``~/.aws/credentials`` में मौजूद कुंजियाँ किसी भी कमिट में न मिलें। निम्नलिखित जाँचें जोड़ी गई हैं:
- ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}`` के माध्यम से AWS एक्सेस कुंजी आईडी
- Amazon Bedrock API कुंजियाँ। लंबी अवधि वाली ``ABSK[A-Za-z0-9+/]{109,}=*`` और अल्पकालिक ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
- वैकल्पिक उद्धरणों से घिरे ":" या "=" के माध्यम से AWS गुप्त एक्सेस कुंजी असाइनमेंट
- वैकल्पिक उद्धरणों से घिरे ":" या "=" के माध्यम से AWS खाता आईडी असाइनमेंट
- उदाहरण AWS कुंजियों के लिए अनुमत पैटर्न (``AKIAIOSFODNN7EXAMPLE`` और ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)
- ``~/.aws/credentials`` से ज्ञात क्रेडेंशियल्स
.. note::
जबकि इस कमांड द्वारा पंजीकृत पैटर्न को अधिकांश AWS क्रेडेंशियल उदाहरणों को पकड़ना चाहिए, ये पैटर्न **सभी** को पकड़ने की **गारंटी** नहीं हैं। ``git-secrets`` का उपयोग बीमा के अतिरिक्त साधन के रूप में किया जाना चाहिए - आपको अभी भी यह सुनिश्चित करने के लिए अपना उचित परिश्रम करना होगा कि आप किसी रिपॉजिटरी में क्रेडेंशियल्स कमिट न करें।
``--aws-provider``
गुप्त प्रदाता जो एक INI फ़ाइल में पाए गए क्रेडेंशियल्स को आउटपुट करता है। आप वैकल्पिक रूप से एक INI फ़ाइल का पथ प्रदान कर सकते हैं।
``--install`` के लिए विकल्प
-f, --force
यदि मौजूद हैं तो मौजूदा हुक को अधिलेखित करता है।
<target-directory>
जब प्रदान किया जाता है, तो दी गई निर्देशिका में git हुक स्थापित करता है। यदि <target-directory> प्रदान नहीं किया गया है तो वर्तमान निर्देशिका मान ली जाती है।
यदि प्रदान की गई ``<target-directory>`` किसी git रिपॉजिटरी में नहीं है, तो निर्देशिका बनाई जाएगी और हुक ``<target-directory>/hooks`` में रखे जाएंगे। यह ``git init --template <target-directory>`` के साथ उपयोग करने के लिए git टेम्पलेट निर्देशिका बनाने में उपयोगी हो सकता है।
आप पहले से आरंभित रिपॉजिटरी पर ``git init`` चला सकते हैं। `git init दस्तावेज़ <https://git-scm.com/docs/git-init>`_ से:
git दस्तावेज़ से: मौजूदा रिपॉजिटरी में ``git init`` चलाना सुरक्षित है। यह पहले से मौजूद चीजों को अधिलेखित नहीं करेगा। ``git init`` को पुनः चलाने का प्राथमिक कारण नव जोड़े गए टेम्पलेट को प्राप्त करना है (या यदि ``--separate-git-dir`` दिया गया है तो रिपॉजिटरी को किसी अन्य स्थान पर ले जाना)।
निम्नलिखित git हुक स्थापित किए गए हैं:
1. ``pre-commit``: यह जाँचने के लिए उपयोग किया जाता है कि कमिट में बदली गई कोई भी फ़ाइल निषिद्ध पैटर्न का उपयोग करती है या नहीं।
2. ``commit-msg``: यह निर्धारित करने के लिए उपयोग किया जाता है कि क्या कमिट संदेश में कोई निषिद्ध पैटर्न है।
3. ``prepare-commit-msg``: यह निर्धारित करने के लिए उपयोग किया जाता है कि क्या मर्ज कमिट किसी भी बिंदु पर एक निषिद्ध पैटर्न वाला इतिहास पेश करेगा। कृपया ध्यान दें कि यह हुक केवल गैर-फास्ट-फॉरवर्ड मर्ज के लिए लागू किया जाता है।
.. note::
Git प्रति हुक केवल एक स्क्रिप्ट निष्पादित करने की अनुमति देता है। यदि रिपॉजिटरी में Debian-शैली की उपनिर्देशिकाएँ जैसे ``pre-commit.d`` और ``commit-msg.d`` हैं, तो git हुक इन निर्देशिकाओं में स्थापित किए जाएंगे, यह मानते हुए कि आपने संबंधित हुक को इन निर्देशिकाओं में पाई जाने वाली सभी स्क्रिप्ट को निष्पादित करने के लिए कॉन्फ़िगर किया है। यदि ये git उपनिर्देशिकाएँ मौजूद नहीं हैं, तो git हुक git रिपॉजिटरी की ``.git/hooks`` निर्देशिका में स्थापित किए जाएंगे।
उदाहरण ^^^^^^^^
वर्तमान निर्देशिका में git हुक स्थापित करें::
cd /path/to/my/repository
git secrets --install
वर्तमान निर्देशिका के अलावा किसी अन्य रिपॉजिटरी में git हुक स्थापित करें::
git secrets --install /path/to/my/repository
एक git टेम्पलेट बनाएँ जिसमें git-secrets स्थापित हो, और फिर उस टेम्पलेट को git रिपॉजिटरी में कॉपी करें::
git secrets --install ~/.git-templates/git-secrets
git init --template ~/.git-templates/git-secrets
यदि मौजूद हैं तो मौजूदा हुक को अधिलेखित करें::
git secrets --install -f
--scan के लिए विकल्प
``-r, --recursive``
दी गई फ़ाइलों को पुनरावर्ती रूप से स्कैन करता है। यदि कोई निर्देशिका सामने आती है, तो निर्देशिका स्कैन की जाएगी। यदि ``-r`` प्रदान नहीं किया गया है, तो निर्देशिकाओं को अनदेखा कर दिया जाएगा।
``-r`` का उपयोग ``--cached``, ``--no-index``, या ``--untracked`` के साथ नहीं किया जा सकता।
``--cached``
इंडेक्स फ़ाइल में पंजीकृत ब्लॉब खोजता है।
``--no-index``
वर्तमान निर्देशिका में उन फ़ाइलों को खोजता है जो git द्वारा प्रबंधित नहीं हैं।
``--untracked``
कार्यशील ट्री में ट्रैक की गई फ़ाइलों के अलावा, ``--scan`` अनट्रैक की गई फ़ाइलों में भी खोज करता है।
``<files>...``
गुप्त जानकारी के लिए डिस्क पर एक या अधिक फ़ाइलों का पथ स्कैन करना है।
यदि कोई फ़ाइल प्रदान नहीं की गई है, तो ``git ls-files`` द्वारा लौटाई गई सभी फ़ाइलों को स्कैन किया जाता है।
उदाहरण
^^^^^^^^
रिपॉजिटरी की सभी फ़ाइलों को स्कैन करें::
git secrets --scan
गुप्त जानकारी के लिए एक फ़ाइल स्कैन करें::
git secrets --scan /path/to/file
गुप्त जानकारी के लिए एक निर्देशिका को पुनरावर्ती रूप से स्कैन करें::
git secrets --scan -r /path/to/directory
गुप्त जानकारी के लिए कई फ़ाइलों को स्कैन करें::
git secrets --scan /path/to/file /path/to/other/file
आप ग्लोबिंग द्वारा स्कैन कर सकते हैं::
git secrets --scan /path/to/directory/*
stdin से स्कैन करें::
echo 'hello!' | git secrets --scan -
``--list`` के लिए विकल्प
--global
वैश्विक git कॉन्फ़िगरेशन में केवल git-secrets कॉन्फ़िगरेशन को सूचीबद्ध करता है।
--add के लिए विकल्प
``--global``
वैश्विक git कॉन्फ़िगरेशन में पैटर्न जोड़ता है
``-l, --literal``
प्रदान किए गए पैटर्न में विशेष रेगुलर एक्सप्रेशन वर्णों को एस्केप करता है ताकि पैटर्न शाब्दिक रूप से खोजा जा सके।
``-a, --allowed``
पैटर्न को निषिद्ध के बजाय अनुमत के रूप में चिह्नित करें। अनुमत पैटर्न का उपयोग झूठी सकारात्मकता को फ़िल्टर करने के लिए किया जाता है।
``<pattern>``
खोजने के लिए regex पैटर्न।
उदाहरण
^^^^^^^^
वर्तमान रिपॉजिटरी में एक निषिद्ध पैटर्न जोड़ता है::
git secrets --add '[A-Z0-9]{20}'
वैश्विक git कॉन्फ़िगरेशन में एक निषिद्ध पैटर्न जोड़ता है::
git secrets --add --global '[A-Z0-9]{20}'
एक स्ट्रिंग जोड़ता है जिसे शाब्दिक रूप से स्कैन किया जाता है (``+`` को एस्केप किया गया है)::
git secrets --add --literal 'foo+bar'
एक अनुमत पैटर्न जोड़ें::
git secrets --add -a 'allowed pattern'
``--register-aws`` के लिए विकल्प
--global
वैश्विक git कॉन्फ़िगरेशन में AWS-विशिष्ट कॉन्फ़िगरेशन वेरिएबल जोड़ता है।
--aws-provider के लिए विकल्प
``[<credentials-file>]``
यदि प्रदान किया जाता है, तो स्कैन करने के लिए INI फ़ाइल का कस्टम पथ निर्दिष्ट करता है। यदि प्रदान नहीं किया गया है, तो ``~/.aws/credentials`` मान लिया जाता है।
``--add-provider`` के लिए विकल्प
--global
प्रदाता को वैश्विक git कॉन्फ़िगरेशन में जोड़ता है।
<command>
लागू करने के लिए प्रदाता कमांड। लागू करने पर कमांड से नई पंक्तियों द्वारा अलग किए गए निषिद्ध पैटर्न को stdout पर लिखने की अपेक्षा की जाती है। प्रदान किए गए कोई भी अतिरिक्त तर्क कमांड पर पारित कर दिए जाते हैं।
उदाहरण ^^^^^^^^
तर्कों के साथ एक गुप्त प्रदाता पंजीकृत करता है::
git secrets --add-provider -- git secrets --aws-provider
एक फ़ाइल से गुप्त जानकारी प्राप्त करता है::
git secrets --add-provider -- cat /path/to/secret/file/patterns
यह निर्धारित करने के लिए egrep-संगत रेगुलर एक्सप्रेशन का उपयोग किया जाता है कि क्या कोई कमिट या कमिट संदेश में कोई निषिद्ध पैटर्न है। ये रेगुलर एक्सप्रेशन git config कमांड का उपयोग करके परिभाषित किए गए हैं। यह ध्यान रखना महत्वपूर्ण है कि विभिन्न सिस्टम egrep के विभिन्न संस्करणों का उपयोग करते हैं। उदाहरण के लिए, macOS पर चलने पर, आप Ubuntu जैसी चीज़ पर चलने की तुलना में egrep के एक अलग संस्करण का उपयोग करेंगे (BSD बनाम GNU)।
आप git secrets --add <pattern> का उपयोग करके अपने git कॉन्फ़िगरेशन में निषिद्ध रेगुलर एक्सप्रेशन पैटर्न जोड़ सकते हैं।
कभी-कभी एक रेगुलर एक्सप्रेशन झूठी सकारात्मकता से मेल खा सकता है। उदाहरण के लिए, git कमिट SHA AWS एक्सेस कुंजियों की तरह दिखते हैं। आप निम्न कमांड का उपयोग करके कई अलग-अलग रेगुलर एक्सप्रेशन पैटर्न को झूठी सकारात्मकता के रूप में निर्दिष्ट कर सकते हैं:
::
git secrets --add --allowed 'my regex pattern'
आप रिपॉजिटरी की रूट निर्देशिका में स्थित .gitallowed फ़ाइल में झूठी सकारात्मकता को फ़िल्टर करने के लिए रेगुलर एक्सप्रेशन पैटर्न भी जोड़ सकते हैं। # से शुरू होने वाली पंक्तियाँ छोड़ दी जाती हैं (टिप्पणी पंक्ति) और खाली पंक्तियाँ भी छोड़ दी जाती हैं।
पहले, git-secrets एक फ़ाइल से उन सभी पंक्तियों को निकालेगा जिनमें एक निषिद्ध मिलान होता है। मिलान किए गए परिणामों में मेल खाने वाली फ़ाइल का पूरा पथ, उसके बाद ':', उसके बाद मेल खाने वाली पंक्ति संख्या, उसके बाद फ़ाइल की पूरी पंक्ति शामिल होगी जो एक गुप्त पैटर्न से मेल खाती है। फिर, यदि आपने अनुमत रेगुलर एक्सप्रेशन परिभाषित किए हैं, तो git-secrets जाँच करेगा कि क्या सभी मेल खाने वाली पंक्तियाँ आपके पंजीकृत अनुमत रेगुलर एक्सप्रेशन में से कम से कम एक से मेल खाती हैं। यदि गुप्त के रूप में चिह्नित सभी पंक्तियाँ एक अनुमत मिलान द्वारा रद्द कर दी जाती हैं, तो विषय पाठ में कोई गुप्त जानकारी नहीं है। यदि मेल खाने वाली कोई भी पंक्ति किसी अनुमत रेगुलर एक्सप्रेशन से मेल नहीं खाती है, तो git-secrets कमिट/मर्ज/संदेश को विफल कर देगा।
.. important::
जिस तरह निषिद्ध पैटर्न जोड़ना जो बहुत अधिक लालची हैं, एक बुरी प्रथा है, उसी तरह अनुमत पैटर्न जोड़ना जो बहुत अधिक क्षमाशील हैं, भी एक बुरी प्रथा है। यह सुनिश्चित करने के लिए कि वे इच्छित रूप से काम कर रहे हैं, ``git secrets --scan $filename`` के लिए एड-हॉक कॉल का उपयोग करके अपने पैटर्न का परीक्षण करना सुनिश्चित करें।
कभी-कभी आप ज्ञात गुप्त जानकारी के एक सेट के विरुद्ध सटीक पैटर्न मिलान की जाँच करना चाहते हैं। उदाहरण के लिए, आप यह सुनिश्चित करना चाह सकते हैं कि ~/.aws/credentials में मौजूद कोई भी क्रेडेंशियल कभी भी कमिट में दिखाई न दे। ऐसे मामलों में, इन गुप्त जानकारी को एक स्थान पर छोड़ना बेहतर है, बजाय उन्हें git कॉन्फ़िगरेशन में git रिपॉजिटरी में फैलाने के। आप इन प्रकार के क्रेडेंशियल्स को प्राप्त करने के लिए "गुप्त प्रदाताओं" का उपयोग कर सकते हैं। एक गुप्त प्रदाता एक निष्पादन योग्य है जो लागू होने पर नई पंक्तियों द्वारा अलग किए गए निषिद्ध पैटर्न को आउटपुट करता है।
आप --add-provider कमांड का उपयोग करके गुप्त प्रदाता जोड़ सकते हैं::
git secrets --add-provider -- git secrets --aws-provider
-- के उपयोग पर ध्यान दें। यह सुनिश्चित करता है कि प्रदाता से जुड़े किसी भी तर्क को गुप्त जानकारी के लिए स्कैन करते समय हर बार लागू होने पर प्रदाता को पारित किया जाए।
आइए एक उदाहरण देखें। निम्नलिखित विषय पाठ (/tmp/example में संग्रहीत) दिया गया है::
This is a test!
password=ex@mplepassword
password=******
More test...
और निम्नलिखित पंजीकृत पैटर्न:
::
git secrets --add 'password\s*=\s*.+'
git secrets --add --allowed --literal 'ex@mplepassword'
git secrets --scan /tmp/example चलाने पर, परिणाम निम्न त्रुटि आउटपुट होगा::
/tmp/example:3:password=******
[ERROR] Matched prohibited pattern
Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- Use --no-verify if this is a one-time false positive
इसे समझते हुए, निषिद्ध पैटर्न मान password\s*=\s*.+ निम्नलिखित पंक्तियों से मेल खाएगा::
/tmp/example:2:password=ex@mplepassword
/tmp/example:3:password=******
...लेकिन पहला मिलान इस तथ्य के कारण फ़िल्टर कर दिया जाएगा कि यह अनुमत रेगुलर एक्सप्रेशन ex@mplepassword से मेल खाता है। क्योंकि अभी भी एक शेष पंक्ति है जो मेल नहीं खाती, इसे एक गुप्त जानकारी माना जाता है।
क्योंकि मेल खाने वाली पंक्तियाँ ऐसी पंक्तियों पर रखी जाती हैं जो फ़ाइल नाम और पंक्ति संख्या से शुरू होती हैं (उदाहरण के लिए, /tmp/example:3:...), आप अनुमत पैटर्न बना सकते हैं जो रेगुलर एक्सप्रेशन में फ़ाइल नाम और पंक्ति संख्याओं को ध्यान में रखते हैं। उदाहरण के लिए, आप कुछ इस तरह का उपयोग करके एक संपूर्ण फ़ाइल को श्वेतसूचीबद्ध कर सकते हैं::
git secrets --add --allowed '/tmp/example:.*'
git secrets --scan /tmp/example && echo $?
# Outputs: 0
वैकल्पिक रूप से, आप किसी फ़ाइल की किसी विशिष्ट पंक्ति संख्या की अनुमति दे सकते हैं यदि उस पंक्ति के बदलने की संभावना नहीं है, जैसे:
::
git secrets --add --allowed '/tmp/example:3:.*'
git secrets --scan /tmp/example && echo $?
# Outputs: 0
अनुमत पैटर्न बनाते समय इसे ध्यान में रखें ताकि यह सुनिश्चित हो सके कि आपके अनुमत पैटर्न गलती से मेल न खाएँ क्योंकि फ़ाइल नाम विषय पाठ में शामिल है जिसके विरुद्ध अनुमत पैटर्न मिलान किए जाते हैं।
कमिट, मर्ज या कमिट संदेश में गलत सकारात्मक मिलान की स्थिति में --no-verify विकल्प का उपयोग करें। यह git हुक के निष्पादन को छोड़ देगा और आपको कमिट या मर्ज करने की अनुमति देगा।
Michael Dowling <https://github.com/mtdowling>_https://github.com/awslabs/git-secrets <https://github.com/awslabs/git-secrets>_कॉपीराइट 2015 Amazon.com, Inc. या इसके सहयोगी। सर्वाधिकार सुरक्षित।