2013-06-13 10 views
8

मैं गिट में अपनी कॉन्फ़िगरेशन फ़ाइलें (~/.bashrc, ~/.emacs, ~/emacs इत्यादि) संग्रहीत करता हूं। जिस तरह से मैंने इसे कॉन्फ़िगर किया था वह घर डीआईआर में एक गिट रिपोजिटरी जोड़ने के लिए था।स्थानीय कॉन्फ़िगरेशन फ़ाइलों के लिए गिट रिपॉजिटरी का प्रबंधन करने का कुशल तरीका

मैं इस दृष्टिकोण पाया कुछ समस्या है: क्योंकि यह रिकर्सिवली पूरे घर dir को स्कैन करता है

  • git gui, हमेशा के लिए ले जाता है।
  • मैं कभी-कभी गलती से कॉन्फ़िगर रेपो में फ़ाइलों को जोड़ता हूं जो एक नए रेपो में जाना चाहिए (मैं ~/projects/foo में एक नई परियोजना बनाउंगा, भूल जाओ कि इसमें अभी तक एक गिट रेपो प्रारंभ नहीं हुआ है, और foo निर्देशिका में git add bar.xyz निष्पादित करें। इसके परिणामस्वरूप फ़ाइल को कॉन्फ़िगर रेपो में जोड़ा जा रहा है)।

मुझे यकीन नहीं है कि गिट रिपॉजिटरीज को उस निर्देशिका के तहत घोंसला करना बुद्धिमानी है जिसके पास पहले से ही एक गिट रिपोजिटरी है, हालांकि मुझे अभी तक कोई मौलिक समस्या नहीं आ रही है।

क्या कोई बेहतर तरीका है, या यह एक मानक तरीका है जिसमें लोग स्थानीय कॉन्फ़िगरेशन फ़ाइलों को गिट में संग्रहीत करते हैं?

+1

यदि आप मशीनों के बीच फ़ाइलों को सिंक करने के लिए ऐसा कर रहे हैं, तो मैं बस ड्रॉपबॉक्स का उपयोग करूंगा। यदि आप 'गिट' चाहते हैं, तो सेटअप समान होगा हालांकि: स्रोतों के साथ कुछ निर्देशिका है (जैसे '~/ड्रॉपबॉक्स/होम', और एक कंकाल '~/.bashrc' है जो स्रोत ~ ~/ड्रॉपबॉक्स/घर है/.bashrc' और अन्य फ़ाइलों को ~ ~ ' – millimoose

+0

में सिमलिंक करता है इसके लिए बहुत सारे टूल हैं। https://dotfiles.github.io/ को" सामान्य उद्देश्य डॉटफाइल उपयोगिताओं "के अंतर्गत देखें। –

उत्तर

3

मैं dotfiles को प्रबंधित करने के लिए एक गिट रेपो का उपयोग कर रहा हूं। इसमें शामिल हैं:

  1. एक निर्देशिका dotfiles, जिसमें वास्तविक डॉटफाइल/डॉटडिर्स शामिल हैं जिन्हें मैं ट्रैक करना चाहता हूं।
  2. एक खोल स्क्रिप्ट, $HOME में dotfiles/.* की प्रतीकात्मक लिंक बनाने के लिए, की तरह

    for dotfile in dotfiles/.* ; do 
        case $(basename $dotfile) in 
        .) 
         ;; 
        ..) 
         ;; 
        *) 
         ln -sv $(realpath dotfile) $HOME/$(basename $dotfile) 
         ;; 
        esac 
    done 
    

स्क्रिप्ट को मैन्युअल runned है मैं कुछ dotfiles में नए जोड़े जाने के बाद (सामान्य रूप से रेपो में एक dotfile ले जाकर), या एक नए और साफ $HOME में।

रेपो कहीं भी रह सकता है। मेरे पास उपयोग किए जा रहे प्रत्येक होस्ट पर $HOME में क्लोन है।

इस तरह से मेरे पास डॉटफाइल को चुनिंदा रूप से ट्रैक करने के लिए बहुत छोटा और गैर-घोंसला वाला कार्य पेड़ है।

