Pregunta ¿Usar Git y Dropbox juntos de manera efectiva?


Cómo uso Git y Dropbox juntos de manera efectiva?


1062
2017-12-25 08:41


origen


Respuestas:


Creo que Git en Dropbox es genial. Lo uso todo el tiempo. Tengo varias computadoras (dos en casa y una en el trabajo) que utilizo Dropbox como un repositorio central simple. Como no quiero alojarlo en un servicio público, y no tengo acceso a un servidor al que siempre puedo enviar scripts, Dropbox se encarga de esto sincronizando (muy rápidamente) en segundo plano.

La configuración es algo como esto:

~/project $ git init
~/project $ git add .
~/project $ git commit -m "first commit"
~/project $ cd ~/Dropbox/git

~/Dropbox/git $ git init --bare project.git
~/Dropbox/git $ cd ~/project

~/project $ git remote add origin ~/Dropbox/git/project.git
~/project $ git push -u origin master

A partir de ahí, puedes clonar ~/Dropbox/git/project.git que ha asociado con su cuenta de Dropbox (o que ha compartido este directorio con personas), puede hacer todas las operaciones normales de Git y se sincronizarán automáticamente con todas sus otras máquinas.

Escribí una publicación de blog, En el control de versiones, (viejo enlace  muerto) sobre mi razonamiento y cómo configuré mi entorno, está basado en mi Ruby on Rails experiencia de desarrollo, pero se puede aplicar a cualquier cosa, realmente.


1350
2017-12-25 17:10



La forma correcta de hacerlo es usar git-remote-dropbox: https://github.com/anishathalye/git-remote-dropbox

Crear su propio repositorio desnudo en Dropbox causa muchos problemas. Anish (el creador de la biblioteca) lo explica mejor:

La causa principal de estos problemas es que el escritorio de Dropbox   el cliente está diseñado para sincronizar archivos, no repositorios de Git. Sin   manejo especial para repositorios Git, no mantiene el mismo   garantías como Git. Las operaciones en el repositorio remoto ya no son   operaciones atómicas y concurrentes o sincronización desafortunada con   la sincronización puede dar como resultado un repositorio dañado.

Los controles remotos tradicionales de Git ejecutan código en el lado del servidor para que esto funcione   correctamente, pero no podemos hacer eso.

Solución: es posible resolver esto correctamente. Es posible usar   Git con Dropbox y tenga las mismas garantías de seguridad y consistencia   como un control remoto tradicional de Git, incluso cuando hay múltiples usuarios y   operaciones concurrentes!

Para un usuario, es tan simple como usar git-remote-dropbox, un control remoto Git   ayudante que actúa como un puente bidireccional transparente entre Git y   Dropbox y mantiene todas las garantías de un control remoto tradicional de Git.   Incluso es seguro de usar con carpetas compartidas, por lo que se puede utilizar para   colaboración (yay repos privados ilimitados con ilimitado   colaboradores!).

Con el ayudante remoto, es posible usar Dropbox como un control remoto Git   y continuar usando todos los comandos regulares de Git como git clone, git   pull, y git push, y todo funcionará como se espera.


86
2017-08-25 23:25



Esta respuesta se basa en Mercurial experiencia, no Git, pero esta experiencia dice que usar Dropbox de esta manera es solicitar repositorios corruptos si existe la posibilidad de que actualice el mismo repositorio basado en Dropbox desde diferentes máquinas en diferentes momentos (Mac, Unix, Windows en mi caso) )

No tengo una lista completa de las cosas que pueden salir mal, pero aquí hay un ejemplo específico que me mordió. Cada máquina tiene su propia noción de caracteres de final de línea y cómo se manejan los caracteres en mayúscula / minúscula en los nombres de los archivos. Dropbox y Git / Mercurial manejan esto de forma ligeramente diferente (no recuerdo las diferencias exactas). Si Dropbox actualiza el repositorio detrás de la memoria de Git / Mercurial, presto, repositorio roto. Esto sucede de forma inmediata e invisible, por lo que ni siquiera sabe que su repositorio está roto hasta que intente recuperar algo de él.

Después de desenterrar un desastre haciendo las cosas de esta manera, he estado usando la siguiente receta con gran éxito y sin signos de problemas. Simplemente mueve tu repositorio fuera de Dropbox. Use Dropbox para todo lo demás; documentación, Archivos JARtodo lo que quieras Y use GitHub (Git) o Bitbucket (Mercurial) para administrar el repositorio en sí. Ambos son gratuitos, por lo que esto no agrega nada a los costos, y cada herramienta ahora juega con sus puntos fuertes.

