git fetch&& git reset --soft不更新提交

时间:2012-01-14 16:55:25

标签: git redmine

所以我想要一个非常简单的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

http://gitref.org/remotes/

4 个答案:

答案 0 :(得分:3)

我不知道为什么文档建议在裸克隆中执行git resetgit 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可以按你的意愿工作