สร้าง repo Git ที่ / (root) สำหรับการตั้งค่าการติดตาม?


28

ดังนั้นฉันจึงใช้ Git เป็นส่วนใหญ่ในการพัฒนา แต่ฉันเพิ่งรู้ว่าฉันสามารถใช้มันเพื่อเก็บเวอร์ชันของไฟล์การตั้งค่าที่ฉันมีในการติดตั้ง Ubuntu ของฉัน

การตั้งค่าที่ฉันเสนอคือ:

  • git init ซื้อคืนที่ /

  • เพิ่ม.gitignoreat /ที่ละเว้นไฟล์ใด ๆ ยกเว้นการตั้งค่าเฉพาะที่ฉันต้องการติดตาม

    ตัวอย่างเช่น the .gitignoreอาจมี (ที่มา ):

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • เมื่อใดก็ตามที่ฉันเปลี่ยนการตั้งค่าระดับต่ำเหล่านี้ฉันสามารถติดตามได้

มีอะไรที่ผิดพลาดกับการตั้งค่านี้หรือไม่? เคอร์เนลจำเป็นต้อง/มีเฉพาะบางโฟลเดอร์เสมอหรือไม่? แอพพลิเคชั่นใด ๆ


บางทีคุณควรพิจารณา~ไฟล์การตั้งค่าโฮมได/
เร็กตอรี่

1
เซิร์ฟเวอร์สาธารณะ greos SunOS เก่ามีไฟล์ rc ทั้งหมดและใครจะรู้ว่ามีอะไรอีกบ้างในการควบคุมซอร์สเก่า (ไม่แน่ใจว่าเป็น SCCS หรือ RCS แต่เก่ากว่า CVS) ฉันไม่เห็นปัญหากับสิ่งนี้
Joshua

@ Mike Durrant: สิ่งที่ชอบ/etc/crontabในแล็ปท็อปส่วนตัวของฉันเป็นของฉันแน่นอน แต่ฉันเห็นสิ่งที่คุณหมายถึง
Abhishek Divekar

7
ใช้etckeeperและทำการสำรองข้อมูล
Reinstate Monica - M. Schröder

เพียงระวังไม่ให้ขึ้นเวที / คอมมิชชันเช่น / dev / sda หรือสิ่งที่คล้ายกัน: D
quetzalcoatl

คำตอบ:


37

คำตอบทั้งสองคำถามคือไม่มีคุณสามารถสร้างไดเรกทอรีใด ๆ /ที่คุณต้องการใช้ในการ สิ่งเดียวที่สามารถเกิดขึ้นได้คือปัญหาการอนุญาตบางอย่างที่มีเส้นทางพิเศษที่ฉันเดา

อย่างไรก็ตามควรเก็บ.gitไดเรกทอรีไว้ที่อื่นดีกว่า:

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

อ่านที่นี่


5
น่าสนใจมากฉันไม่รู้จริง ๆ ว่าคุณสามารถทำได้ในคอมไพล์! ขอบคุณสำหรับคำแนะนำ
Abhishek Divekar

นั่นเป็นคุณสมบัติเดียวกับที่ให้คุณติดตามเฉพาะการตั้งค่าไฟล์ภายใต้ / home / user btw การเพิ่มนามแฝงเปลือกนอกจากนี้ยังทำให้สะดวกมาก
Daniel Jour

19

ที่จริงแล้วคุณอาจต้องการแฟ้มการกำหนดค่าการควบคุมเวอร์ชันใน/etc/(คุณไม่สนใจเกี่ยวกับรายการของไดเรกทอรีราก/สะดุดตาไดเรกทอรีเช่นprocหรือusrหรือbinใน/) ดังนั้นคุณอาจต้องการที่จะติดตั้งetckeeperแพคเกจ

และคุณยังสามารถควบคุมเวอร์ชันย่อยไดเรกทอรีที่เลือกบางรายการ (เช่น/usr/share/applications/ที่คุณพูดถึง)

อย่างไรก็ตามอย่ายุ่งกับระบบจัดการแพ็คเกจของ Ubuntu บางทีคุณควรสำรองข้อมูลแพ็คเกจที่ติดตั้งปัจจุบันเป็นส่วนใหญ่


