Abh*_*kar 30 root settings git
所以我主要将 Git 用于开发目的,但我刚刚意识到我可以用它来存储我在 Ubuntu 安装上的设置文件的版本。
我建议的设置是:
git init 回购在 /
添加一个.gitignoreat/忽略除我要跟踪的特定设置之外的任何文件。
例如,.gitignore可以包含(源):
## Ignore everything...
*
## Except...
!/etc/default/tlp
!/etc/crontab
Run Code Online (Sandbox Code Playgroud)每当我更改这些低级设置时,我都可以跟踪它们。
这个设置有什么问题吗?内核是否总是/只需要某些文件夹?它会破坏任何应用程序的功能吗?
Rav*_*ina 39
您的两个问题的答案是否定的,您可以在/. 我猜唯一可能发生的事情是一些空间路径的许可问题。
但是最好将.git目录存储在其他地方,如下所示:
git --git-dir=/home/user/backup-root --work-tree=/
Run Code Online (Sandbox Code Playgroud)
在这里阅读。
Bas*_*tch 19
实际上,您可能想要版本控制配置文件 in /etc/(您不关心根目录的条目/,特别是像procorusr或binin/这样的目录),因此您可能想要安装etckeeper包
您还可以对某些选定的子目录进行版本控制(就像/usr/share/applications/您提到的那样)。
但是,不要弄乱 Ubuntu包管理系统。也许您最应该备份已安装软件包的当前列表。
在 / 中有一个 git repo 工作正常,除了当你有一个较低级别的 git repo 时很难注意到问题,因为它会回答所有问题。
注意:使用'debsums'工作量更少,可能更有用
sudo apt-get install debsums
Run Code Online (Sandbox Code Playgroud)
这将使您能够快速检测二进制文件或配置文件中的(大多数)更改。
此处安装的软件包的示例是与上游软件包不同的软件包。
$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取更改的配置文件列表:
$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
/etc/libvirt/libvirt.conf
<snip>
Run Code Online (Sandbox Code Playgroud)
请注意chromium-browser 是如何打包不当的,并且在包文件列表中列出了一个不存在的文件。
/var/lib/dpkg/info/chromium-browser.list
Run Code Online (Sandbox Code Playgroud)
这会使用 dpkg 数据并避免大型 /.git 目录和工作流。
所以我一直在探索其他答案,我找到了一个对我有用的程序:
做一个.gitignore在/。这比我想象的要复杂得多,因为 Git 处理子文件夹中的白名单文件的方式。我用这个和这个链接来帮助我。
## Source: /sf/answers/2095262291/
## 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
Run Code Online (Sandbox Code Playgroud)转到/并运行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`.
Run Code Online (Sandbox Code Playgroud)与git commit -m "Initial settings files".
您可以使用git log -p -- path/to/file或跟踪更改gitk path/to/file。关于这个的更多讨论在这里。