फ़ाइल को Git के साथ "असुविधाजनक" के रूप में चिह्नित करें


41

मैं अपने कुछ काम उन्हें अपने GitHub खाते में अपलोड करके दिखाना चाहता हूं। हालाँकि, कुछ फाइलें हैं जिनमें पासवर्ड शामिल हैं, जैसे डेटाबेस कनेक्शन।

क्या फ़ाइल को Git के साथ अक्षम करने के रूप में चिह्नित करने का कोई तरीका है ताकि वह GitHub पर प्रदर्शित न हो सके?


1
स्पर्शरेखा सुझाव: यह हर प्लेटफ़ॉर्म पर लागू नहीं हो सकता है, क्योंकि कुछ कॉन्फ़िगरेशन फ़ाइलों से बहुत शादीशुदा हैं, लेकिन आप इन मापदंडों को पर्यावरण में रखने के 12factor दृष्टिकोण का अनुसरण करने पर विचार कर सकते हैं: 12factor.net/config । यही है, एप्लिकेशन कोड को कॉन्फ़िगरेशन फ़ाइल की उपस्थिति कभी नहीं मानें। (जैसा कि एक निजी स्टार्टअप स्क्रिप्ट के विरोध में है, जो इसे सेट करता है, लेकिन कभी भी आपकी स्थानीय मशीन को नहीं छोड़ता है।)
मिलिमोज

1
यदि आप गलती से उन्हें प्रतिबद्ध करते हैं, तो सुनिश्चित करें कि आप उन्हें पूरी तरह से गिट इतिहास से हटा दें (अन्य प्रश्न बताएंगे कि कैसे) क्योंकि भले ही आप इसे हटा दें और इसे अनदेखा करें पुराने प्रतिबद्ध संस्करण इतिहास में बने रहेंगे और जीथब पर दिखाई देंगे।
जिज्ञासु

3
ध्यान दें कि सभी उत्तर वास्तव में आपके प्रश्न का उत्तर नहीं देते हैं। वे फ़ाइल को असुविधाजनक नहीं बनाते हैं, वे बस गिट को कॉन्फ़िगर करते हैं ताकि यह डिफ़ॉल्ट रूप से इसे अनदेखा कर दे। लेकिन अगर आप गलती से उस फ़ाइल नाम को एक git कमांड लाइन में सम्मिलित करते हैं, तो आप इसे एक पैटर्न में मेल खाते हुए भी इसे समाप्त कर सकते हैं.gitignore । AFAIK gitसभी मामलों में एक विशिष्ट फ़ाइल शुरू करने से बचने के लिए कहने का कोई 100% पूर्ण-प्रूफ तरीका नहीं है । यद्यपि इसे एक विशेषता के रूप में देखा जा सकता है ... सामान्य कमांड को ओवरराइड करने के लिए स्पष्ट आदेशों की अनुमति।
बकुरीउ

आप हार्डकोड किए गए पासवर्ड को हटा सकते हैं और सुरक्षित विकल्प पर स्विच कर सकते हैं। उसके बाद आप डेटाबेस पासवर्ड स्विच कर सकते हैं। पुराने पासवर्ड अभी भी कमिट के अंदर हैं, लेकिन वे पुराने हो चुके हैं जब आप उन्हें पढ़ने में सक्षम हो जाते हैं। मुझे पूरा यकीन है कि जब आप पहले से ही निर्माण कर लेते हैं, तो आप इसे कमिट नहीं बदल सकते।
ब्लूव्हील

3
@Curiousdannii ने जो कहा उसके अलावा, GitHub के पास एक संपूर्ण पृष्ठ है जिसमें चर्चा की गई है कि आपने गलती से किए गए संवेदनशील डेटा को कैसे हटाया जाए। अन्य बातों के अलावा, यह पृष्ठ आपके द्वारा गलती से प्रकाशित किसी भी पासवर्ड और कुंजियों को बदलने के लिए कहता है help.github.com/articles/remove-sensitive-data
केविन - मोनिका

जवाबों:


67

क्या फ़ाइल को Git के साथ अक्षम करने के रूप में चिह्नित करने का कोई तरीका है ताकि वह GitHub पर प्रदर्शित न हो सके?

सबसे पहले, आपके स्थानीय गिट रिपॉजिटरी में कुछ फाइलें और कमिट्स दिखाई देने का कोई तरीका नहीं है लेकिन किसी तरह से GitHub में देखने योग्य नहीं है; यदि आपके पास Git में कोई फ़ाइल है, तो वह GitHub में दिखाई देगा।

दूसरा, किसी व्यक्ति की फ़ाइल को कभी भी "अक्षम" होने के रूप में चिह्नित करने का कोई सरल और व्यावहारिक तरीका नहीं है, लेकिन निश्चित रूप से एक गिट रेपो में एक फ़ाइल को अनदेखा करने का एक तरीका है: फ़ाइल को जोड़कर - यदि उनके रिश्तेदार पथ को छोड़कर एक .gitignoreफ़ाइल के लिए आवश्यक :

एक .gitignoreफ़ाइल जानबूझकर अनट्रैक की गई फ़ाइलों को निर्दिष्ट करती है जिन्हें Git को अनदेखा करना चाहिए। Git द्वारा पहले से ट्रैक की गई फ़ाइलें प्रभावित नहीं होती हैं; विवरण के लिए नीचे के नोट देखें।

एक मूल बनाना .gitignoreकाफी आसान है क्योंकि यह सिर्फ एक सादा पाठ फ़ाइल है। इसलिए- उदाहरण के लिए- अगर config.phpआपकी रूट में कोई फाइल है तो आप ऐसा करेंगे; यह मानते हुए कि आप PHP का उपयोग कर रहे हैं, लेकिन अवधारणा किसी भी सेटअप के लिए लागू होती है। इसके अलावा, मैं इस उदाहरण में नैनो को अपने टेक्स्ट एडिटर के रूप में उपयोग कर रहा हूं, लेकिन इसके लिए आप जो भी टेक्स्ट एडिटर आमतौर पर उपयोग करते हैं, उसका उपयोग करने के लिए स्वतंत्र महसूस करें:

nano .gitignore

और उस फ़ाइल में केवल फ़ाइल नाम जोड़ें:

config.php

इसे सहेजें और अब Git बस उस फ़ाइल को अनदेखा करेगा।

उस ने कहा, मुझे इस तरह से सेटअप करने के लिए क्या करना है, रिपॉजिटरी में संवेदनशील बारीकियों का एक नमूना / उदाहरण कॉन्फिग न्यूट्रेड रखना है, इसलिए मेरे पास कुछ संदर्भ है जैसे कि कॉन्फिगर फाइल फॉर्मेट एक फाइल है जिसका नाम कुछ इस तरह है:

config.SAMPLE.php

इस तरह आप जानते हैं कि config.phpफ़ाइल को किस तरह से सेटअप किया जाना चाहिए config.SAMPLE.phpऔर आप यह सुनिश्चित कर सकते हैं कि वास्तविक config.phpको Git द्वारा कभी नहीं छुआ गया है।

इसके अलावा, यदि आप अपना कोड दिखाने की योजना बनाते हैं, तो आपको यह उम्मीद करने की आवश्यकता है कि कोई व्यक्ति उस कोड को लेने की कोशिश करेगा और इसे किसी तरह से अपने सिस्टम पर लागू करेगा। याद रखें, हम आप नहीं हैं और आपके रेपो में एक नमूना कॉन्फ़िगर फ़ाइल के बिना, लोग वास्तव में यह नहीं समझ पाएंगे कि कोड को अपने दम पर कैसे लागू किया जाए। हो सकता है कि वे यह भी सोचें कि आप सक्षम नहीं हैं क्योंकि आपने एक बुनियादी विन्यास उदाहरण प्रदान नहीं किया है।


