
Using Git with Dropbox - mmisu
http://solarianprogrammer.com/2012/03/15/git-repo-dropbox/
======
weaksauce
If you are already trusting a cloud service with your data why not go one step
further and use bitbucket for free private repos?

You don't have the possibility of corrupting your repo with an unsynced commit
from a differennt machine.

~~~
dalore
AFAIK thanks to the hashing used with git there is very little chance of
corruption. The filenames are 32bit hashes so the probability of collision
between the hashes of two given files is 1 / 2^32. The probability of
collisions between any of N given files is (N - 1) / 2^32.

~~~
maxs
Just to correct you: the probability is _much_ bigger than (N-1)/2^32.

See the birthday problem: <http://en.wikipedia.org/wiki/Birthday_problem>

~~~
weaksauce
The search space of the object name is a sha1 and is 40 characters long and
not 32 bits so it's quite a bit larger than the op was talking about(it's
actually 160bits).

see: <http://book.git-scm.com/1_the_git_object_model.html>

------
calculus
Am I wrong, or does pushing to the dropboxed git repo at the same time from
two different computers will corrupt the repo ?

~~~
eli
I managed to screw up a git repo in Dropbox. I believe it was by making a
commit on a non-connected computer than making another commit before the first
one had synced to dropbox.

It was not the end of the world, but I would not recommend storing git repo in
dropbox. If it's really something so small and insignificant that it doesn't
need a git repo, then just put it in dropbox. If you want to use git, take the
time to set up a proper repository.

~~~
mdwrigh2
Even if you do screw it up, the commit should all be there and valid. The only
thing that happens is HEAD won't point to the right commit on other boxes, and
then when you do sync you'll clobber the file containing the commit for HEAD,
thus losing the other commits. Fortunately, they'll still exist until a gc
occurs, so you can go find them in reflog.

~~~
eli
Correct, I still had my HEAD files, but everything else seemed pretty broken.
I'm not a Git expert by a long shot, but I would imagine that Dropbox renamed
some files like "Foo.bar (Eli's Conflicted Copy)" and that really confused the
history.

Anyway, not something I would recommend.

------
amalag
Why bother with dropox? Install jgit and push it on your S3 account for $0.01
per month. Or use Bitbucket's free private git repos.

~~~
driverdan
What does jgit have to do with S3? From the description on the project page
it's just a Java implementation of git.

~~~
Tuna-Fish
Amazon allows you to run code on their servers with strict usage-based
billing. Usage-based bill for a git server is essentially zero. Also works for
irc bouncers and other such services with low computational cost that you want
to run somewhere on the cloud.

~~~
AjithAntony
Not sure that is right. There is not remote code executing to support it. jgit
has a feature where you can push and fetch from an s3 bucket as if it were
just an http repo. The assumption is that the s3 storage space and bandwidth
would be low enough to be negligible.

------
lysol
Honestly, I just keep my checked out copy in Dropbox. If it's something I feel
like keeping private, I just don't push it anywhere. Even less effort
involved.

~~~
pcl
If you have a working directory checked out in ~/Dropbox, beware of multi-
machine madness. I've run into issues with a git repo in ~/Dropbox + IntelliJ
+ multiple computers -- if you leave IJ running on a machine you're not using,
it'll notice file changes and re-index things in git. This can, in turn, cause
Dropbox to create conflicts, effectively corrupting your git repo. As a
result, I tend to keep only non-Java (i.e., non-IJ) projects in ~/Dropbox.

Run "find .git -name ' _conflict_ '" in your working directory to see if this
has happened to you.

~~~
pcl
Oops; formatting fail. Should be '<asterisk>-conflict', not just 'conflict'.

------
wei2012
Wasting your talent and time, just use bitbucket.

Life is short.

------
newman314
Warning: If you use git+Dropbox on a Mac (or have one joined anywhere), keep
in mind that most Macs have case-insensitive filesystems.

What this means is checking out a git repo like the Linux kernel will not
work. This drove me a little nuts until I figured out what happened (I'm an
old school Unix guy so did not realize that HFS+ is case insensitive).

