如何通过git在中央服务器上存储etckeeper存储库

我想有一个中央的Git仓库所有我的服务器的etckeeper .git回购。 这里的build议是在/etc/etckeeper/commit.d中使用一个文件,基本上看起来像这样,假设在某个主机的某个目录中已经build立了一个git repo:

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

这样做的问题在于,将所有服务器放在中央服务器上的相同回购站点上真的很不错。 我试过了

 git push faruser@farhost:somedir/server1 

但失败了。

正如你所看到的,我从来没有使用GIT之前…任何想法如何可以完成是非常感谢:)

干杯,

安德烈亚斯

我可以理解想要一个中心的地方与你所有的configuration信息,但你可能希望他们仍然是他们自己的独立的存储库,只是在一个中央位置。 要做到这一点,查找如何推送到git远程位置(使用git push )。 然后,您需要从所有服务器设置对该位置的访问权限,此时您可以从所有服务器中进行推送。 在这一点上,你指出的build议应该起作用。

除了来自pjz的好的答案之外,下面是它是如何完成的,一步一步的:

在客户端上创build文件/etc/etckeeper/commit.d/60-push(不要忘了chmod + x it)。

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

central_server在ssh config中定义,见下文。 /var/git/client_name.git是中央服务器上的目录,包含git仓库。

根(!)的〜/ .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 repo

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

用/ etc中的小编辑testing它,然后etckeeper提交“testing推送”。

你必须设置远程主机是这样的,本地用户(我asume根,因为你使用etckeeper)被允许推送到远程存储库。 如何做到这一点取决于你希望你的远程站点上的git-repos发布/可用的方式。 例如,当通过ssh使用git时,很可能会设置一个没有密码的sshkey对,因此允许本地root在reomteside中login(keyoard – ,…)ineraction。 是的,当推送到远程站点时,存储库必须是存在的,所以至less必须存在空的回购站。 所以首先告诉我们你正在使用的确切情况以及你得到的确切的错误。

我认为最初的问题是如何推动同一回购协议中的不同分支机构。 一种存档方式是使用语法:

 git push faruser@farhost:somedir master:server1 

这将推动本地“主”分支到远程“server1”分支。 你可以有这个变化,例如:

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

几点评论:

  1. 因为所有分支都没有共同的祖先,所以你可能需要一个 – 第一次提交

  2. 出于同样的原因,在远程回购中,您将看到n个线性独立历史logging。 特别是,你不会轻易看到你的各个分支的共同部分。 一个项目的想法:采取几个git分支,创build新的共享更新,并确保在初始提交状态也存在提交重写(即通过添加提交/合并/重写历史logging,但一定要看到初始提交的状态)

至less在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仓库后,它应该开箱即用