使用git进行配置文件版本控制是个好主意吗?


18

我使用Gentoo Linux,它的配置相当复杂。我的问题是,使用git进行版本控制我的配置文件是否明智?

我家里有一些git仓库,我猜如果我将./home/**放在我的.gitignore中,它们不会引起问题。

澄清更新:

使用git对“ /”根目录中的系统级配置文件进行版本控制是一种明智的方法吗?


@AnthonyGeoghegan我想跟踪我的“ /”根目录,这可能会在将来导致有趣的后果,因此链接的线程只能部分回答我的问题。另一部分:使用git进行版本控制以控制我的配置文件是否仍未解决
atevm '16

1
@AnthonyGeoghegan谢谢。我更新了问题。
atevm '16

Answers:


19

您的问题的简短答案


我会毫不犹豫地推荐Git(或任何其他版本控制软件)来跟踪配置文件。从那时起,我的工作效率提高了(特别是在配置新安装时),并对我的配置文件更加自信。版本控制,我的记录是什么进行了更改,并提交信息提供了理由为什么进行了更改。如果更改有意想不到的副作用,我可以轻松查看日志/历史记录以查看是什么更改导致了副作用。

就个人而言,我会小心跟踪/根目录下的所有文件。要忽略的路径列表可能会变得庞大而笨拙。我更喜欢将每个逻辑文件集保留在自己的存储库中。

我手动使用Git跟踪我的个人配置/启动文件,例如Vim配置,Bash函数,别名等–类似于如何使用git跟踪$ HOME中列出的方法。我将每组文件保存在各自的存储库中,并使用指向主目录的符号链接。

对于系统配置文件,我使用的Git与Etckeeper跟踪文件在我的/etc目录中。

缺点

要提防的一个问题是,被跟踪的文件是否包含硬链接。当使用Git检出文件或以其他方式修改工作树时,它将取消链接文件,然后重新创建它们。有关更完整的说明请参见Git,Dotfiles和Hardlinks

守门员

Etckeeper可用于保留对/ etc所做更改的完整历史记录。它跟踪版本控制系统通常不支持的文件元数据,但是对于元数据来说很重要/etc,例如的权限/etc/shadow

它挂接到apt和yum之类的程序包管理器中,并(在其默认配置下)在安装前和安装后运行,以便对所有更改进行/etc跟踪。

如果安装或删除了软件包,则/ etc中所有未提交的更改将在软件包操作之前进行提交,因此有两次提交:

  1. “在运行yum之前在/ etc中保存未提交的更改”
  2. “在运行yum之后在/ 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

1
哇,它非常有用而且非常详细...谢谢:)
atevm '16

只是为了更新一个写得很好的答案:etckeeper在日常提交过程中,实际上将首先检查是否/etc“不干净”,即它是否包含未提交的文件。如果没有,它将不会提交。因此,如果您的提交日志中充满了每日提交,则有可能每天都有文件更改,您尚未将其添加到.*ignore文件中:-)
pepoluan

另外,在Ubuntu上,它具有立即执行bzr init--__--的令人讨厌的趋势,我建议安装后始终运行etckeeper uninit -f
pepoluan '16

注意,etckeeper显然不再托管在github上。他们现在在主页上使用自己的系统。作者方面可能有些反感。我个人认为这是一个不幸的决定,因为您现在无法轻松地报告问题,也看不到该项目的受欢迎程度。
MichaelHärtl18年

感谢@MichaelHärtl,我删除了到GitHub存储库的过时链接。
安东尼G-莫妮卡(Monica)的正义'18

3

我使用git跟踪主目录的特定区域。就个人而言,我不会沿着跟踪根目录的路径前进,但是我必须说,我钦佩您的野心。:)

也许这一系列的经验可以使您更好地了解所学的内容:

初始化git仓库对linux根目录的影响3 :)

为“答案”道歉,而不仅仅是在评论中添加链接;但是,代表人数不足,但希望能引起关注。

编辑

哇!@AnthonyGeoghegan的回答很好。我相信这并没有我最初设想的那样麻烦。


0

我也git用来存储和维护我的dotfiles,但是在一个git bare repository。详细的指南可以在这里找到。我正在使用两个存储库,一个存储库用于用户命名的点文件myconf,另一个存储库用于根目录的点文件rootconf

此外,您可以在许多计算机,不同的Linux发行版或虚拟机上使用这两种配置:只需为不同的配置创建一个新分支。然后,您避免在同一文件中混合代码(例如.bash_alias):不再烦恼是否要检查当前机器;不需要链接!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.