संस्करण नियंत्रण के तहत "डॉट फाइलें" कैसे रखें?


30

आपके कॉन्फ़िगरेशन फ़ाइलों में परिवर्तनों पर नज़र रखने के लिए Etckeeper एक बढ़िया उपकरण है /etc। इसके बारे में कुछ प्रमुख बातें सच में सामने आती हैं। यह वीसीएस की एक विस्तृत विविधता के साथ इस्तेमाल किया जा सकता है: गिट, मर्क्यूरियल, डार्क्स, या बज़्र। यह रोजाना ऑटो भी करता है और जब भी आप पैकेज स्थापित करते हैं, हटाते हैं या अपग्रेड करते हैं। यह फ़ाइल अनुमतियों और उपयोगकर्ता / समूह स्वामित्व मेटाडेटा पर भी नज़र रखता है।

मैं अपनी "डायरेक्ट फाइल्स" को अपने होम डाइरेक्टरी में वर्जन कंट्रोल के साथ ही अधिमानतः बाजार में रखना चाहूंगा। क्या कोई जानता है कि क्या इस उद्देश्य के लिए एटकीपर जैसा उपकरण मौजूद है?

सबसे खराब स्थिति है, मैं उस एक सरल क्रॉन जॉब चल कल्पना bzr add && bzr ciएक या जोड़ने के साथ-साथ दिन में दो बार ~/Documents, ~/Music, आदि के लिए .bzrignore पहले से ही एक स्क्रिप्ट के साथ कुछ ऐसा ही करने वाले किसी व्यक्ति?

जबकि मैं बाज़ार पसंद करूंगा, अन्य विकल्प दिलचस्प हो सकते हैं।


4
यूनिक्स स्टैक एक्सचेंज में संबंधित चर्चा: स्रोत नियंत्रण के तहत ~ लगाने के लिए टिप्स । यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन फिर भी उपयोगी जानकारी प्रदान कर सकता है।
गिल्स एसओ- बुराई को रोकें '

1
अभी इसके लिए बहुत सारे उपकरण हैं। "सामान्य-प्रयोजन डॉटफ़ाइल उपयोगिताओं" अनुभाग के तहत dotfiles.github.io देखें ।
रॉबिन ग्रीन

@ रोबिनग्रीन यदि आपने उचित उत्तर में काम किया, तो मैं इसे स्वीकार कर सकता था। bzrनिश्चित रूप से 2015 में जाने का रास्ता नहीं है
andrewsething

जवाबों:


7

मुझे नहीं पता था कि अगर ऐसा कुछ था, तो मैंने कुछ कोड को प्राप्त किया, जो कि आप अपने रिपॉजिटरी का उपयोग करके प्राप्त करना चाहते हैं: http://github.com/robertmassaioli/config-files

मेरे पास एक फाइल है जो कहती है कि सभी फाइलें संबंधित हैं और जनरेट_लिंक प्रोग्राम सिर्फ उन सभी को वहां डालता है। यदि आप जानते हैं कि आप क्या कर रहे हैं और कुछ हास्केल कोड संकलित कर सकते हैं तो यह वास्तव में सरल और आसान है। हालांकि चेतावनी दी है कि यह वास्तव में मेरे अपने निजी उपयोग के लिए बनाया गया था।


3
हैसेल के लिए +1! -1 हैस्केल के लिए! जबरदस्त हंसी। नहीं, लेकिन वास्तव में।
डेरेक

मैं तुम्हें सुनता हूं। मैंने हास्केल को चुना क्योंकि मैं इसे सीख रहा हूं, यह नौकरी के लिए सबसे अच्छी भाषा हो सकती है या नहीं। :)
राबर्ट मासियोली

3

खैर, मैं आगे बढ़ा और मैन्युअल रूप से ऐसा किया जब तक कि मुझे बेहतर समाधान नहीं मिला। इसलिए मैं भी समझा सकता हूं कि मैंने क्या किया।

पहले मैंने एक किया bzr init ~, लेकिन अगली चीज जो मैंने की bzr ignore "*"। मैंने फैसला किया कि मैं पूरी बात को संस्करण नियंत्रण में नहीं रखना चाहता। यह सिर्फ इसके लायक नहीं था, खासकर जब आप समझते हैं कि वहाँ कुछ चीजें हैं जो आपको वास्तव में अपनी कुंजी की तरह vcs में नहीं रखनी चाहिए। तो मैं तो bzr addमैं चाहता था कि विशिष्ट फ़ाइलों के लिए किया था। आप इसमें अपवाद भी जोड़ सकते हैं .bzrignore। पायथन नियमित अभिव्यक्ति वहाँ के रूप में अच्छी तरह से उपयोगी हैं। मैं इसे अभी के लिए बहुत पतला रख रहा हूँ। अगर सब ठीक हो जाता है, तो मैं ~/.configऔर ~/.gconfभी जोड़ सकता हूं ।

मैंने एक त्वरित स्क्रिप्ट भी लिखी है जो मैं क्रॉन जॉब के रूप में चलाता हूं। यह जाँचता है कि क्या फ़ाइलें बदल गई हैं, और यदि ऐसा है तो एक स्वचालित प्रतिबद्धता है:

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit

जब मैंने पहली बार यह पोस्ट किया था, तो मैंने अपना उत्तर वापस चुन लिया था, लेकिन इसे पूर्ववत करने का निर्णय लिया। यह निश्चित रूप से 2015 में इस सवाल का सबसे अच्छा जवाब नहीं है
andrewsething

2

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

मैं मैन्युअल रूप से इसमें "दिलचस्प" फाइलें जोड़ता हूं (मुझे नहीं चाहिए, उदाहरण के लिए, मेरा संगीत संग्रह या फ़ायरफ़ॉक्स कैश संस्करण नियंत्रण में होना चाहिए), लेकिन अगर आप इसे स्क्रिप्ट के साथ स्वचालित करना चाहते हैं, तो मुझे लगता है कि यह सरल समाधान है कर bzr add && bzr ciचयनित निर्देशिका पर या एक के उत्पादन पर findआदेश सिर्फ काम करेगा।


2

मैं अपनी zsh और विम फ़ाइलों को gitub में रखता हूं, अलग-अलग रिपॉजिटरी में github पर रखता हूं:

zsh के लिए, उदाहरण के लिए, मैंने ".zsh" बनाया और उसमें zshrc और zshenv डाल दिया, साथ ही zshrc को ~ / .zshrc और zshenv से ~ / .zshenv से जोड़ने के लिए एक स्क्रिप्ट कुछ इस तरह से बनाई।

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

इसलिए मैं करता हूँ

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

.vim के लिए, यह लगभग समान है, सिवाय इसके कि मैं प्लगइन्स के लिए सबमॉडल्स का उपयोग करता हूं, रोगज़नक़ के साथ, इसलिए मैंने इसे init.sh में जोड़ा।

git submodule init
git submodule update

और जब मैं एक विम प्लगइन जोड़ना चाहता हूं, तो मैं करता हूं

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

उदाहरण के लिए।

ठीक है, इसके लिए आपको बहुत अधिक काम की आवश्यकता होगी यदि आपके पास कुछ से अधिक डॉट डायर हैं जिन्हें आप प्रबंधित करना चाहते हैं, लेकिन कुछ भी आपको उन सभी को एक ही डायर में रखने से नहीं रोकता है, या गतिविधियों द्वारा अलग किया जाता है (सभी ग्राफिकल संपादकों के लिए, एक के लिए वेब गतिविधियाँ ...) या तो। वैसे भी, कि मैं क्या किया है, तो सिर्फ मेरे दो सेंट :)।


1

मैं एक ऐसे समाधान का उपयोग करता हूं जो स्वचालित नहीं है जैसे कि एटकीपर (मुझे मैन्युअल रूप से कमिट करना है), लेकिन इसने मेरे लिए अच्छा काम किया है। यह उतना विकसित नहीं है जितना मुझे पसंद है, लेकिन यह काम करता है।

मैंने अपनी स्वयं की उपयोगिता लिखी है जो GNU स्टोव के समान है , क्योंकि स्टोव ने वह सब नहीं किया जो मैं चाहता था। मैं इसे घर में स्टोव कहता हूं । जब चलाया जाता है, तो यह "होम" नामक एक निर्देशिका की तलाश करता है। फिर यह उस निर्देशिका के अंतर्गत सब कुछ लेता है और इसे $ HOME में संबंधित स्थान पर सहानुभूति देता है, जिससे निर्देशिका आवश्यक हो जाती है। यह फ़ाइल नाम का अनुवाद भी करेगा - यदि कोई फ़ाइल '_' से शुरू होती है, तो इसे '' के साथ बदल दिया जाएगा। मैंने ऐसा इसलिए किया क्योंकि यह मेरी डॉट फ़ाइलों के संपादन के लिए अच्छा है जब वे छिपे नहीं होते हैं (उन्हें डिफ़ॉल्ट रूप से निर्देशिका लिस्टिंग में देखें)। फिर, यह उनके नाम पर उनके आवेदन की अपेक्षा करता है।

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

इसने मेरे लिए अच्छा काम किया है। वास्तव में कोई कारण नहीं है कि मैं स्वचालित रूप से कमिट करने के लिए कुछ सेट नहीं कर सकता। या सभी डॉट फ़ाइलों को उचित रिपॉजिटरी में स्थानांतरित करें और अभी भी घर में स्टोव का उपयोग करें। लेकिन यह है कि मैं चीजों को कैसे किया है।


0

क्या आप dot filesEtckeeper में प्रयुक्त रिपॉजिटरी में नहीं जोड़ सकते हैं ?


1
मुझे यह कैसे करना है? उन सभी को कहीं न कहीं सहानुभूति दें /etc?
andrewsething

खैर .. वह एक विकल्प है
txwikinger

0

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


1
डुप्लिकेट को प्रबंधित करने के बजाय, क्या आप सिर्फ अपने डॉटफ़ाइल्स के लिए सहानुभूति नहीं बना सकते?
रयान

मुझे लगता है कि आप निश्चित रूप से कर सकते हैं!
डेरेक

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