当前位置: 首页>>技术教程>>正文


如何让“dot files”保持版本控制?

, , , , ,

问题描述

Etckeeper是一个很好的工具,用于跟踪/etc中配置文件的更改。关于它的一些关键事项确实很突出。它可以与各种VCS一起使用:git,mercurial,darcs或bzr。它还会每天自动提交,无论何时安装,删除或升级包。它还跟踪文件权限和用户/组所有权元数据。

我还想将我的”dot files”保留在我的主目录下的版本控制下,最好是bazaar。有没有人知道像etckeeper这样的工具是否存在?

最糟糕的情况是,我想一个简单的cron工作每天运行bzr add && bzr ci一次或两次,同时将~/Documents~/Music等添加到.bzrignore任何已经用脚本做类似事情的人?

虽然我更喜欢集市,但其他选择可能会很有趣。

最佳解决办法

我不知道是否有任何事情可以做到这一点所以我掀起了一些代码来实现你想要的东西在这里:http://github.com/robertmassaioli/config-files

我有一个文件说明所有文件都属于哪里,而generate_links程序只是将它们放在那里。如果您知道自己在做什么并且可以编译一些Haskell代码,那么它非常简单易行。虽然被警告说它确实是为了我自己的个人用途。

次佳解决办法

好吧,我继续手动完成,直到找到更好的解决方案。所以我不妨解释一下我做了什么。

首先我做了一个bzr init ~,但接下来我做的是bzr ignore "*"。我决定不想让整个版本控制在版本之下。它只是不值得,特别是当你认为那里有一些你真的不应该像你的钥匙一样保存在vcs中的东西。所以我不得不向bzr add提供我想要的特定文件。您还可以向.bzrignore添加例外。 Python正则表达式也很有用。我现在保持相当苗条。如果一切顺利,我也可以添加所有~/.config~/.gconf

我还写了一个快速脚本,我作为一个cron工作运行。它检查文件是否已更改,如果是,则自动提交:

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit

第三种解决办法

我将整个~目录转换为Bazaar存储库。存储元数据不是主目录中文件的问题:所有内容都归同一个帐户和组所有,而bzr已经存储了执行位。

我手动添加”interesting”文件(我不想,例如,我的音乐收藏或firefox缓存受版本控制),但如果你想用脚本自动化这个,我认为这是做bzr add && bzr ci的简单解决方案在选定的目录或find命令的输出上只需要完成这项工作。

第四种办法

我将zsh和vim文件保存在git中,放在github上,放在不同的存储库中:

例如,对于zsh,我创建了”.zsh”并将zshrc和zshenv放入其中,另外还有一个脚本将zshrc链接到〜/.zshrc并将zshenv链接到〜/.zshenv,就像这样。

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

所以我这样做

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

对于.vim,它几乎是一样的,除了我使用子模块插件,带病原体,所以我在init.sh中添加了

git submodule init
git submodule update

当我想添加一个vim插件时,我这样做

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

例如。

好吧,如果您想要管理多个点目录,则需要做太多工作,但没有什么可以阻止您将它们全部放在同一个目录中,或者通过活动分开(对于所有图形编辑器,一个用于网络活动……)左右。无论如何,这就是我做的,所以只是我的两分钱:)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/3069.html,未经允许,请勿转载。