ट्रैकिंग सेटिंग्स के लिए / (रूट) पर Git रेपो बनाना?


28

इसलिए मैं ज्यादातर विकास उद्देश्यों के लिए Git का उपयोग करता हूं, लेकिन मुझे सिर्फ यह महसूस हुआ कि मैं इसका उपयोग उन फ़ाइलों के भंडारण के संस्करणों के लिए कर सकता हूं जो मेरे Ubuntu इंस्टालेशन पर हैं।

मेरा प्रस्तावित सेटअप है:

  • git init पर एक रेपो /

  • उस .gitignoreपर जोड़ें जो /किसी भी फाइल को अनदेखा करता है, विशेष सेटिंग्स को छोड़कर जो मैं ट्रैक करना चाहता हूं।

    उदाहरण के लिए, .gitignoreइसमें ( स्रोत ) शामिल हो सकते हैं :

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • जब भी मैं इन निम्न-स्तरीय सेटिंग्स को बदलता हूं, मैं उन्हें ट्रैक कर सकता हूं।

क्या ऐसा कुछ है जो इस सेटअप के साथ गलत हो सकता है? क्या कर्नेल को हमेशा /केवल कुछ फ़ोल्डर्स की आवश्यकता होती है? क्या यह किसी भी एप्लिकेशन के कामकाज में गड़बड़ी करेगा?


शायद आप अपने विचार करना चाहिए ~होम निर्देशिका सेटिंग्स फ़ाइलों के बजाय /फाइलों
माइकल Durrant

1
पुराने grex SunOS सार्वजनिक सर्वर में इसकी सभी आरसी फाइलें थीं और कौन जानता है कि कुछ पुराने स्रोत नियंत्रण में और क्या है (यदि यह SCCS या RCS नहीं है, लेकिन निश्चित रूप से CVS से पुराना है)। मुझे इसमें कोई समस्या नहीं दिख रही है।
जोशुआ

@ माइक डुरंट: /etc/crontabमेरे निजी लैपटॉप पर सामान निश्चित रूप से मेरा है, लेकिन मैं देख रहा हूं कि आपका क्या मतलब है।
अभिषेक दिवेकर २०'१ive

7
etckeeperबैकअप लें और उसका उपयोग करें ।
मोनिका को बहाल करना - एम। श्रोडर

बस आकस्मिक रूप से स्टेज / कमिट करने के लिए सावधान रहें / देव / sda या समान: D
quetzalcoatl

जवाबों:


37

आपके दोनों प्रश्नों का उत्तर नहीं है, आप अपनी इच्छानुसार कोई भी निर्देशिका बना सकते हैं /। केवल एक चीज जो हो सकती है वह है मेरे द्वारा अनुमान किए गए कुछ स्पेसियल रास्तों के साथ कुछ अनुमति मुद्दे।

हालाँकि .gitनिर्देशिका को कहीं और संग्रहीत करना बेहतर है , कुछ ऐसा दिखता है:

git --git-dir=/home/user/backup-root --work-tree=/

पढ़ें यहाँ


5
बहुत दिलचस्प है, मैं वास्तव में नहीं जानता था कि आप इसे गिट में कर सकते हैं! सलाह के लिये धन्यवाद।
अभिषेक दिवेकर

यह वही सुविधा है जो आपको केवल / होम / उपयोगकर्ता btw के तहत फाइल सेट करने की सुविधा देती है। इसके अलावा एक शैल उपनाम जोड़ने से यह बहुत सुविधाजनक हो जाता है।
डैनियल जर्स

19

वास्तव में, आप शायद में संस्करण नियंत्रण विन्यास फाइल करना चाहते हैं /etc/(आप रूट निर्देशिका की प्रविष्टियों के बारे में परवाह नहीं है /, विशेष रूप से निर्देशिका की तरह procया usrया binमें /) ताकि आप स्थापित करने के लिए चाहते हो सकता है etckeeperपैकेज

और आप कुछ चयनित उपनिर्देशिकाओं (जैसे /usr/share/applications/आपने उल्लेख किया है) को भी नियंत्रित कर सकते हैं ।

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


1
मैं वास्तव में फाइलों के बारे में परवाह /usr/share/applicationsकरता हूं क्योंकि मैं कभी-कभी उनके साथ गड़बड़ करता हूं।
अभिषेक दिवेकर

6

जीआईटी रेपो में / काम करता है ठीक है, सिवाय इसके कि यह नोटिस करना मुश्किल बनाता है जब आपके पास समस्याओं के साथ निचले स्तर के गिट रेपो हैं क्योंकि यह उन सभी के लिए जवाब देगा।

नोट: यह कम काम है और शायद 'डेबसम्स' का उपयोग करने के लिए अधिक उपयोगी है

sudo apt-get install debsums

जो आपको बायनेरिज़ या कॉन्फ़िगरेशन फ़ाइलों में तेज़ी से (अधिकांश) परिवर्तनों का पता लगाने की अनुमति देगा।