Ejecutar Git / Mercurial en la parte superior de Dropbox no agrega nada, excepto el riesgo. No lo hagas


85
2018-05-01 20:48



Con respecto a los equipos pequeños que usan Dropbox:

Si cada desarrollador tiene su propio repositorio de escritura libre en Dropbox, que es tirar solo para otros desarrolladores, entonces esto facilita el uso compartido de código sin riesgo de corrupción.

Luego, si desea una 'línea principal' centralizada, puede hacer que un desarrollador administre todos los empujones desde su propio repositorio.


16
2017-12-04 12:27



No quería poner todos mis proyectos en un repositorio de Git, ni quería entrar y ejecutar este código para cada proyecto, así que hice una Intento script que automatizará el proceso. Puede usarlo en uno o varios directorios, por lo que puede hacer el código en esta publicación o puede hacerlo en múltiples proyectos a la vez.

#!/bin/sh
# Script by Eli Delventhal
# Creates Git projects for file folders by making the origin Dropbox. You will need to install Dropbox for this to work.

# Not enough parameters, show help.
if [ $# -lt 1 ] ; then

cat<<HELP
projects_to_git.sh -- Takes a project folder and creates a Git repository for it on Dropbox

USAGE:
    ./projects_to_git.sh file1 file2 ..

EXAMPLES:
    ./projects_to_git.sh path/to/MyProjectDir
        Creates a git project called MyProjectDir on Dropbox

    ./projects_to_git.sh path/to/workspace/*
        Creates a git project on Dropbox for every folder contained within the workspace directory, where the project name matches the folder name

HELP
    exit 0
fi

# We have enough parameters, so let's actually do this thing.

START_DIR=$(pwd)

# Make sure we have a connection to Dropbox
cd ~
if [ -s 'Dropbox' ] ; then
    echo "Found Dropbox directory."
    cd Dropbox
    if [ -s 'git' ] ; then
        echo "    Dropbox Git directory found."
    else
        echo "    Dropbox Git directory created."
        mkdir git
    fi
else
    echo "You do not have a Dropbox folder at ~/Dropbox! Install Dropbox. Aborting..."
    exit 0
fi

# Process all directories matching the passed parameters.
echo "Starting processing for all files..."
for PROJ in $*
do
    if [ -d $PROJ ] ; then
        PROJNAME=$(basename $PROJ)
        echo "  Processing $PROJNAME..."

        # Enable Git with this project.
        cd $PROJ
        if [ -s '.git' ] ; then
            echo "    $PROJNAME is already a Git repository, ignoring..."
        else
            echo "    Initializing Git for $PROJNAME..."
            git init -q
            git add .
            git commit -m "Initial creation of project." -q

            # Make the origin Dropbox.

            cd ~/Dropbox/git
            if [ -s $PROJNAME ] ; then
                echo "    Warning! $PROJNAME already exists in Git! Ignoring..."
            else
                echo "    Putting $PROJNAME project on Dropbox..."
                mkdir $PROJNAME
                cd $PROJNAME
                git init -q --bare
            fi

            # Link the project to the origin
            echo "    Copying local $PROJNAME to Dropbox..."
            cd $PROJ
            git remote add origin "~/Dropbox/git/$PROJNAME"
            git push -q origin master
            git branch --set-upstream master origin/master
        fi
    fi
done

echo "Done processing all files."
cd $START_DIR

16
2017-12-02 18:37



No creo que usar Git y Dropbox sea el camino a seguir ... Solo piense en las características de ambos:

Git:

  • Te permite tener un repositorio central
  • Te permite tener tu propio repositorio con tus propios cambios
  • Le permite enviar y recibir cambios desde el repositorio central
  • Permite que varias personas cambien los mismos archivos y los fusiona o le pide que los combine si no puede hacerlo
  • Tiene clientes web y de escritorio para permitir el acceso al repositorio central

Dropbox:

  • Mantiene todo en un repositorio central
  • Le permite tener sus propias versiones de los archivos en el servidor
  • Te obliga a enviar y recibir cambios desde el repositorio central
  • Si varias personas cambian los mismos archivos, el primer archivo confirmado se reemplaza por confirmaciones posteriores, y no se produce ninguna fusión que sea problemática (y definitivamente su mayor desventaja)
  • Tiene clientes web y de escritorio para permitir el acceso al repositorio central.

Y si le preocupa compartir algunos de sus archivos, ¿por qué no los cifra? Y luego podrías obtener la mayor ventaja de Dropbox para Git, es decir, tener archivos públicos y privados ...


15
2018-05-26 09:50



Ahora es 2015, y desde hace tres días, un nueva herramienta Residencia en Dropbox API v2 ha sido creado para usar git de forma segura en Dropbox. Funciona en contra de la API en lugar de utilizar el cliente de escritorio, y maneja correctamente múltiples impulsos simultáneos a un repositorio alojado en una carpeta compartida.

Una vez configurado, le permite a uno configurar un control remoto git exactamente como cualquier otro control remoto git.

git clone "dropbox::/path/to/repo"
git remote add origin "dropbox::/path/to/repo"

14
2017-08-23 07:31



Yo uso Mercurial (o Git) + TrueCrypt + Dropbox para encriptado remoto copias de seguridad.

Lo mejor de todo es que Dropbox NO sincroniza todo el contenedor TrueCrypt si modifica una pequeña porción de su código. El tiempo de sincronización es más o menos proporcional a la cantidad de cambios. Aunque está encriptado, la combinación de TrueCrypt + Dropbox hace un excelente uso de la sincronización de nivel de bloque y cifrado de bloque.

En segundo lugar, un contenedor cifrado monolítico no solo agrega seguridad, también reduce las posibilidades de repositorio corrupción .

Precaución: Sin embargo, debe tener mucho cuidado de no montar el contenedor mientras se ejecuta Dropbox. También puede ser difícil resolver conflictos si 2 clientes diferentes ingresan diferentes versiones al contenedor. Por lo tanto, es práctico solo para una sola persona que lo usa para copias de seguridad, no para un equipo.

Preparar:

  • Crea un contenedor Truecrypt (varios Gigabytes están bien)
  • En las preferencias de Truecrypt, desmarque preserve modification timestamp*.
  • Cree un repositorio como se menciona anteriormente por Dan ( https://stackoverflow.com/a/1961515/781695 )

Uso:

  • Salir de Dropbox
  • Monte el contenedor, presione sus cambios, desmonte
  • Ejecutar dropbox

PD Desmarcando la preserve modification timestamp le dice a Dropbox que el archivo ha sido modificado y debe ser sincronizado. Tenga en cuenta que el montaje del contenedor modifica la marca de tiempo, incluso si no cambia ningún archivo en él. Si no quiere que eso suceda, simplemente monte el volumen como read-only


8
2018-03-03 16:18



He estado usando Mercurial de la manera recomendada e insto a que tenga cuidado, especialmente si alguna de las máquinas es diferente. Los foros de Dropbox están llenos de quejas de misteriosos casos de nombres de archivos que aparecen espontáneamente. Hg (y supongo que Git) no se dará cuenta ni se quejará durante los registros de rutina y solo escuchará sobre la corrupción cuando se queja de un repositorio corrupto cuando intenta usarlo de verdad. Malas noticias. Ojalá pudiera ser más específico sobre el problema y sus soluciones; Todavía estoy tratando de desenterrarme de este lío.


6
2018-03-04 11:42



¡Me encanta la respuesta de Dan McNevin! Estoy usando Git y Dropbox juntos también ahora, y estoy usando varios alias en mi .bash_profile entonces mi flujo de trabajo se ve así:

~/project $ git init
~/project $ git add .
~/project $ gcam "first commit"
~/project $ git-dropbox

Estos son mis alias:

alias gcam='git commit -a -m'
alias gpom='git push origin master'
alias gra='git remote add origin'
alias git-dropbox='TMPGP=~/Dropbox/git/$(pwd | awk -F/ '\''{print $NF}'\'').git;mkdir -p $TMPGP && (cd $TMPGP; git init --bare) && gra $TMPGP && gpom'

6
2018-02-17 10:01



Usamos este método (creando un repositorio desnudo en Dropbox) en un compartir carpeta.

Un pequeño grupo de desarrolladores puede obtener de ese repositorio desnudo sincronizado y crear un clon local. Una vez que se completa la unidad de trabajo, volvemos al origen.

Una cosa que me estoy perdiendo es una buena manera de enviar un correo electrónico con la información del conjunto de cambios una vez que se produce un empuje hacia el origen. Estamos usando Google Wave para realizar un seguimiento manual de los cambios.


5
2018-06-14 13:32