Во-первых, большая картина: я пытаюсь написать git post-receive script для сервера Redmine/Gitolite, на котором я запущен. В соответствии с различными рекомендациями я создаю голый и локальный репозиторий для Redmine для чтения, и я настраиваю post-receive script на Gitolite, чтобы вносить изменения в репозиторий Redmine.
Тем не менее, я очень noobish с Git, поэтому я не могу даже выполнить простую задачу здесь > _ <. Я думаю, что если я это выясню, я смогу написать выше script. После настройки моего тестового репо я создал два репозитория в качестве теста.
( "Центральный репо" - это хранилище Gitolite на git @localhost: testing)
cd /tmp
mkdir /tmp/test
$ git clone [email protected]:testing
$ git clone [email protected]:testing testing2
$ git clone [email protected]:testing --bare
Теперь, когда я запустил ls:
$ ls
testing testing2 testing.git
Теперь я меняю тестовый файл внутри test2, а затем нажимаю изменения на центральное репо.
$ cd testing2
$ echo 'testline' >> test && git commit --allow-empty-message -a -m '' && git push
Как и ожидалось, если я запустил "git pull" в папке "test", все будет работать так, как ожидалось.
$ cd testing
$ git pull
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From localhost:testing
3242dba..a1ca5ba master -> origin/master
Updating 3242dba..a1ca5ba
Fast-forward
test | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ diff ./test ../testing2/test
$
Как показано последним "diff", каталог "testing" и каталог "test2" работают точно так, как ожидалось. Команда git pull "синхронизирует два каталога.
Однако, если я cd в test.git(aka: голый репо), git fetch/git reset --soft не обновляет голый репо до последней версии.
$ ls
branches config description HEAD hooks info objects packed-refs refs
$ git fetch
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From localhost:testing
* branch HEAD -> FETCH_HEAD
$ git reset --soft
$ cd ..
$ git clone ./testing.git testing3
Cloning into testing3...
done.
$ cd testing3
$ diff test ../testing2/test
5a6
> testline
Как вы можете видеть из последнего примера, голый репозиторий не смог обновиться, и есть какая-то разница между этими двумя файлами. Что я сделал не так?
Заранее спасибо