11
सही उत्तर के लिए +1 और नमूना कॉन्फ़िगरेशन फ़ाइल का सुझाव देना । रूबी के लिए फिगारो जैसी कुछ लाइब्रेरी हैं जो इस दिशा में आपको पसंद करती हैं। आपके पास वास्तविक मूल्यों के समान मूल्यों के साथ एक नमूना फ़ाइल होनी चाहिए ताकि जो व्यक्ति आपके कोड को देखता है वह जानता है कि पर्यावरण को कैसा दिखना चाहिए। हेरोकू जैसे कुछ प्लेटफ़ॉर्म, पर्यावरण चर का उपयोग करते हैं, इसलिए आप अपने कॉन्फ़िगरेशन को कुछ इस तरह सेट कर सकते हैं database_url = Environment.DATABASE_URLऔर जैसे ऊपर एक टिप्पणी छोड़ सकते हैं # postgres://username:password@localhost/dbname
क्रिस क्राइसिस

@ChrisCirefice धन्यवाद! हमेशा मुझे आश्चर्य होता है कि नए "उपकरण" आसपास आते हैं जो आपको स्पष्ट रूप से याद दिलाना चाहिए: यदि यह कोड अन्य मनुष्यों द्वारा पढ़ा जा रहा है, तो यह नहीं समझाते हुए कि एक विन्यास कैसे काम करता है? एक बार फिर धन्यवाद।
जेकगॉल्ड 17

27

आप स्वच्छता जांच को लागू करने के लिए पूर्व-प्रतिबद्ध हुक भी जोड़ सकते हैं। .git/hooksप्रत्येक गिट रिपॉजिटरी की निर्देशिका में कुछ नमूना स्क्रिप्ट हैं।

स्क्रिप्ट pre-commitको निष्पादित किया जाता है यदि यह प्रत्येक प्रतिबद्ध से पहले मौजूद है, और एक गैर-शून्य रिटर्न मान कमिट को निरस्त कर देता है।

उदाहरण के लिए, आपके पास इस तरह से एक सरल स्क्रिप्ट हो सकती है:

#! /bin/sh -e
git ls-files --cached | grep -qx 'filename' && { echo "Excluded file included in the commit" >&2; exit 1; }
exit 0

और अगर वह filenameमेल खाता है, तो प्रतिबद्ध विफल हो जाता है।


1
+1 यह सही उत्तर है जो वास्तव में फ़ाइल को स्पष्ट रूप से जोड़ने और प्रतिबद्ध करने से रोकता है।
आर ..