1
จริง ๆ แล้วฉันสนใจเกี่ยวกับไฟล์ใน/usr/share/applicationsขณะที่ฉันยุ่งกับพวกเขาเป็นครั้งคราว
Abhishek Divekar

6

มี repo คอมไพล์ใน / ทำงานได้ดียกเว้นว่ามันทำให้ยากที่จะสังเกตเห็นเมื่อคุณมี repo คอมไพล์ระดับต่ำที่มีปัญหาตามที่มันจะตอบสำหรับพวกเขาทั้งหมด

หมายเหตุ: มันใช้งานได้น้อยลงและอาจมีประโยชน์มากกว่าในการใช้ 'debsums'

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>

โปรดสังเกตว่า Chromium-browser ถูกทำแพ็กเกจไม่ถูกต้องและมีไฟล์อยู่ในรายการไฟล์แพ็กเกจที่ไม่มีอยู่

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

สิ่งนี้ใช้ข้อมูล dpkg และหลีกเลี่ยงไดเรกทอรี /.git และเวิร์กโฟลว์ขนาดใหญ่


คุณสามารถอธิบาย "ยกเว้นว่ามันยากที่จะสังเกตเห็นเมื่อคุณมี repo คอมไพล์ระดับต่ำกว่าที่มีปัญหาเพราะมันจะตอบสำหรับพวกเขาทั้งหมด" อีกเล็กน้อย? ฉันไม่เข้าใจว่ามันจะทำให้เกิดปัญหาได้อย่างไรหาก. gitignore ติดตามไฟล์เพียงไม่กี่ไฟล์
Abhishek Divekar

2
ผมเชื่อว่า OP @abhidivekar ไม่ว่าจะเป็นเมื่อคุณสร้าง repo คอมไพล์อีกพูด/home/$USERแล้ว.gitใน/จะตอบสำหรับคำสั่งใด ๆ คอมไพล์รับซื้อคืนใน/home$USERมากกว่าที่ [ .girไฟล์] ใน/home/$USER...
จอร์จ Udosen

ฉันเข้าใจแล้ว ฉันคิดว่าฉันควรเก็บไว้ในโฟลเดอร์แยกต่างหาก หรือ /
Abhishek Divekar

1
@George เพื่อเข้าถึง.gitไดเรกทอรีที่สูงขึ้นในต้นไม้คุณเพียงแค่cdไปที่มันหรือไดเรกทอรีย่อยของมันที่ไม่มี.gitโฟลเดอร์ (ไดเรกทอรีปกติที่เป็น)
cat

2
@ Bhidivekar ถูกต้องมันไม่ได้เป็นปัญหาถ้าผลประโยชน์มีค่ามากกว่าปัญหา แต่มันเป็นพฤติกรรมที่ไม่คาดคิด ไม่ใช่ตัวบล็อก แต่เป็นข้อแม้
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/shadow) ใน repo คอมไพล์ที่คุณควรให้แน่ใจว่ามันไม่สามารถอ่านได้โดยผู้ใช้ทั้งหมดตั้งแต่เริ่มต้นโดยวัตถุที่จะได้รับอนุญาตและไดเรกทอรีจะได้รับสิทธิ์ที่444 0755คุณสามารถเปลี่ยนการอนุญาตของ.gitเป็น 700หรือใส่ไว้ใน/root

ปัญหาอีกประการหนึ่งคือคอมไพล์ไม่ได้จัดเก็บสิทธิ์การใช้งานไฟล์เช่นระบบไฟล์และไม่เก็บคุณสมบัติเพิ่มเติม สำหรับไฟล์ git จะเก็บเฉพาะว่าสามารถใช้งานได้หรือไม่ ดังนั้นหากคุณต้องการที่จะเรียกคืนไฟล์ที่ถูกลบเจ้าของและกลุ่มของมันจะเป็นราก (ถ้าคุณทำมันเป็น root) และได้รับอนุญาตของมันจะถูกหรือ644 755อาจเป็นปัญหาสำหรับไฟล์กำหนดค่าของบริการที่เจ้าของไม่ได้รูท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.