पेज। आप dotfiles/.config/* से .gitignore जैसी प्रविष्टियां जोड़ना चाह सकते हैं, इसमें कई फाइलें हैं जिन्हें मैं ट्रैक नहीं करना चाहता हूं।

+2

मुझे यह विचार पसंद है, लेकिन उस शेल स्क्रिप्ट में कुछ आदेश डिफ़ॉल्ट रूप से उपलब्ध नहीं हैं (उदा: ओएसएक्स में रीयलपाथ नहीं है)। –

+0

प्रश्न: मैं यह करता हूं, लेकिन मुझे आश्चर्य है कि आप मशीन-विशिष्ट विविधताओं को कैसे प्रबंधित करते हैं? उदाहरण के लिए मेरे घर कंप्यूटर पर मैं चाहता हूं कि मेरा गिट कॉन्फिग ईमेल मेरा व्यक्तिगत ईमेल हो, लेकिन मेरे काम कंप्यूटर पर मैं चाहता हूं कि यह मेरा काम ईमेल हो। आदि। वर्तमान में मैं कुछ फाइलों को डॉटफाइल से अपने '' 'HOME''' 'पर कॉपी करके इसे संभालता हूं लेकिन वह एक रखरखाव दुःस्वप्न बन जाता है (यदि मैं एक नया गिट उपनाम जोड़ना चाहता हूं तो मुझे दो .gitconfig फ़ाइलों को अद्यतन करना होगा, आदि) –

+0

@AdamParkin प्रति मशीन सेटिंग्स मुझे भी distrub ('.asoundrc')। गिट लेखक के रूप में, मैं पथ से लेखक प्रति रेपो सेट करने के लिए एक zsh 'cd' हुक का उपयोग करता हूं, [यह gist] देखें (https://gist.github.com/jokester/208147bf83f155e1f39c6734a108feaa)। कोशिश नहीं की है लेकिन वैश्विक गिट हुक कुछ ऐसा करने में सक्षम हो सकता है। – Jokester

3

मैं अपने डॉटफाइल को गिट रिपोजिटरी में रखता हूं जैसे आप करते हैं- मेरा घर डीआईआर एक गिट भंडार है।

  • git gui: मैं शायद ही कभी इसका इस्तेमाल, इसलिए मैं वास्तव में यकीन है कि कैसे अपने प्रदर्शन ट्रैक न किए गए फ़ाइलों के बहुत सारे से प्रभावित है नहीं कर रहा हूँ। हालांकि, मेरे पास ~/.gitignore फ़ाइल है जिसमें बस * है। शायद आपके लिए सब कुछ अनदेखा कर देगा git gui आपके लिए।

  • गलती से फ़ाइलों को जोड़ने: एक ~/.gitignore फ़ाइल कि बस * भी शामिल गलती से अपनी dotfiles भंडार के लिए एक फ़ाइल जोड़ने जब आप एक नई परियोजना भंडार प्रारंभ करने में भूल की समस्या का हल बनाना (यह अगर तुम -f उपयोग करने के लिए आपको बता दूँगा वास्तव में फ़ाइल जोड़ना चाहते हैं)।

  • मुझे नेस्टेड रिपॉजिटरीज़ में कभी समस्या नहीं हुई है।

कुछ नोट:

  • मुख्य कारण मैं सेट मेरी ~/.gitignore* के लिए इतना है कि git status अपनी होम निर्देशिका में हर फ़ाइल नहीं दिखाती है। यह मुझे हर समय git add -f का उपयोग करने के लिए मजबूर करता है, जो थोड़ा परेशान है, लेकिन एक सौदा का बड़ा नहीं।

  • git clean -dxf के बजाय git clean -dx का उपयोग करने की आदत में जाओ। आपको नए प्रोजेक्ट रिपॉजिटरीज़ में git config clean.requireForce false चलाने के लिए याद रखना होगा, लेकिन यह आपको अपनी होम निर्देशिका में गलती से अपनी सभी फ़ाइलों को हटाने से रोक देगा, यदि आप उस निर्देशिका में नहीं हैं जो आप सोचते हैं कि आप अंदर हैं।

  • गिट कभी-कभी फ़ाइल अनुमतियों को रीसेट करने का निर्णय लेता है। यदि आप अपने गिट भंडार में संवेदनशील फाइलें (chmod og-rwx) रखना चाहते हैं तो यह खराब हो सकता है। मैं इसे post-checkout हुक के माध्यम से संभालता हूं जो कुछ फ़ाइलों और निर्देशिकाओं की अनुमतियों को हल करता है (उदाहरण के लिए, ~/.ssh/authorized_keys)।

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