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


30

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

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

最悪の場合、私は、単純なcronジョブを実行していることを想像bzr add && bzr ci追加するとともに、1日に1回または2回~/Documents~/Musicになど、.bzrignore すでにスクリプトと似た何かをやって誰ですか?

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


4
Unix Stack Exchangeでの関連議論:〜をソース管理下に置くためのヒント。それはあなたの質問には答えませんが、それでも有用な情報を提供するかもしれません。
ジル 'SO-悪であるのをやめる'

1
現在、このためのツールがたくさんあります。「汎用dotfileユーティリティ」セクションのdotfiles.github.ioを参照してください。
ロビングリーン

@RobinGreenあなたがそれを適切な答えに取り組んだなら、私はそれを受け入れることができます。bzr確かに2015年に行く方法ではありません。
andrewsomething15年

回答:


7

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

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


3
haskellの+1!ハスケルの場合は-1!笑。いいえ、本当に。
デレク

私はあなたを聞く。Haskellを選んだのは、学習しているからです。仕事に最適な言語かもしれないし、そうでないかもしれません。:)
ロバートマサイオリ

3

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

最初にしました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

私はこれを最初に投稿したときに自分の回答を選択しましたが、それを取り消すことにしました。それは確かに2015年のこの質問に対する最善の答えではありません。
andrewsomething

2

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

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


2

私は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

例えば。

OK Webアクティビティ…)など。とにかく、それは私がやったことなので、ちょうど2セントです:)。


1

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

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

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

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


0

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


1
どうすればいいですか?それらのすべてをどこかにシンボリックリンクしますか/etc
andrewsomething

一つの選択肢であるまあ...
txwikinger

0

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


1
重複を管理する代わりに、ドットファイルへのシンボリックリンクを作成できませんでしたか?
ライアン

きっとできると思います!
デレク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.