Ответ 1
Вздох.
Мне нравится Dropbox, но я бы никогда не рекомендовал его для "хостинга" репозиториев Git. Его синхронизация работает достаточно хорошо для однофайловых документов, но не приближается к предоставлению семантики распределенной/удаленной файловой системы, которая необходима для безопасного размещения репозитория Git.
Надеюсь, вы просто "размещаете" голый репозиторий Git в Dropbox. Если это так, вы должны иметь возможность собирать коммиты и ссылки из ваших не-голых (рабочих) репозиториев. Также должно быть возможно вручную восстановить существующий репозиторий, но вам все равно придется копировать объекты из других репозиториев, так что вы также можете сделать это следующим образом: "высокий уровень" (вместо перехода на "низкий уровень" ) и копирование объектов из других репозиториев (или копирование файлов пакетов и распаковка их частей)).
Начните с создания независимого клона одного из ваших рабочих каталогов.
git clone file://path/to/myrepo /path/to/myrepo-recovery-work
Импортируйте ссылки и объекты из других рабочих репозиториев.
# If you have network access to the other repositories:
cd /path/to/myrepo-recovery-work
git remote add other1 [email protected]:path/to/other/working-repo-1
git remote add other2 ssh://[email protected]/path/to/other/working-repo-2
# etc.
git fetch --all
# If you do not have network access:
cd /path/to/other/working-repo-1 && # on machine with working-repo-1
git bundle create /path/to/other1.gitbundle --all HEAD
cd /path/to/other/working-repo-2 && # on machine with working-repo-2
git bundle create /path/to/other2.gitbundle --all HEAD
# etc.
# Transfer the bundle files to the machine that has "myrepo-recovery-work"
# (Dropbox is OK to copy the bundles, they are just single files),
# then on that machine:
cd /path/to/myrepo-recovery-work
git remote add other1 /path/to/transferred/other1.gitbundle
git remote add other2 /path/to/transferred/other2.gitbundle
# etc.
git fetch --all
Затем просмотрите все ветки ваших новых пультов и определите, какие ветки должны указывать на то, что фиксирует ваш восстановленный центральный репозиторий.
git log --oneline --graph --decorate --abbrev-commit --all
# In addition to looking at the history graph, you might need to examine
# the content of certain commits. Just check them out as a detached HEADs.
git branch recovered/maintenance decafbad
git branch recovered/master cafebabe
git branch recovered/development deadbeef
git branch recovered/bug-1234 8badf00d
Создайте и переместите восстановленные ветки (и теги) в новый открытый репозиторий.
git init --bare /path/to/new-central-bare-repo.git # or real Git hosting service!
git remote add new /path/to/new-central-bare-repo.git
git push --tags new 'refs/heads/recovered/*:refs/heads/*'