私はGentoo Linuxを使用していますが、構成はかなり複雑です。私の質問は、設定ファイルをバージョン管理するためにgitを使用するのが賢明ですか?
私の家にはいくつかのgitリポジトリがあります。/home/**を.gitignoreに置いても問題はありません。
明確化の更新:
gitを使用して、「/」ルートディレクトリにあるシステムレベルの構成ファイルをバージョン管理するのは賢明な方法ですか?
私はGentoo Linuxを使用していますが、構成はかなり複雑です。私の質問は、設定ファイルをバージョン管理するためにgitを使用するのが賢明ですか?
私の家にはいくつかのgitリポジトリがあります。/home/**を.gitignoreに置いても問題はありません。
明確化の更新:
gitを使用して、「/」ルートディレクトリにあるシステムレベルの構成ファイルをバージョン管理するのは賢明な方法ですか?
回答:
あなたの質問への短い答えは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つのコミットがあります。
私はこれを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
etckeeper
毎日のコミット中に、実際に/etc
「unclean」、つまりコミットされていないファイルがあるかどうかを最初にチェックします。そうでない場合、コミットしません。したがって、コミットログが毎日のコミットでいっぱいの場合、.*ignore
ファイルに追加していない毎日変更されるファイルがある可能性があります:
bzr init
--__--を実行するという厄介な傾向があります... インストール後に常に実行することをお勧めetckeeper uninit -f
します。
gitを使用して、ホームディレクトリの特定の領域を追跡します。個人的には、ルートディレクトリを追跡する道をたどりませんが、私はあなたの野心を称賛しなければなりません。:)
おそらく、この経験のコレクションは、あなたが何に興味を持ちそうかについてのより良いアイデアをあなたに提供するかもしれません:
Linuxルートディレクトリでのgitリポジトリの初期化の影響3 :)
コメントにリンクを投げるのではなく、「答え」をおologiesびします。しかし、十分な担当者ではありませんが、チャイムに入れたいと思っていました。
編集
うわー!@AnthonyGeogheganによる非常に良い答え。私は、これが当初考えていたほどの苦労ではないと信じています。
私はまた、使用git
保管し、私を維持するdotfiles
が、で、git bare repository
。詳細なガイドはこちらにあります。私は2つのリポジトリを使用しています。1つはユーザーのdotfilesという名前myconf
のファイル用で、もう1つはrootのdotfilesという名前のファイル用rootconf
です。
さらに、多くのマシン、異なるLinuxディストリビューション、または仮想マシンで両方の構成を使用できます。異なる構成の新しいブランチを作成するだけです。次に、同じファイル内でコードを混同しないようにします(例.bash_alias
:)、現在のマシンをもうチェックするかどうか迷惑ではありません。リンクは必要ありません!