Возможно ли размещать голый репозиторий Git, используя Dropbox, для совместного использования кода?

Я понимаю, что есть подобные вопросы, но мой вопрос несколько отличается: мне интересно, может ли совместное использование открытого репозитория через синхронизированную папку Dropbox на нескольких компьютерах работать с кодом обмена через Git?

Другими словами: передает репозиторий Git через Dropbox так же, как и его совместное использование из одного централизованного местоположения, например, через SSH или HTTP?

Обновляется ли репо на локальном диске каждого пользователя? Является ли это тем же самым, что и разделение репо Git через общий сетевой диск?

Примечание: Это не эмпирический вопрос: он работает нормально. Я спрашиваю, совместим ли способ структурирования Git репо с этим способом совместного использования.

РЕДАКТИРОВАТЬ Чтобы уточнить/повторить, я говорю о сохранении репозитория Git в Dropbox в качестве голого репозитория. Я не говорю о сохранении фактических файлов, находящихся под контролем источника в Dropbox.

Ответ 1

Я уверен, что это небезопасно. Там куча движущихся частей в репозитории Git, и Dropbox может легко разрушить один из них. Например, в каталоге refs могут возникнуть неправильные подсказки ветки (мастер и т.д.), Или ваше хранилище объектов может перестать работать, если файл objects/info/packs имеет неправильное содержимое. Репозитории Git довольно просты и надежны, но они не просто немые нерушимые хранилища.

Доступ к удаленным репозиториям через SSH, git или HTTP или даже локально в сетевой файловой системе безопасен, поскольку доступ к репозиторию осуществляется только через процесс git, который гарантирует, что все будет перемещено на место в правильный порядок. Но Dropbox не делает никаких гарантий по заказу, поэтому вы можете потерять данные.

Просто используйте сервер Git (или любой SSH-сервер) вместо этого - если у вас его нет, GitHub, Bitbucket или GitLab прийти к разум. Это сэкономит вам массу неприятностей, и это не сложнее использовать, чем локальный репозиторий, совместно используемый Dropbox (у вас есть только URL-адреса SSH вместо локальных путей).

Ответ 2

Я не вижу причин, по которым он потеряет данные. Структура репозитория Git является надежной, и в самом хранилище репозитория файлы с одинаковым именем всегда будут иметь одинаковый контент (это не относится к именам ветвей).

Однако это не будет эффективным. Протокол передачи Git означает, что он обычно передает только один раз. С Dropbox, если два человека упаковывают несколько разных репозиториев, созданные пакеты могут содержать значительные общие данные, а не быть идентичными, поэтому DropBox будет синхронизировать обе пакеты, которые неэффективны.

Вы также можете обнаружить, что, несмотря на то, что все данные там, вы завершаете не отслеживаемые изменения из-за двух копий, имеющих одновременно одну и ту же ветку. Это можно обойти, гарантируя, что вы нажимаете на разные ветки из каждой копии, но это будет боль.

Ответ 3

Что произойдет, если два пользователя отключились, выполните некоторую работу, нажмите на свою локальную копию голого репозитория, а затем выйдите в линию? В этом случае, когда Dropbox пытается синхронизироваться, у вас появятся проблемы - файлы pack и подсказки ветвей будут разными, и Dropbox не сможет это исправить. Это единственная проблема, которую я мог видеть. Я думаю, что то же самое может произойти, даже если оба пользователя подключены, если они будут одновременно входить в свои локальные репозитории.

Ответ 4

У меня были проблемы с Dropbox с Git и с Mercurial. Файлы репозитория часто повреждаются, по-видимому, из-за того, что синхронизация Dropbox не идеальна, особенно когда изменения происходят из нескольких мест. Кроме того, Dropbox работает в фоновом режиме, поэтому очень просто случайно попытаться использовать репозиторий (или перезагрузить компьютер), пока он находится в середине операции синхронизации.

Мне нравится Dropbox, но это не хорошая замена для общего диска или "реального" удаленного репозитория Git.

Ответ 5

Я использовал это с MobileMe, но компьютеры все время не синхронизировались. У каждого компьютера было бы репо, отличное от того, что было в облаке, и поскольку в MobileMe нет концепции "слияния" (и я предполагаю, что DropBox тоже)? Мне бы просто пришлось либо выбрать версию сохранить и потерять некоторые изменения, или скопировать изменения и повторно применить их. Жизнь стала намного проще, так как я переключился на центральный репозиторий Git.

Если он работает для вас до сих пор, хорошо. Я предполагаю, что у вас будет большая боль, если в то же время двое разработчиков нажмут на свои локальные репозитории. Как DropBox узнает, что правильно?

Ответ 6

Если бы я сказал вам, что есть случаи, когда Dropbox напортачил мой Git, я бы ответил на ваш вопрос противоречием? По крайней мере, по моему опыту, это произошло более 5 раз, и есть много людей, имеющих такой же опыт.

Но в настоящее время я не считаю, что Dropbox действительно очень важен с Git, на самом деле. На самом деле вы можете установить удаленные ветки (Github, Gitorious, Bitbucket), которые могут заменить функции совместного использования Dropbox и истории версий (это еще не все о Dropbox?) И предложить вам еще больше.

Ответ 7

Одна проблема с DropBox связана с тем, как они обрабатывают исторические резервные копии. Хотя вы можете откатить отдельный файл (за последние 30 дней или навсегда, если у вас есть PackRat), вы не можете откатывать все каталоги. Это означает, что если ваше репо будет покручено по какой-либо причине, удивительная услуга с историческим резервным копированием по существу бесполезна, так как вам придется щелкнуть по тысячам файлов, чтобы вернуть их к более ранней версии.

И тогда есть проблемы с условиями гонки, если хотите, упомянутыми большинством других ответов.

Ответ 8

Я просто размещаю свой репозиторий на github.com в качестве частного репозитория. Да, вы должны заплатить за Micro-план ($ 7/plan), но у вас есть безопасность, зная, что у вас есть резервная копия вашего кода извне.