git fetch && git reset - софт не обновляет коммиты - PullRequest
3 голосов
/ 14 января 2012

Итак, я хочу, чтобы очень простой скрипт git обновлял мой репозиторий на github через cron каждые 10 минут, чтобы моя система отслеживания ошибок могла воспринимать эти изменения.

Перед созданием упомянутого сценария я сделал голое клонирование, потому что это действительно не рабочее пространство, оно предназначено только для нашей системы отслеживания ошибок (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 ]

3 голосов
/ 15 января 2012

Я понятия не имею, почему в документации рекомендуется делать 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 голос
/ 15 января 2012

Итак, я проделал тонну поиска и обнаружил, что это неясное сообщение о том, что ссылки не работают.

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

Я изменил свой сценарий, и он сработал, единственное, что печально, я чувствую себя обезьяной, которая подражает странным безволосым обезьянам.

1 голос
/ 14 января 2012

Вы имеете дело с пустым хранилищем.Не используйте сброс.Git Check Ref.было бы лучше.Это или мерзавец архив.

Вы могли бы использовать сброс, если указали рабочее дерево и git-репо.Это альтернатива настройке переменных среды.Эти опции доступны в самой команде git.

0 голосов
/ 01 октября 2012

вы хотите использовать

git clone --mirror

вместо --bare repo, чтобы git -fetch работал так, как вы хотите

...