Эффективно ли использовать Git и Dropbox? - PullRequest
1105 голосов
/ 25 декабря 2009

Как мне эффективно использовать Git и Dropbox вместе?

Ответы [ 19 ]

5 голосов
/ 20 декабря 2011

Существует также проект с открытым исходным кодом (коллекция межплатформенных [Linux, Mac, Win] сценариев), который выполняет все мелкие детали управления хранилищем с помощью нескольких (3-4) команд.

https://github.com/karalabe/gitbox/wiki

Пример использования:

$ gitbox create myapp
Creating empty repository...
Initializing new repository...
Repository successfully created.

$ gitbox clone myapp
Cloning repository...
Repository successfully cloned.

После чего нормальное использование git:

$ echo “Some change” > somefile.txt
$ git add somefile.txt
$ git commit –m “Created some file”
$ git push

Проверьте вики проекта и руководства для полного справочника команд и учебных пособий.

5 голосов
/ 14 июня 2010

Мы используем этот метод (создание чистого хранилища в Dropbox) в общей папке .

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

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

4 голосов
/ 17 февраля 2011

Я храню свои репозитории не из Github в Dropbox. Одна оговорка, с которой я столкнулся, была синхронизация после переустановки. Dropbox сначала загрузит самые маленькие файлы, а затем перейдет к более крупным. Не проблема, если вы начинаете ночью и возвращаетесь после выходных: -)

Моя тема - http://forums.dropbox.com/topic.php?id=29984&replies=6

3 голосов
/ 14 апреля 2014

Теперь, в 2014 году, я без проблем пользуюсь Git и Dropbox около полутора лет. Хотя некоторые моменты:

  • Все мои машины, использующие Dropbox, работают под Windows, разные версии (от 7 до 8) + 1 mac.
  • Я не делюсь хранилищем с кем-либо еще, поэтому я единственный, кто может его изменить.
  • git push отправляет в удаленный репозиторий, поэтому, если он когда-либо будет поврежден, я легко смогу его восстановить.
  • Мне пришлось создать псевдонимы в C:\Users с mklink /D link target, потому что некоторые библиотеки указывали на абсолютные местоположения.
3 голосов
/ 11 января 2014

Мне нравится лучший ответ Дэна МакНевина. Я закончил выполнение последовательности команд git слишком много раз и решил создать скрипт. Итак, вот оно:

#!/bin/bash

# Usage
usage() {
    echo "Usage: ${0} -m [ master-branch-directory ] -r [ remote-branch-directory ] [ project-name ]"
    exit 1
}

# Defaults
defaults() {
    masterdir="${HOME}/Dropbox/git"
    remotedir="${PWD}"
    gitignorefile="# OS generated files #\n\n.DS_Store\n.DS_Store?\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db"
}

# Check if no arguments
if [ ${#} -eq 0 ] ; then
    echo "Error: No arguments specified"
    usage
fi

#Set defaults
defaults

# Parse arguments
while [ ${#} -ge 1 ]; do
    case "${1}" in
        '-h' | '--help' ) usage ;;
        '-m' )
            shift
            masterdir="${1}"
            ;;
        '-r' )
            shift
            remotedir="${1}"
            ;;
        * )
            projectname="${1##*/}"
            projectname="${projectname%.git}.git"
            ;;
    esac
    shift
done

# check if specified directories and project name exists
if [ -z "${projectname}" ]; then
    echo "Error: Project name not specified"
    usage
fi

if [ ! -d "${remotedir}" ]; then
    echo "Error: Remote directory ${remotedir} does not exist"
    usage
fi

if [ ! -d "${masterdir}" ]; then
    echo "Error: Master directory ${masterdir} does not exist"
    usage
fi

#absolute paths
remotedir="`( cd \"${remotedir}\" && pwd )`"
masterdir="`( cd \"${masterdir}\" && pwd )`"

#Make master git repository
cd "${masterdir}"
git init --bare "${projectname}"

#make local repository and push to master
cd "${remotedir}"
echo -e "${gitignorefile}" > .gitignore # default .gitignore file
git init
git add .
git commit -m "first commit"
git remote add origin "${masterdir}/${projectname}"
git push -u origin master

#done
echo "----- Locations -----"
echo "Remote branch location: ${remotedir}"
echo "Master branch location: ${masterdir}"
echo "Project Name: ${projectname}"

Для сценария требуется только имя проекта. Он создаст git-репозиторий в ~/Dropbox/git/ под указанным именем и отправит все содержимое текущего каталога во вновь созданную главную ветвь источника. Если задано более одного имени проекта, будет использован самый правый аргумент имени проекта.

Опционально, аргумент команды -r указывает удаленную ветвь, которая будет отправлять на мастер-источник. Расположение мастера происхождения проекта также можно указать с помощью аргумента -m. Файл .gitignore по умолчанию также помещается в каталог удаленной ветви. По умолчанию каталог и файл .gitignore указываются в скрипте.

2 голосов
/ 07 апреля 2018

