web-dev-qa-db-ja.com

単一の共有gitリポジトリでetckeeperを使用することは可能ですか?

/ etcディレクトリにバージョン管理を適用するためにetckeeperを使用することを推奨している人が何人かいることに気づきました。

デフォルトのインストールでは、管理しようとしている/ etcと同じマシンにリポジトリが配置されているように見えます。これはバージョン管理には問題なく機能しますが、ファイルのサーバー外バックアップを作成するという追加の利点はありません。または、あるソースマシンから別のソースマシンに/ etcの一部を複製することもできません。

中央管理マシンで単一のgitリポジトリを共有して、各サーバーのetckeeperがデータを同じ場所に保存することは可能ですか?

(私は現在、ファイルをコミットおよび元に戻すためにsvnといくつかのカスタムスクリプトを使用して同様のことを行っていますが、変更を加えるときはそれらをコミットすることを忘れないでください。)

9
Brent

まず、/ etc/etckeeper /etckeeper.confでgit用に構成されたinstalletckeeperを使用します。ディストリビューションまたはソースからのetckeeperのインストール方法に従ってください。

間もなく、/ etc /.gitが作成されます

サーバー上で、プッシュ先の(安全な)リポジトリがあることを確認してください...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

最初のホストで、ローカルリポジトリをssh経由でサーバーにプッシュします。

# cd /etc && git Push faruser@farhost:somedir

もちろん、この場合、Somedirは相対的である可能性があります(ssh規則に従って)

/ etcに影響を与える(そしてetckeeperによって/etc/.gitにスナッフされる)変更を加えるたびにこれを実行すると、マシンのローカルリポジトリとオフマシンリポジトリの両方が作成されます。

または、パスワードなしのsshを設定し、/ etc/etckeeper/commit.d /にフックを作成して、マシンが常に接続されている場合に自動的に発生するようにします。

8
tony godshall

リモートブランチ構成を追加して、etckeeperリポジトリのマスターブランチを各サーバーからリモートリポジトリのブランチにマップすることができます。これを行うには、各サーバーで次のコマンドを実行できます。

cd /etc
git branch -m master $HOSTNAME
git remote add Origin [email protected]:path/to/single/repo.git
git Push -u Origin master:$HOSTNAME

この設定の後、後続のgit Pushは、各サーバーマスターブランチから中央リポジトリの専用サーバーブランチに変更を送信します。

ブランチには共通の開始点はありませんが、これにより、次のコマンドを実行することで、2つの異なるサーバーを表す2つの異なるブランチからの同じファイルを簡単に比較できます。

git diff Origin/server1 Origin/server2 -- file

これは、 jojoo によって提案された自動セットアップと組み合わせることができます。

3
TTT

それは重要ではありません。構成を広く配布したい場合は、各マシンのローカルリポジトリに加えて別のリポジトリを設定し、必要に応じて各マシン cherry-pick をそこから取得します。これにより、各マシンが(実際にはブランチで)逸脱し、リビジョン管理を維持できるようになります。

1
jldugger

それを自動的に行う方法、全文:

ファイル/etc/etckeeper/commit.d/60を作成します-クライアントにプッシュします(chmod + xを忘れないでください)。

#!/bin/sh
git Push central_server:/var/git/client_name.git master

central_serverはssh設定で定義されています。以下を参照してください。 /var/git/client_name.gitは、中央サーバー上のディレクトリであり、gitリポジトリが含まれています。

Root(!)の〜/ .ssh/configには、次のようなものが含まれている必要があります。

Host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

次に、central_serverでgitリポジトリを初期化する必要があります

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

/ etcを少し編集してテストしてから、etckeeperが「testPush'ing」をコミットします。

1
jojoo