यहां स्थापित संकुल से एक उदाहरण के रूप में ऊपर वाले संकुल से भिन्न हैं।

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic

और आप के साथ परिवर्तित कॉन्फ़िगरेशन फ़ाइलों की एक सूची प्राप्त कर सकते हैं:

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>

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

/var/lib/dpkg/info/chromium-browser.list

यह dpkg डेटा का उपयोग करता है और एक बड़ी /। निर्देशिका और वर्कफ़्लो से बचा जाता है।


क्या आप समझा सकते हैं "इसके अलावा यह नोटिस करना मुश्किल बनाता है जब आपके पास समस्याओं के साथ निचले स्तर के गिट रेपो होते हैं क्योंकि यह उन सभी के लिए जवाब देगा।" थोड़ा और अधिक? मुझे समझ नहीं आ रहा है कि यह कैसे समस्या का कारण बन सकता है अगर .itignore केवल कुछ फ़ाइलों को ट्रैक करता है।
अभिषेक दिवेकर

2
मेरा मानना है कि @abhidivekar ओपी कह रहा है जब आप कहते हैं में एक और Git रेपो बनाने /home/$USERतब .gitमें /में रेपो के लिए दिए गए किसी भी Git आदेश के लिए जवाब देंगे /home$USERबजाय के लिए कि [ .girमें फ़ाइल] /home/$USER...
जॉर्ज Udosen

ओह समझा। मुझे लगता है कि मुझे इसे एक अलग फ़ोल्डर में रखना चाहिए। या /
अभिषेक दिवेकर

1
@George .gitट्री में डायरेक्टरी को उच्चतर तक पहुँचाने के लिए , आप cdइसे बस , या इसका एक उपनिर्देशिका जिसमें एक .gitफ़ोल्डर नहीं है (एक सामान्य निर्देशिका जो है)
बिल्ली

2
@abhidivekar सही, यह एक समस्या नहीं है यदि लाभ समस्याओं से आगे निकलते हैं लेकिन यह अप्रत्याशित व्यवहार है। अवरोधक नहीं, सिर्फ एक चेतावनी।
gdahlm

5

इसलिए मैं अन्य उत्तरों की खोज कर रहा हूं और मुझे एक प्रक्रिया मिली है जो मेरे लिए काम करती है:

  • एक बनाने .gitignoreमें /। यह बहुत अधिक जटिल था जितना मैंने सोचा था कि यह होगा, क्योंकि जिस तरह से Git सबफ़ोल्डर्स में श्वेतसूची फ़ाइलों को संभालता है। मैंने इस और इस लिंक का उपयोग मेरी मदद करने के लिए किया।

    ## Source: /programming//a/29932318/4900327
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
  • पर जाएं /और चलाने के git init .अब तक, मैं संग्रह करने में अक्षम किया गया है .git/का उपयोग करते हुए एक और निर्देशिका में फ़ोल्डर लिंक @Ravexina ने उल्लेख किया

  • भागो git add .और git status। आपको उन सभी सेटिंग्स फ़ाइलों की सूची मिलनी चाहिए, जो Git ट्रैकिंग कर रही हैं।

    If you used the above `.gitignore`, it should track `/etc/crontab`, `/etc/default/tlp`, `/home/USERNAME/.bash_profile`, and `/home/USERNAME/.bashrc`.
    
  • के साथ प्रतिबद्ध है git commit -m "Initial settings files"

  • आप के साथ परिवर्तन ट्रैक कर सकते हैं git log -p -- path/to/fileया gitk path/to/file। इस पर अधिक चर्चा यहां


2

यदि आप /etc/shadowgit रेपो में संवेदनशील सामान (जैसे ) स्टोर करने जा रहे हैं , तो आपको यह सुनिश्चित करना चाहिए कि यह सभी उपयोगकर्ताओं द्वारा पठनीय नहीं है, क्योंकि डिफ़ॉल्ट रूप से ऑब्जेक्ट्स की अनुमति 444होगी और निर्देशिकाओं की अनुमति होगी 0755। आप की अनुमति के बदल सकते हैं .gitकरने के लिए 700या में रख/root

एक अन्य समस्या यह है कि git फ़ाइल सिस्टम की तरह फ़ाइल अनुमतियों को संग्रहीत नहीं करता है, और यह विस्तारित विशेषताओं को संग्रहीत नहीं करता है। फ़ाइलों के लिए, git केवल स्टोर करता है कि क्या वे निष्पादन योग्य हैं। इसलिए यदि आप एक हटाई गई फ़ाइल को पुनर्स्थापित करना चाहते हैं, तो इसका स्वामी और समूह रूट होगा (यदि आप इसे रूट के रूप में करते हैं), और इसकी अनुमति होगी 644या 755। यह सेवाओं की कॉन्फ़िगरेशन फ़ाइलों के लिए समस्याग्रस्त हो सकता है जिसका स्वामी जड़ नहीं है।

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