[有许多类似的主题(其中许多很老),但我仍然迷失了。我有两台服务器,一台具有gitolite设置,另一台具有redmine设置。用户正在将更改推送到在gitolite服务器上创建的存储库。Redmine是该gitolite服务器上的用户,正在从中进行更改并在浏览器中显示它们。
更确切地说,我在redmine服务器上使用了以下行:
git clone --mirror ssh://gitolite3@gitoliteserver/testing
然后,我将此存储库(testing.git)配置为已知的存储库进行替换-替换只能使用裸存储库和本地存储库。
[当用户推送更改为gitolite服务器时,redmine不会自动让他们看。我必须在redmine服务器上执行以下操作:
cd testing.git
git remote update
我可以在redmine服务器上使用cron来定期更新存储库testing.git。但是许多人说这是低效的,因此建议使用钩子。但是,信息是非常混乱。您能否通过回答cron是否可行的方法来回答我,以及“ git remote update”是此cron的正确命令吗?还是给我一个干净的例子,如何使用钩子解决我的问题。
没有直接联系到这个问题,但是我不得不说。对我来说,非母语的英语,如镜像,镜像,镜像等词都是很难遵循,请使用alice和bob等更简单的术语。甚至“远程”一词也令人困惑,如果我在A上,那么B对我来说是远程的,但是如果我在B上,那么A对我来说就很遥远。因此,很难阅读关于网上的git,事情变得更加复杂事实是,某些解决方案仅是github或bitbucket的变体。
我选择的第一种方法是通过专用插件使用Redmine + Gitolite集成,如下所述:
http://redmine-git-hosting.io/
第二种方法,是您尝试的方法,所以:
通过cron作业或某种其他类型的计划任务拉动更改是合法的事情,但是在提交和cron作业之间存在一些延迟,并且即使在有存储库的情况下也不必要地利用网络和cpu等资源来测试存储库没变化...
为了正确利用给定的资源,推荐的方法是在Redmine和git服务器中使用钩子。
因此,在您的gitolite上,您需要具有接收后钩子,该钩子将执行:
例如,一个git的post-receive钩子看起来像:
#!/bin/bash /usr/bin/sshpass -pPassword ssh -o StrictHostKeyChecking=no user@server 'cd /home/user/repo/ && git pull origin master' curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
用于更新存储库的Redmine Web服务密钥可在管理|设置|存储库选项卡
以下是详细说明我如何应用接受的答案(带有钩子的解决方案)。欢迎任何评论。