Достаточно ли git push --mirror в качестве резервной копии для хранилища, которое используется с git-svn? - PullRequest
6 голосов
/ 18 января 2010

Я хотел бы создать резервную копию git-репозитория, который я использую для отслеживания svn-репозитория (с git-svn).Могу ли я использовать для этой цели git push --mirror или я потеряю информацию, связанную с git-svn, когда мне понадобится восстановить резервную копию?

1 Ответ

3 голосов
/ 18 января 2010

Возможно git push или git bundle не включать метаданные svn.

Но, согласно git svn intro , вы можете попытаться восстановить эти метаданные SVN.
(отказ от ответственности: не тестировался напрямую)

Восстановление метаданных git-svn

Если вы скопировали хранилище откуда-то еще (например, из repo.utsl.gen.nz) через git-clone, или если вы просто взорвали его, у вас не будет метаданных SVN - просто коммиты.
В этом случае вам нужно перестроить ваши метаданные SVN, например, просто чтобы поддерживать транк в актуальном состоянии - git-svn перестроит свои метаданные при запуске git-svn fetch.

$ git update-ref refs/remotes/trunk origin/svn/trunk
$ git svn init https://svn.perl.org/parrot/trunk
Using higher level of URL: https://svn.perl.org/parrot/trunk => https://svn.perl.org/parrot
$ git svn fetch
Rebuilding .git/svn/git-svn/.rev_db.d31e2699-5ff4-0310-a27c-f18f2fbe73fe ...
r17220 = 78ad11bf2f61b35e1cb32a978ab546d198be8a2e
r17219 = 605264b06d84670ec402d7a7a21c0016cae3a928
r17218 = a8ceba9c503d2be8e8e69a3df454017322906cf5
...

Главное, что нужно помнить при перестройке метаданных git-svn, - это сделать так, чтобы ссылки выглядели так же, как они выглядят из нового импорта; Вы можете сделать это, используя git update-ref, как указано выше, скопировав файлы ссылок внутри .git/refs/, или используя git pack-refs, затем отредактировав .git/packed-refs.
Чтобы проверить, что вы правильно поняли, используйте git show-ref - возможно, сравните со свежим клоном SVN HEAD.

...