问题描述
因此,我主要将Git用于开发目的,但我只是意识到可以将其用于存储我在Ubuntu安装中拥有的设置文件的版本。
我建议的设置是:
-
git init
位于/
的存储库 -
在
/
处添加一个.gitignore
,它会忽略除我要跟踪的特定设置以外的所有文件。例如,
.gitignore
可以包含(source):## Ignore everything... * ## Except... !/etc/default/tlp !/etc/crontab
-
每当我更改这些低级设置时,我都可以对其进行跟踪。
此设置有什么问题吗?内核是否总是需要/
才能仅具有某些文件夹?它会破坏任何应用程序的功能吗?
最佳回答
这两个问题的答案都为否,您可以在/
中创建所需的任何目录。唯一可能发生的事情是我猜想某些空间路径的权限问题。
但是最好将.git
目录存储在其他位置,如下所示:
git --git-dir=/home/user/backup-root --work-tree=/
读取here。
次佳回答
实际上,您可能希望对/etc/
中的配置文件进行版本控制(您不必关心根目录/
的条目,尤其是proc
或usr
或/
中的bin
之类的目录),因此您可能需要安装etckeeper
软件包
您还可以版本控制某些选定的子目录(例如您提到的/usr/share/applications/
)。
但是,请不要与Ubuntu package management系统混为一谈。也许您大多数时候应该备份当前已安装软件包的列表。
第三种回答
在/中有一个git repo可以很好地工作,除了它确实使您很难注意到当您有一个较低级别的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>
请注意,chromium-browser的包装方式不正确,并且在打包文件列表中列出了一个不存在的文件。
/var/lib/dpkg/info/chromium-browser.list
这将使用dpkg数据,并避免了较大的/.git目录和工作流程。
第四种回答
因此,我一直在探索其他答案,并且找到了适合我的程序:
-
在
/
处创建.gitignore
。由于Git处理子文件夹中的白名单文件的方式,这比我想象的要复杂得多。我使用this和this链接来帮助我。## Source: https://stackoverflow.com/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 .
到目前为止,我无法使用link mentioned by @Ravexina将.git/
文件夹存储在另一个目录中。 -
运行
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
跟踪更改。有关此here的更多讨论。