Для моих 2 центов Dropbox имеет смысл только для личного использования, где вы не хотите беспокоиться о получении центрального репо хоста. Для любого профессионального развития вы, вероятно, создадите больше проблем, чем решите, как уже упоминалось в этой теме несколько раз, Dropbox не предназначен для этого варианта использования. Тем не менее, совершенно безопасный способ выгрузить репозитории на Dropbox без каких-либо сторонних плагинов или инструментов - это использовать пакеты. У меня есть следующие псевдонимы в моем .gitconfig для сохранения ввода:

[alias]
        bundle-push = "!cd \"${GIT_PREFIX:-.}\" && if path=\"$(git config remote.\"$1\".url)\" && [ \"${path:0:1}\" = / ]; then git bundle create \"$path\" --all && git fetch \"$1\"; else echo \"Not a bundle remote\"; exit 1; fi #"
        bundle-fetch = "!cd \"${GIT_PREFIX:-.}\" && if path=\"$(git config remote.\"$1\".url)\" && [ \"${path:0:1}\" = / ]; then git bundle verify \"$path\" && git fetch \"$1\"; else echo \"Not a bundle remote\"; exit 1; fi #"
        bundle-new = "!cd \"${GIT_PREFIX:-.}\" && if [ -z \"${1:-}\" -o -z \"${2:-}\" ]; then echo \"Usage: git bundle-new <file> <remote name>\"; exit 1; elif [ -e \"$2\" ]; then echo \"File exist\"; exit 1; else git bundle create \"$2\" --all && git remote add -f \"$1\" \"$(realpath \"$2\")\"; fi #"

Пример:

# Create bundle remote (in local repo)
$ git bundle-new dropbox ~/Dropbox/my-repo.bundle
# Fetch updates from dropbox
$ git bundle-fetch dropbox
# NOTE: writes over previous bundle. Thus, roughly equivalent to push --force --prune --all
$ git bundle-push
2 голосов
/ 20 сентября 2012

Я столкнулся с подобной проблемой и создал небольшой скрипт для того же. Идея состоит в том, чтобы использовать Dropbox с Git как можно проще. В настоящее время я быстро внедрил код Ruby и скоро добавлю еще.

Сценарий доступен на https://github.com/nuttylabs/box-git.

1 голос
/ 23 февраля 2018

Другой подход:

Все ответы, включая @ Dan answer , который является самым популярным, посвящены идее использования Dropbox для централизации общего репозитория вместо использования службы, ориентированной на git, такой как github, bitbucket и т. Д. .

Но, поскольку в первоначальном вопросе не указано, что на самом деле означает «эффективно использовать Git и Dropbox вместе», давайте поработаем над другим подходом: «Использование Dropbox для синхронизации только рабочего дерева.»

Руководство содержит следующие шаги:

  1. внутри каталога проекта, создается пустой каталог .git (например, mkdir -p myproject/.git)

  2. отменить синхронизацию каталога .git в Dropbox. Если вы используете приложение Dropbox: перейдите в «Настройки», «Синхронизация» и «выберите папки для синхронизации», где каталог .git должен быть не отмечен. Это удалит каталог .git.

  3. запустите git init в каталоге проекта

Он также работает, если .git уже существует, тогда выполните только шаг 2. Dropbox сохранит копию файлов git на веб-сайте.

Шаг 2 заставит Dropbox не синхронизировать структуру git-системы, что является желаемым результатом для этого подхода.

Почему можно использовать этот подход?

  • У изменений, которые еще не помещены, будет резервная копия Dropbox, и они будут синхронизироваться между устройствами.

  • В случае, если Dropbox завинчивает что-то во время синхронизации между устройствами, git status и git diff будет полезно разобраться.

  • Экономит место в учетной записи Dropbox (там не будет храниться вся история)

  • Это позволяет избежать проблем, высказанных @dubek и @Ates в комментариях к ответу @ Dan, и проблем @clu в другом ответе .

Существование удаленного где-то еще (github и т. Д.) Будет нормально работать при таком подходе.

Работа в разных ветках приносит некоторые проблемы, о которых нужно позаботиться:

  • Одна потенциальная проблема заключается в том, что Dropbox (неоправданно?) Синхронизирует потенциально много файлов, когда проверяются разные ветви.

  • Если на двух или более синхронизированных устройствах Dropbox проверены разные ветви, несущественные изменения на обоих устройствах могут быть потеряны,

Одним из способов решения этих проблем является использование git worktree для хранения проверок филиалов в отдельных каталогах.

0 голосов
/ 07 июля 2017

Без использования сторонних инструментов интеграции я мог бы немного улучшить условия и использовать DropBox и другие подобные сервисы облачных дисков, такие как SpiderOak с Git.

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

Чтобы избежать этой проблемы, я сделал:

  1. Объедините мой git index в один файл, используя git bundle create my_repo.git --all.
  2. Установите задержку для мониторинга файла, например, 5 минут, а не мгновенную. Это уменьшает шансы, что DropBox синхронизирует частичное состояние в середине изменения. Это также очень помогает при изменении файлов на облачном диске на лету (например, при мгновенном сохранении приложений для создания заметок).

Он не идеален, поскольку нет гарантии, что он не испортит состояние git снова, но это помогает, и на данный момент я не получил никаких проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...