web-dev-qa-db-ja.com

gitを介して中央サーバーにetckeeperリポジトリを保存する方法

すべてのサーバーのetckeeper.gitリポジトリ用に1つの中央gitリポジトリが必要です。 ここ 提案は/etc/etckeeper/commit.d内のファイルを使用することでした。これは、gitリポジトリがsomehostのsomedirに設定されていると仮定すると、基本的に次のようになります。

#!/bin/sh
cd /etc
git Push faruser@farhost:somedir

これに伴う問題は、中央サーバーの同じリポジトリにすべてのサーバーがあると非常に便利なことです。私は試した

git Push faruser@farhost:somedir/server1

しかし、それは失敗しました。

ご覧のとおり、私はこれまでgitを使用したことがありません...これを実現する方法についてのアイデアは大歓迎です:)

乾杯、

アンドレアス

7
andreas-h

すべての構成情報を含む中央の場所が必要なことは理解できますが、中央の場所にある独自の個別のリポジトリである必要があります。これを行うには、gitでリモートの場所にプッシュする方法を検索します( git Push を使用)。次に、すべてのサーバーからその場所へのアクセスを設定する必要があります。その時点で、すべてのサーバーからプッシュできます。その時点で、あなたが指摘した提案は機能するはずです。

2
pjz

Pjzからの良い答えに加えて、これがどのように行われるかを段階的に説明します。

ファイル/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」をコミットします。

3
jojoo

リモートホストは、ローカルユーザー(etckeeperを使用する場合はrootと見なされます)がリモートリポジトリにプッシュできるように設定する必要があります。これを行う方法は、リモートサイトのgit-reposを公開/利用可能にする方法によって異なります。たとえば、ssh経由でgitを使用する場合、パスフレーズなしでsshkey-pairをセットアップする可能性が高いため、ローカルルートが(keyoard-、...)を操作せずにreomtesideにログインできるようにします。はい、リモートサイトにプッシュするときは、リポジトリが存在している必要があるため、少なくとも空のリポジトリが存在している必要があります。ですから、最初にあなたが取り組んでいる正確な状況とあなたが得ている正確なエラーを教えてください。

2
m.sr

最初の質問は、同じレポ内の異なるブランチにプッシュする方法だと思います。これをアーカイブする1つの方法は、構文を使用することです。

git Push faruser@farhost:somedir master:server1

これにより、ローカルの「master」ブランチがリモートの「server1」ブランチにプッシュされます。これには、次のようなバリエーションがあります。

git Push faruser@farhost:somedir master:auto/$(hostname)

いくつかの意見:

  1. すべてのブランチに共通の祖先があるわけではないため、最初のコミットには--forceが必要になる可能性があります

  2. 同じ理由で、リモートリポジトリでは、n個の線形独立履歴が表示されます。特に、さまざまなブランチの共通部分を簡単に確認することはできません。プロジェクトのアイデア:いくつかのgitブランチを取得し、新しいブランチを作成して共通の更新を共有し、最初のコミットの状態が書き換えられたコミットにも存在することを確認します(つまり、commit/merge/...を追加して履歴を書き換えますが、必ず確認してください初期コミットの状態)

1
Vincent

少なくともdebianでは、etckeeper.confにオプションがあります。

...
# To Push each commit to a remote, put the name of the remote here.    
# (eg, "Origin" for git).
Push_REMOTE="Origin"
...

リモートをgitリポジトリに手動で追加した後、箱から出して動作するはずです

0
tonymarschall