web-dev-qa-db-ja.com

「ドットファイル」をバージョン管理する方法

Etckeeper は、/etcの設定ファイルへの変更を追跡するための優れたツールです。それに関するいくつかの重要なことは本当に際立っています。 git、Mercurial、darcs、bzrなど、さまざまなVCSで使用できます。また、毎日、およびパッケージをインストール、削除、またはアップグレードするたびに自動コミットを行います。また、ファイルのアクセス許可とユーザー/グループの所有権のメタデータも追跡します。

また、ホームディレクトリの「ドットファイル」もバージョン管理下に置きたいと思います。できればBazaarです。 etckeeperのようなツールがこの目的のために存在するかどうかは誰にもわかりますか?

最悪の場合は、bzr add && bzr ci~/Documentsなどを~/Musicに追加するとともに、.bzrignoreを1日に1回または2回実行する単純なcronジョブが、スクリプト?

私はBazaarを好むが、他のオプションは興味深いかもしれない。

30
andrewsomething

私はこれを行う何かがあるかどうかわからなかったので、ここで私のリポジトリを使用してあなたが望むものを正確に達成するためにいくつかのコードをホイップしました: http://github.com/robertmassaioli/config-files

すべてのファイルが属する場所を示すファイルがあり、generate_linksプログラムはそれらをすべてそこに配置します。あなたが何をしているかを知っていて、Haskellコードをコンパイルできるなら、それは本当に簡単で簡単です。それは本当に私自身の個人的な使用のために作られたことに注意してください。

7

さて、私は先に進み、より良い解決策を見つけるまで手動でこれを行いました。それで、私がやったことを説明することもできます。

最初にbzr init ~をしましたが、次にしたことはbzr ignore "*"でした。私はすべてをバージョン管理下に置きたくないと決めました。特に価値がありませんでした。特に、キーのようなvcに保存してはならないものがいくつかあると考えている場合はそうです。そのため、必要な特定のファイルを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
3
andrewsomething

私は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://[email protected]: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

例えば。

ドットダーを管理する必要がある場合は、多少の作業が必要になりますが、それらをすべて同じディレクトリに配置したり、アクティビティ(すべてのグラフィカルエディターで、 Webアクティビティ…)など。とにかく、それは私がやったことなので、ちょうど2セントです:)。

2
tshirtman

~ディレクトリ全体をBazaarリポジトリに変更しました。メタデータの保存は、ホームディレクトリ内のファイルの問題ではありません。すべてが同じアカウントとグループによって所有されており、bzrはすでに実行ビットを保存しています。

「興味深い」ファイルを手動で追加します(たとえば、音楽コレクションやfirefoxキャッシュをバージョン管理下に置きたくありません)が、スクリプトでこれを自動化する場合は、単純なソリューションだと思います選択したディレクトリまたはfindコマンドの出力でbzr add && bzr ciを実行すると、ジョブが実行されます。

2
Riccardo Murri

Etckeeperのような自動ではないソリューションを使用します(手動でコミットする必要があります)が、私にとってはうまくいきました。私が思うほど開発されていませんが、機能します。

GNU Stow に似た独自のユーティリティを作成しました。stowは必要なことをすべて実行しなかったためです。 Stow in Home と呼びます。実行されると、「HOME」という名前のディレクトリを探します。次に、そのディレクトリの下にあるすべてのものを取得し、$ HOME内の対応する場所にシンボリックリンクし、必要に応じてディレクトリを作成します。また、ファイル名を変換します-ファイルが「_」で始まる場合、「。」に置き換えられます。ドットファイルが非表示になっていない場合は、ドットファイルを編集するのに適しているため、これを行いました(既定ではディレクトリ一覧に表示されます)。次に、アプリケーションが期待する名前にそれらを配置します。

それで、私は自分の設定のためにいくつかのgitリポジトリを持っています。私が個人的に編集したドットファイルのみを入れます。この利点は、他の人(私のEmacs設定など)と共有できるドットファイル用のリポジトリと、プライベートな他の人(仕事用のホスト名などのssh設定など)用のリポジトリがあることです。 stow-in-homeとのシンボリックリンクはすべてを適切な場所に配置しますが、それぞれのソース管理は別々にすることができます。

私にとってはうまくいきました。コミットを自動的に行うための何かを設定できなかった理由は本当にありません。または、すべてのドットファイルを適切なリポジトリに移動し、ホームでストウを使用します。しかし、これは私が物事をやった方法です。

1

Etckeeperで使用されるリポジトリにdot filesを追加できませんか?

0
txwikinger

ソース管理下に置いておきたいすべてのドットファイルを、/ home /ディレクトリの「ドットファイル」というフォルダーにコピーすることで、これを実行しました。もちろん、これは必要に応じて複製を保持し、前後にコピーすることを意味しますが、私はこれが自分にとって最も簡単な解決策だと思います。

0
Derek

ファイルをサブディレクトリに保存し、シンボリックリンクを作成します。これを自動化するスクリプトがあります。 http://code.google.com/p/samking-config-files/source/browse/ ですべて確認できます。

0
Sam King