Svn 使用git作为实时镜像
我有本地计算机(A)、测试服务器(B)和存储库服务器(C)。Svn 使用git作为实时镜像,svn,git,rsync,mirroring,Svn,Git,Rsync,Mirroring,我有本地计算机(A)、测试服务器(B)和存储库服务器(C)。 我有以下工作流程: 在计算机上编写代码 将后视镜更改为测试机器B 如果它运行良好,请从B提交到C 目前,我使用rsync进行镜像,但由于存储库不断增长,从B获取文件列表需要一些时间(~10秒)。我想使用Git而不是rsync,因为这样速度会快得多,而且我将拥有存储库C的本地历史记录 问题是我还没有找到任何用git进行实时镜像的方法。我能行 git add . && git commit -m "mirroring" &
我有以下工作流程:
git add . && git commit -m "mirroring" && git push
在本地计算机上,但服务器呢
每隔几秒钟就有一次工作
git checkout | awk '{print $2;}' | git checkout
正确的方法
附言:我是git的新手,也许有更适合这个工作的工具。为正确的工作使用正确的工具。我会使用
unison
或类似的方法来进行镜像
我还将从A而不是B进行提交。因此,您可以跳过在测试环境中镜像.git目录,这将使其更快。然后,您可以留下更多有意义的提交消息,说明更改了什么以及更改的原因。。。我不认为有必要使用镜像工具,git似乎非常适合这样做。 正如fseto所说,我还建议提交A。将更改复制到C应该使用
gitpush
。然后,你需要了解的是,既然B有一个工作树,推动它肯定不是一个好办法。您只能(至少应该)推送到裸存储库(没有工作树的存储库:服务器C上应该有什么)
相反,在B上,您可以从A获取更改(B是A的git克隆)。当然,这可以在cronjob上设置。这将几乎是一个git pull
,除了您希望始终从服务器a反映头
,即使您在a上的分支之间切换、删除提交、分支等。因此,在B上,我将使用以下命令:
git fetch origin ; git checkout origin/HEAD
此命令将警告您,因为它将创建一个“分离头”状态,但这没关系,因为您不想在B上提交
最后,服务器部分:
gitinit--bare创建服务器repo
git远程添加服务器
git-push-server-HEAD:master
。我写这封信是为了表达我的一般性,但你可能想用一个分支来代替希望我的解释可以理解……:) 使用Git的实时镜像可以通过 您可以设置
update
hook,它可以在更新分支后执行操作rigt。在服务器B上设置此连接。每次将更改推送到B
的站点时,都会启动此连接。在这个钩子中,您可以将更改向前推到C
(您应该为其创建一个远程链接)。钩子看起来像这样:
#!/bin/bash
git push remote-of-c $3:$1
[ $? -ne 0 ] && {
echo 'Mirroring failed, check server settings and try again.'
exit 1
}
因此,每次更新B
,C
也会得到更新。如果在推送过程中出现故障,您将在控制台中看到相关消息,并且您的初始推送将不会成功。这就是所谓的“镜像”,不是吗