2013-07-05 7 views
7

मैं गिट में नया हूं इसलिए कृपया मेरे साथ भालू।मैं एक गिट रेपो में एक डमी फ़ाइल कैसे रखूं?

कहें कि मेरे पास संस्करण नियंत्रण के तहत एक फ़ाइल है जिसमें संवेदनशील डेटा शामिल है। निश्चित रूप से, मैंने उस फ़ाइल को मेरी .gitignore फ़ाइल में रखा है, इसलिए इसे रेपो पर धक्का नहीं दिया जाता है। समस्या अब मेरे प्रोजेक्ट में कहीं है, मेरे पास

#include <sensitivedata> 

या आपकी पसंद की भाषा जो भी है। समस्या तब होती है जब कोई उस रेपो से क्लोन करता है, वह फ़ाइल गुम होती है और समाधान बनाने/संकलित करने का प्रयास करते समय उसे घातक त्रुटि मिलती है।

तो, बजाय फ़ाइल मैं वास्तव में काम कर रहा हूँ मैं बजाय एक ही नाम के साथ कुछ डमी फ़ाइल पुश करने के लिए चाहते हैं पर है, जहां मैं

// replace the next line with the sensitive data!!! 

मैं यह कर होगा कैसे की तरह एक टिप्पणी जगह धकेलने की?

उत्तर

7

आप सामग्री को फिल्टर करने के .gitatrributes इस्तेमाल कर सकते हैं:

  • .gitattributes

    secrets.h filter=secret merge=keepMine 
    
  • .git/config

    [filter "secret"] 
    clean = echo "// replace the next line with the sensitive data" 
    smudge = cat 
    
    [merge "keepMine"] 
        name = always keep mine during merge 
        driver = /bin/true %O %A %B 
    

मैं में फेंक दिया एक ' गलती विलय को रोकने के लिए रखो 'विलय'। हालांकि, AFAIK विलय में भी शामिल नहीं होना चाहिए, क्योंकि clean फ़िल्टर चरण के कारण स्थानीय परिवर्तन प्रभावी रूप से 'अदृश्य' होंगे। क्या secrets.h में वास्तव में है के बावजूद, रेपो फ़ाइल हमेशा शामिल होंगे:

// replace the next line with the sensitive data 

उदा .:

/tmp/work$echo '// agent 007 reporting for duty' > secrets.h
/tmp/work$git status -s
M secrets.h
/tmp/work$git diff
/tmp/work$git cat-file -p HEAD:secrets.h
// secret contents not in repo

+0

कमाल! धन्यवाद! – lightxx

+2

एक हेड-अप: '.git/config' फ़ाइलें स्थानीय हैं। आपको यह सुनिश्चित करने की ज़रूरत है कि इस रेपो के सभी उपयोगकर्ताओं में फ़िल्टर परिभाषाएं हों, क्योंकि '.gitattributes' रेपो में है। अधिक जानकारी के लिए आप [git-विशेषताएँ मैन पेज] (https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html) पढ़ना चाहेंगे – sehe

0

अगर C++ पूर्वप्रक्रमक इस (मुझे लगता है कि ऊपर दिखाए गए कोड कुछ ग शैली पूर्वप्रक्रमक के लिए है), लेकिन यहाँ है ऐसा करने में सक्षम है मुझे पता नहीं मैं इसी तरह के मामलों में क्या करना है:

Git में प्रतिबद्ध:

  • default.config
  • user.config।टेम्पलेट

gitignore में डाल:

  • user.config

और फिर मैं कोड है कि मूल रूप से करता है:

if (file_exists(user.config)): 
    use user.config 
else: 
    use default.config 

कि जिस तरह से मैं कुछ समझदार डिफ़ॉल्ट आपूर्ति कर सकते हैं और इसे ओवरराइड करने के लिए एक सरल और साफ तरीका है।

+1

आपके इनपुट के लिए धन्यवाद। मैं आपके जैसा ही कुछ सोच रहा था, लेकिन फिर इसके खिलाफ फैसला किया क्योंकि मैं पूरी तरह से किसी भी स्रोत नियंत्रण मुद्दों को वास्तविक कोड से अलग करना चाहता हूं। सिर्फ पूर्णता के लिए अगर कोई और उस मार्ग पर जाना चाहता है, तो इसे मेकफ़ाइल में ऐसा कुछ उपयोग करके किया जा सकता है: http://stackoverflow.com/a/142926/899260 – lightxx

संबंधित मुद्दे