Створення Git repo в / (root) для налаштування відстеження?


28

Тому я використовую Git здебільшого для цілей розробки, але я просто зрозумів, що можу використовувати його для зберігання версій файлів налаштувань, які я маю на моїй установці Ubuntu.

Моя запропонована установка:

  • git init репо в /

  • Додайте .gitignoreat, /який ігнорує будь-які файли, крім певних налаштувань, які я хочу відстежувати.

    Наприклад, .gitignoreможе містити ( джерело ):

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • Щоразу, коли я змінюю ці налаштування низького рівня, я можу їх відстежувати.

Чи є щось, що може піти не так з цією установкою? Чи завжди в ядрі потрібно /мати лише певні папки? Чи це зіпсує роботу будь-яких додатків?


Можливо, вам слід розглянути ~файли налаштувань домашнього каталогу, а не /файли
Майкл Дюррант

1
Старий загальнодоступний сервер grex SunOS мав усі свої rc-файли, і хто знає, що ще є в якомусь старому контролі джерела (не впевнений, це був SCCS або RCS, але, безумовно, старіший за CVS). Я не бачу проблем з цим.
Джошуа

@Mike Durrant: речі на зразок /etc/crontabмого особистого ноутбука, безумовно, мої, але я бачу, що ти маєш на увазі.
Абхішек Дівекар

7
Використовуйте etckeeperта робіть резервні копії.
Відновіть Моніку - М. Шредер

Будьте обережні, щоб не випадково поставити / здійснити ie / dev / sda чи подібне: D
quetzalcoatl

Відповіді:


37

Відповідь на обидва ваші запитання - ні, ви можете створити будь-який каталог, який хочете в /. Єдине, що може статися, - це певні проблеми з дозволом з деякими просторовими шляхами, я думаю.

Однак краще зберігати .gitкаталог деінде, приблизно так:

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

Прочитайте тут .


5
Дуже цікаво, я насправді не знав, що ти можеш це зробити в git! Дякую за пропозицію.
Абхішек Дівекар

Це та сама функція, яка дозволяє відстежувати лише налаштування файлів під / home / user btw. Додавання псевдоніму оболонки додатково робить це дуже зручним.
Даніель Жур

19

На насправді, ви , ймовірно , хочете файли конфігурації управління версіями в /etc/(ви не дбаєте про записи в кореневому каталозі /, в зокрема каталогів , наприклад , procабо , usrабо binв /) , так що ви можете встановити etckeeperпакет

Ви також можете керувати версіями деяких вибраних підкаталогів (таких /usr/share/applications/, як ви згадали).

Однак не морочись із системою управління пакетами Ubuntu . Можливо, вам здебільшого слід створити резервну копію поточного списку встановлених пакетів.


1
Я фактично дбаю про файли, /usr/share/applicationsоскільки я час від часу воюю з ними.
Абхішек Дівекар

6

Маючи репортаж git в / працює чудово, за винятком того, що це важко помітити, коли у вас є git 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>

Зверніть увагу на те, як браузер Chrome невірно упакований та має файл, вказаний у списку файлів пакунків, який не існує.

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

Це використовує дані dpkg і уникає великого каталогу /.git та робочого процесу.


Чи можете ви пояснити, "окрім того, що це важко помітити, коли у вас є git repo нижчого рівня з проблемами, оскільки він відповість на всі вони". трохи більше? Я не розумію, як це може спричинити проблеми, якщо .gitignore відстежує лише кілька файлів.
Абхішек Дівекар

2
Я вважаю, що @abhidivekar OP говорить, коли ви створюєте ще один git repo in say, /home/$USERтоді .gitin /відповість за будь-яку команду git, надану для repo, /home$USERа не за цей [ .girфайл] у /home/$USER...
George 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/shadow) у git repo, вам слід переконатися, що вони не читаються всіма користувачами, оскільки за замовчуванням об’єкти матимуть дозвіл, 444а каталоги матимуть дозвіл 0755. Ви можете змінити дозвіл .gitна 700або розмістити його/root

Інша проблема полягає в тому, що git не зберігає дозволи файлів, як файлова система, і він не зберігає розширені атрибути. Для файлів git зберігає лише те, чи вони виконуються. Отже, якщо ви хочете відновити видалений файл, його власник і група будуть root (якщо ви це робите як root), а його дозвіл буде 644або 755. Це може бути проблематично для файлів конфігурації служб, власник яких не має root.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.