~~~
TazeTSchnitzel
IIRC you can reformat as case-sensitive.

~~~
Groxx
In the past, I've seen a few mentions of bugs / non-running programs when run
on a case-sensitive HFS+. Not sure if that's true any more, but changing a
default-case-insensitive system to a case-sensitive one isn't usually a
problem-free operation.

~~~
PJones
Last time I formatted my drive as case sensitive I ran into issues with
Adobe's CS5 apps and Steam.

There could be more, but I reformatted it again shortly afterwards.

------
webjprgm
Old news, been doing this for years. (I hadn't heard of bitbucket back then.)

Also, my use case is extremely simple. I'm just sharing my own personal
projects between my desktop and my laptop. I only ever use one of the two at a
time, and am not using any tool that automatically checks or updates git
repos.

------
ImprovedSilence
I really just do all my work in Dropbox folders anyway. Instant code
everywhere. Life's good.

~~~
udp
Until you compile your code, end up with 300 MB of object files and have no
way to exclude them by file extension.

~~~
ImprovedSilence
Haha, true. Although not a problem I've got at the moment. Couldn't you just
compile into a directory, and exclude that directory?

You bring up an interesting point though, I wonder if there's any kind of hack
you could do to the dropbox config files to alter that?

~~~
udp
Even if you hacked up the makefile to move the object files, there's still a
hell of a lot of junk generated when compiling a typical large C project.
Dropbox needs something like git ignore files:

<http://help.github.com/ignore-files/>

~~~
julian37
Or you could do an out-of-source build, which is cleaner anyway. CMake and
autoconfiscated projects support this by default.

------
ryanpetrich
I wrote a script awhile back to simplify this workflow:
<https://github.com/rpetrich/git-dropbox>

------
alpb
It is not managable to have too many binaries changed in each commit that are
under control git synced with Dropbox. (I know Git is not the best suitable
vcs for binaries!) I'd always prefer Bitbucket for that reason. It's an
Atlassian product and it is reliable, has no difference than github for
private repos. Your files will be on the cloud, is your Dropbox more secure
and permanent than Bitbucket? Hell no.

------
yonran
Would storing a git bundle on dropbox be better to avoid concurrent
modifications to your refs? (A git bundle is just a git pack file of commits
along with new ref pointers in a single file).

Could you push to one bundle per computer and then git fetch all the bundles
from your peers? Once all your peers have your changes, you can start making
bundles from a later revision so that the incremental bundles aren't too big.

------
darrikmazey
I'm sure I'm not the target audience, but I'm surprised that in this day and
age there isn't always a shared resource lying around (a linode, a slice, an
ec2 instance). Or just allow ssh between developers with accounts limited to
git access. The dropbox part seems unnecessary.

------
rhardih
Except you don't own the stuff in your dropbox any more than you own you
pictures on Facebook.

~~~
supersillyus
From <https://www.dropbox.com/terms>:

"You retain full ownership to your stuff. We don’t claim any ownership to any
of it."

Or am I missing something?

~~~
ineedtosleep
I believe they added that somewhat recently after their privacy issue fiasco.

There is also this snippet that was added, which assumes that your key isn't
really private as opposed to services like SpiderOak which have no knowledge
of your key:

> We may disclose to parties outside Dropbox files stored in your Dropbox and
> information about you that we collect when we have a good-faith belief that
> disclosure is reasonably necessary to (a) comply with a law, regulation or
> compulsory legal request; (b) protect the safety of any person from death or
> serious bodily injury; (c) prevent fraud or abuse of Dropbox or its users;
> or (d) protect Dropbox's property rights.

------
mariusmg
If you want to keep it private what the heck would you push it to Dropbox ?!

~~~
w33ble
Also of note, if you're going to push your private repo to the cloud anyway,
Bitbucket has free private Git repos. It's not as featureful as Github, but it
has more than just the simple file storage you'd get through Dropbox.

------
leouznw
funny :)

------
Kiro
So how do I do this in the GUI?