वास्तव में, हालांकि अनुशंसित अभ्यास इस रोकथाम को लागू करने पर निर्भर नहीं है (अर्थात इसके बजाय `.ignignore का उपयोग करें)।
डेविड ज़ेड

2
@ आर .. हाँ और नहीं। हालांकि प्रश्न में कहा गया है, "किसी फाइल को यूकोमिटेबल होने के रूप में चिह्नित करना" आत्मा "एक फाइल को प्रतिबद्ध होने से रोकना है।" वास्तविकता जो बना रही है .gitignoreवह बहुत आम है- और आमतौर पर समझा जाता है- Git का उपयोग करने वाले किसी भी व्यक्ति के लिए अभ्यास। लेकिन प्री-कमिट स्क्रिप्ट का उपयोग वास्तव में Git के अधिकांश उपयोगकर्ताओं द्वारा नहीं किया जाता है। इसके लिए सेटअप के कुछ ज्ञान की आवश्यकता होती है और इसके लिए कुछ सही कारण की आवश्यकता होती है कि इस तरह का तरीका केवल .gitignoreफ़ाइल का उपयोग करने के लिए बेहतर होगा । लेकिन यह कुछ और जटिल मामलों के लिए बहुत उपयोगी है, लेकिन यह निश्चित रूप से एक अवधारणा है जिसका उपयोग आप तब करेंगे जब आप वास्तव में जानते होंगे कि आपको इसका उपयोग करने की आवश्यकता है।
जेकेगॉल्ड

2
मैं इसे उन स्थितियों में उपयोग करते हुए देख सकता हूं जहां आप 100% विश्वास नहीं कर सकते हैं। नितिग्नोर (आप कुछ मूर्खतापूर्ण रूप से मांग कर सकते हैं कि git comitting के लिए फ़ाइल जोड़ दें)। या शायद कोई और .gitignore फ़ाइल संपादित कर सकता है (यह संस्करण नियंत्रण में है, सब के बाद)। यदि आपको वास्तव में एक परीक्षण योग्य प्रक्रिया की आवश्यकता है तो यह ऐसी चीज है जिसे आप ऐसी प्रक्रिया में काम कर सकते हैं।
कॉर्टन अमोन

@CortAmmon यह हमेशा विश्वास के बारे में नहीं है। आप अपने स्रोत कोड में कुछ अस्थायी और गैर-सार्वजनिक डिबग जानकारी जोड़ सकते हैं जिसे आप करना नहीं चाहते हैं लेकिन आप ऐसी फ़ाइल को अनदेखा नहीं कर सकते। इसके बजाय आप आने से पहले इसे जांचना चाहते हैं कि क्या इसमें कुछ भी अवैध नहीं है । यह इस उपयोग के मामले के लिए एक अच्छा समाधान की तरह दिखता है। और इस तथ्य के एक मीट्रिक के रूप में कि यह मेरा प्रश्न है क्योंकि यह मेरा उपयोग मामला है।
t3chb0t

12

@JakeGould ने क्या कहा। कुछ उदाहरणों में आप विशेष फ़ाइल बिट्स का उपयोग भी कर सकते हैं जैसे कि skip-worktreeया assume-unchangedनिम्नलिखित तरीके से सेट किया जा सकता है; दोनों के बीच के अंतर के लिए, इस ढेर अतिप्रवाह उत्तर को देखें :

git update-index --assume-unchanged <file>

जो तब पहले से मौजूद फ़ाइल में अतिरिक्त परिवर्तन छिपा देगा और जिसे आप उपयोग कर सकते हैं यदि आप वास्तव में चाहते हैं कि हर पुल के बाद एक फ़ाइल हो। लेकिन मैं आपको सलाह दूंगा कि यदि आप वास्तव में जानते हैं कि आप क्या कर रहे हैं तो इसका इस्तेमाल करें।


8

.gitignore@JakeGould ने कहा कि जैसे उपयोग करें । इसके अलावा, कुछ संबंधित जानकारी:

  • .gitignoreट्रैक किए जाने से फ़ाइलें रखता है; अगर वे पहले से ही git rm --cachedउन्हें हटाने के लिए उपयोग ट्रैक कर रहे हैं
  • फ़ाइलों / प्रतिमानों $GIT_DIR/info/excludeको भी अनदेखा किया जाएगा
  • Core.excludesFile द्वारा निर्दिष्ट फ़ाइल में फ़ाइल / पैटर्न को ~/.gitconfigभी अनदेखा कर दिया जाता है।

देखें सरकारी Git प्रलेखन अधिक जानकारी के लिए।


2

जेक और 46 के उत्तर पर विस्तार करने के लिए: एक बहुत अच्छी प्रैक्टिस आपके पास उन फ़ाइलों के लिए उपयोग की जाने वाली एक सुसंगत एक्सटेंशन है जिसमें आप निजी जानकारी शामिल करते हैं, और .gitignoreहमेशा उस एक्सटेंशन के साथ फ़ाइलों को विश्व स्तर पर बाहर करने के लिए उपयोग करते हैं ( .gitconfigफ़ाइल का उल्लेख कहीं और करने के लिए और इसे हमेशा अनदेखा करें आपके उपयोगकर्ता के लिए)।

इस तरह, आप उदाहरण के लिए हो सकते हैं:

/projectname/mypasswords.exc 

और यदि आपने *.excविश्व स्तर पर बाहर रखा है , तो आप जानते हैं कि यह प्रतिबद्ध नहीं होगा, भले ही आप व्यक्तिगत रूप से उस विशिष्ट फ़ाइल को भूल जाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.