Я хотел бы иметь один центральный репозиторий git для всех репозиториев etckeeper .git моих серверов. Вот предлагалось использовать файл в /etc/etckeeper/commit.d, который в основном выглядит так, предполагая, что репозиторий git был настроен в somedir на каком-то хосте:
#!/bin/sh
cd /etc
git push faruser@farhost:somedir
Проблема в том, что было бы неплохо иметь все серверы в одном репо на центральном сервере. Я попытался
git push faruser@farhost:somedir/server1
но это не удалось.
Как видите, я никогда раньше не работал с git ... Мы очень ценим любые идеи о том, как это можно сделать :)
Привет,
Андреас
В дополнение к хорошему ответу от pjz, вот как это можно сделать, шаг за шагом:
Создайте файл /etc/etckeeper/commit.d/60-push (не забудьте выполнить команду chmod + x it) на клиентах.
#!/bin/sh
git push central_server:/var/git/client_name.git master
central_server определяется в конфигурации ssh, см. ниже. /var/git/client_name.git - это каталог на центральном сервере, содержащий репозиторий git.
~ / .Ssh / config от root (!) Должен содержать что-то вроде этого:
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
Затем вам нужно запустить репозиторий git на central_server
mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init
Протестируйте его с помощью небольшого изменения в / etc, а затем выполните фиксацию etckeeper "test push'ing".
Я понимаю, что вам нужно центральное место со всей вашей конфигурационной информацией, но вы, вероятно, хотите, чтобы они по-прежнему были отдельными репозиториями, просто в центре. Для этого узнайте, как отправлять сообщения в удаленные места в git (используя git push). Затем вам необходимо настроить доступ к этому местоположению со всех ваших серверов, после чего вы можете нажать со всех из них. В этот момент предложение, на которое вы указали, должно работать.
Вы должны настроить удаленный хост таким образом, чтобы локальному пользователю (я использую root, поскольку вы используете etckeeper) было разрешено отправлять данные в удаленный репозиторий. Как это сделать, зависит от того, как вы хотите, чтобы ваши git-репозитории на удаленном сайте были опубликованы / доступны. Например, при использовании git через ssh вы, скорее всего, настроите пару sshkey без парольной фразы и, следовательно, разрешите локальному корню входить в систему на удаленной стороне без вмешательства (keyoard -, ...). И да, при отправке на удаленный сайт репозиторий должен существовать, поэтому должно быть как минимум пустое репо. Итак, сначала сообщите нам точную ситуацию, с которой вы работаете, и точную ошибку, которую вы получаете.
Я думаю, что первоначальный вопрос заключается в том, как нажимать на разные ветки в одном репо. Один из способов заархивировать это - использовать синтаксис:
git push faruser@farhost:somedir master:server1
Это переместит локальную ветвь master в удаленную ветку server1. У вас могут быть варианты, например:
git push faruser@farhost:somedir master:auto/$(hostname)
Несколько замечаний:
поскольку все ветки не имеют общего предка, вам, возможно, понадобится --force для первого коммита
по той же причине в удаленном репо вы увидите n линейно независимых историй. В частности, вам будет нелегко увидеть общую часть вашей ветки. Идея для проекта: возьмите несколько веток git, создайте новые для совместного использования общего обновления и убедитесь, что состояние в начальных коммитах также присутствует в переписанных коммитах (т.е. переписать историю, добавив коммит / слияние / ... но обязательно посмотрите состояние начальных коммитов)
По крайней мере, в 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 он должен работать из коробки