我使用Gentoo Linux,它的配置相当复杂。我的问题是,使用git进行版本控制我的配置文件是否明智?
我家里有一些git仓库,我猜如果我将./home/**放在我的.gitignore中,它们不会引起问题。
澄清更新:
使用git对“ /”根目录中的系统级配置文件进行版本控制是一种明智的方法吗?
我使用Gentoo Linux,它的配置相当复杂。我的问题是,使用git进行版本控制我的配置文件是否明智?
我家里有一些git仓库,我猜如果我将./home/**放在我的.gitignore中,它们不会引起问题。
澄清更新:
使用git对“ /”根目录中的系统级配置文件进行版本控制是一种明智的方法吗?
Answers:
您的问题的简短答案是。
我会毫不犹豫地推荐Git(或任何其他版本控制软件)来跟踪配置文件。从那时起,我的工作效率提高了(特别是在配置新安装时),并对我的配置文件更加自信。版本控制,我的记录是什么进行了更改,并提交信息提供了理由为什么进行了更改。如果更改有意想不到的副作用,我可以轻松查看日志/历史记录以查看是什么更改导致了副作用。
就个人而言,我会小心跟踪/
根目录下的所有文件。要忽略的路径列表可能会变得庞大而笨拙。我更喜欢将每个逻辑文件集保留在自己的存储库中。
我手动使用Git跟踪我的个人配置/启动文件,例如Vim配置,Bash函数,别名等–类似于如何使用git跟踪$ HOME中列出的方法。我将每组文件保存在各自的存储库中,并使用指向主目录的符号链接。
对于系统配置文件,我使用的Git与Etckeeper跟踪文件在我的/etc
目录中。
要提防的一个问题是,被跟踪的文件是否包含硬链接。当使用Git检出文件或以其他方式修改工作树时,它将取消链接文件,然后重新创建它们。有关更完整的说明,请参见Git,Dotfiles和Hardlinks。
Etckeeper可用于保留对/ etc所做更改的完整历史记录。它跟踪版本控制系统通常不支持的文件元数据,但是对于元数据来说很重要/etc
,例如的权限/etc/shadow
。
它挂接到apt和yum之类的程序包管理器中,并(在其默认配置下)在安装前和安装后运行,以便对所有更改进行/etc
跟踪。
如果安装或删除了软件包,则/ etc中所有未提交的更改将在软件包操作之前进行提交,因此有两次提交:
我已经在基于Debian和Red Hat的发行版中使用了它,并且我知道它支持Arch软件包管理。我不能说它会给Gentoo系统增加多少自动化,但是有一个可用的软件包。
它还支持将配置文件推送到远程存储库 (当然应该是私有的)。
安装软件包后,您可能需要对其进行配置(/etc/etckeeper/etckeeper.conf
),例如,在Ubuntu系统上,默认版本控制系统已从Git更改为Bazaar。您可能还想禁用每日自动提交功能。
日常cron作业可以自动进行更改。这可能会很烦人,因为存储库可能会被多个自动提交消息弄得一团糟。
我在/etc/etckeeper/etckeeper.conf
以下位置取消注释相应的行:
sed -i '/AVOID_DAILY_AUTOCOMMITS/s|^#* *||' /etc/etckeeper/etckeeper.conf
编辑/etc/.gitignore
以指定任何不应跟踪的文件。
配置后,运行以下命令:
sudo etckeeper init
sudo etckeeper commit "Initial commit"
如果当前目录为etc
,则可以运行常规git
命令,例如,
sudo git status
sudo git log
etckeeper
在日常提交过程中,实际上将首先检查是否/etc
“不干净”,即它是否包含未提交的文件。如果没有,它将不会提交。因此,如果您的提交日志中充满了每日提交,则有可能每天都有文件更改,您尚未将其添加到.*ignore
文件中:-)
bzr init
--__--的令人讨厌的趋势,我建议安装后始终运行etckeeper uninit -f
。
我使用git跟踪主目录的特定区域。就个人而言,我不会沿着跟踪根目录的路径前进,但是我必须说,我钦佩您的野心。:)
也许这一系列的经验可以使您更好地了解所学的内容:
为“答案”道歉,而不仅仅是在评论中添加链接;但是,代表人数不足,但希望能引起关注。
编辑
哇!@AnthonyGeoghegan的回答很好。我相信这并没有我最初设想的那样麻烦。