構成ファイルのバージョン管理にgitを使用することをお勧めしますか?


18

私はGentoo Linuxを使用していますが、構成はかなり複雑です。私の質問は、設定ファイルをバージョン管理するためにgitを使用するのが賢明ですか?

私の家にはいくつかのgitリポジトリがあります。/home/**を.gitignoreに置いても問題はありません。

明確化の更新:

gitを使用して、「/」ルートディレクトリにあるシステムレベルの構成ファイルをバージョン管理するのは賢明な方法ですか?


@AnthonyGeogheganリンクされたスレッドが私の質問に部分的にしか答えないように、将来的に興味深い結果につながる可能性のある「/」ルートディレクトリを追跡したいと思います。他の部分:まだ答えられていない設定ファイルをバージョン管理するためにgitを使用するのが賢明ですか
atevm

1
@AnthonyGeogheganありがとう。質問を更新しました。
atevm

回答:


19

あなたの質問への短い答えはYesです。


構成ファイルを追跡するために、Git(または他のバージョン管理ソフトウェア)を推奨することをheしません。そうして以来、私は(特に新規インストールの構成に関して)生産性が向上し、構成ファイルに大きな自信を持ちました。バージョン管理では、私はのレコードを持っているどのような変更が行われたが、メッセージが理由を提供コミットなぜ変更が行われたが。変更に意図しない副作用がある場合、ログ/履歴を簡単に確認して、どの変更が影響を引き起こしたかを確認できます。

個人的には、/ルートディレクトリの下にあるすべてのファイルを追跡することに注意してください。無視するパスのリストは大きくなり、扱いにくくなる可能性があります。ファイルの各論理セットを独自のリポジトリに保持することを好みます。

Gitを手動で使用して、Vim設定、Bash関数、エイリアスなどの個人設定/起動ファイルを追跡します。これは、gitで$ HOMEを追跡する方法に記載されているアプローチと同様です。各ファイルセットを独自のリポジトリに保持し、ホームディレクトリへのシンボリックリンクを使用します。

システム構成ファイルについては、GitとEtckeeperを使用して、/etcディレクトリ内のファイルを追跡します。

欠点

注意すべき問題の1つは、追跡対象のファイルにハードリンクが含まれているかどうかです。Gitは、ファイルをチェックアウトするか、そうでない場合は作業ツリーを変更するために使用された場合は、ファイルのリンクを解除し、それらを再作成します。詳細については、Git、Dotfiles、およびハードリンクを参照してください。

エッチキーパー

Etckeeperは、/ etcに加えられた変更の完全な履歴を保持するために使用できます。リビジョン管理システムでは通常サポートされていないファイルメタデータを追跡しますが、これは/etcの権限など、重要です/etc/shadow

aptやyumなどのパッケージマネージャーにフックし、(既定の構成では)インストール前とインストール後を実行するため、すべての変更/etcが追跡されます。

パッケージがインストールまたは削除された場合、/ etc内のコミットされていない変更はすべてパッケージ操作の前にコミットされるため、2つのコミットがあります。

  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

非常によく書かれた答えを更新するためetckeeper毎日のコミット中に、実際に/etc「unclean」、つまりコミットされていないファイルがあるかどうかを最初にチェックします。そうでない場合、コミットしません。したがって、コミットログが毎日のコミットでいっぱいの場合、.*ignoreファイルに追加していない毎日変更されるファイルがある可能性があります:
pepoluan

また、Ubuntuでは、すぐにbzr init --__--を実行するという厄介な傾向があります... インストール後に常に実行することをお勧めetckeeper uninit -fします。
ペポルアン

etckeeperは明らかにgithubでホストされていないことに注意してください。現在、彼らはホームページで独自のシステムを使用しています。おそらく著者の側にあるM $嫌悪感。個人的には、問題を簡単に報告することはできず、プロジェクトの人気を見ることができないという不幸な決断をしたと思います。
マイケルハートル

ありがとう、MichaelHärtlGitHubリポジトリへの古いリンクを削除しました。
アンソニーG-モニカの正義

3

gitを使用して、ホームディレクトリの特定の領域を追跡します。個人的には、ルートディレクトリを追跡する道をたどりませんが、私はあなたの野心を称賛しなければなりません。:)

おそらく、この経験のコレクションは、あなたが何に興味を持ちそうかについてのより良いアイデアをあなたに提供するかもしれません:

Linuxルートディレクトリでのgitリポジトリの初期化の影響3 :)

コメントにリンクを投げるのではなく、「答え」をおologiesびします。しかし、十分な担当者ではありませんが、チャイムに入れたいと思っていました。

編集

うわー!@AnthonyGeogheganによる非常に良い答え。私は、これが当初考えていたほどの苦労ではないと信じています。


0

私はまた、使用git保管し、私を維持するdotfilesが、で、git bare repository。詳細なガイドはこちらにあります。私は2つのリポジトリを使用しています。1つはユーザーのdotfilesという名前myconfのファイル用で、もう1つはrootのdotfilesという名前のファイル用rootconfです。

さらに、多くのマシン、異なるLinuxディストリビューション、または仮想マシンで両方の構成を使用できます。異なる構成の新しいブランチを作成するだけです。次に、同じファイル内でコードを混同しないようにします(例.bash_alias:)、現在のマシンをもうチェックするかどうか迷惑ではありません。リンクは必要ありません!

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