LINUX.ORG.RU

[git] Синхронизация репов перекрытием post-receive


0

1

Есть /var/spool/gitosis/repositories/repo1.git
Пустой.
Есть также /var/spool/gitosis/non-bare-repos/repo1, который является клоном того пустого.
А надо чтобы при push с удалённой машины в пустой repo1 изменения отправлялись и накладывались на непустой. Вот тут показан пример, но `git checkout -f` не обновляет дерево, даже если вызывать просто из командной строки. Из командной строки прекрасно работают `git fetch` && `git merge` равно как и `git pull`, но при pull из хука гит говорит, что нельзя вызывать pull без рабочего дерева, при этом он полностью игнорирует и GIT_WORK_TREE, и --work-tree и GIT_DIR.
Подозреваю, что перед выполнением хука прочёлся каталог пустого репозитория, pull в который и правда сделать нельзя. Это единственное объяснение, которое я нахожу.

Содержимое /var/spool/gitosis/repositories/repo1.git/hooks/post-receive

log=/var/log/gitosis.log
non-bare=/var/spool/gitosis/non-bare-repos/repo1
echo -n '['`date +%d\ %b\ %Y\ %H:%M:%S`'] ' >> $log
#GIT_WORK_TREE=$non-bare \      # fatal: Not a git repository: '/var/spool/gitosis/non-bare-repos/repo1
git fetch origin 2>> $log && \  # fatal: 'origin' does not appear to be a git repository
git merge origin 2>> $log       # fatal: The remote end hung up unexpectedly
#git pull                       # fatal: /usr/libexec/git-core/git-pull cannot be used without a working tree.
#git reset --soft refs/remotes/origin/master 2>> $log

=== upd ===

Внезапно, при попытке сделать push из удалённого репозитория в пустой repo1 поймал ошибки

remote: hooks/post-receive: line 18: non-bare=/var/spool/gitosis/non-bare-repos/repo1: No such file or directory
remote: hooks/post-receive: line 20: cd: -b: invalid option
remote: cd: usage: cd [-L|-P] [dir]

Deleted

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.