所以我想要一个非常简单的git脚本,每10分钟通过cron在github上更新我的存储库,这样我的bug跟踪系统就可以获取这些更改。
在创建所述脚本之前,我做了一个裸克隆,因为这不是一个工作区,它只适用于我们的问题跟踪系统(Redmine)。裸克隆工作得很好,当我们进入问题跟踪器时,我们可以很容易地看到所有提交。
git clone --bare git@github.com:yoyodyne/coolproject.git coolproject.git
我希望通过cron像这样更新这个回购:
#!/bin/sh
export GIT=/opt/bitnami/git/bin/git
cd /var/redmine/git_repositories/coolproject.git && $GIT fetch
&& $GIT reset --soft
但是当cron运行时,不会更新新的提交并返回以下消息:
From github.com:yoyodyne/coolproject
* branch HEAD -> FETCH_HEAD
我之前在其他项目中使用过这种方法并且它完全有效,事实上我使用这种方法作为前一个项目的模板。下面的链接几乎从前到后读过,我仍在拍摄空白。
http://www.redmine.org/projects/redmine/wiki/RedmineRepositories
答案 0 :(得分:3)
我不知道为什么文档建议在裸克隆中执行git reset
,git reset
在裸存储库中无效(即使--soft
实际上没有更改索引或工作树)如果确实有效,那将是no-op。
最简单的方法是设置镜像所有分支和标记的提取规则:
git config remote.origin.fetch +refs/heads/*:refs/heads/*
git config --add remote.origin.fetch +refs/tags/*:refs/tags/*
然后,一个简单的git fetch
将从远程存储库更新此克隆的所有分支和标记,其方式与使用git clone --bare --mirror
设置的方式类似。
答案 1 :(得分:1)
您正在处理裸存储库。不要使用重置。 Git checkout ref - 。会更好。那个或git档案。
如果指定工作树和git repo,则可以使用reset。这是设置环境变量的替代方法。 git命令本身提供了这些选项。
答案 2 :(得分:1)
所以我做了大量的搜索,我发现这是一篇关于裁判不起作用的模糊帖子。
https://github.com/koppen/redmine_github_hook/issues/10
#!/bin/sh
export GIT=/opt/bitnami/git/bin/git
cd /var/redmine/git_repositories/welocally-places.git &&
$GIT fetch origin '+refs/heads/*:refs/heads/*' && $GIT reset --soft
我改变了我的剧本并且它奏效了,唯一可悲的是我觉得自己像是一只模仿奇怪无毛猿的猴子。
答案 3 :(得分:0)
你想用
git clone --mirror
而不是--bare repo for git -fetch可以按你的意愿工作