git - 使用Git和Dropbox一起发挥作用?

  显示原文与译文双语对照的内容

如何有效地使用 GitDropbox插件

时间:

我认为Dropbox上的Git很棒。 我用了所有的时间。 我有多个计算机( 两个在家,一个在工作),我使用Dropbox作为中央裸机仓库。 因为我不想在公共服务上托管它,而且我也没有访问它的权限,所以Dropbox通过在后台同步( 非常快速) 来处理它。

安装程序类似于:


~/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

从那里,你可以只克隆 ~/Dropbox/git/project.git ( 或者与他人共享这里目录) 你收存箱点并单击所需帐户,你可以完成所有正常的Git操作,它们将会被同步到你的所有其他机器自动。

我写了一篇博文,上的版本控制,( 老链接编辑器)死键 在我的推理和我的环境设置上,它基于我的 Ruby on Rails 开发经验,但是它可以应用到任何东西,真正的。

不同时间这个回答是基于 hg 经验建议,而不是最新的,但这种体验甚至是升降梭箱这种使用方式提示是否要损坏储存库如果有一个机会,你将同时更新相同Dropbox-based存储库来自不同 machines.

我没有可以出错的完整的列表,但这里是一个具体的例子。 每个机器都有自己的line-ending字符概念,以及如何在文件名中处理大写/小写字符。 Dropbox和 git/mercurial处理这个稍微不同的( 我不记得有什么不同的地方) 。 如果Dropbox更新了 git/mercurial背后的仓库,那么就会损坏仓库。 在it,这只会发生,无形中坏了点,直到你尝试恢复之类的,所以你都不知道你的存储库

从一个混乱的事情中挖掘出来之后,我一直在使用以下的秘诀,并且没有出现问题。 只需将仓库移出 Dropbox 。 用Dropbox做其他事情;文档, JAR文件,任何你想要的。 并使用 gitub ( Git ) 或者 Bitbucket ( Mercurial ) 来管理存储库本身。 两者都是免费的,因此这将不会增加成本,而且每个工具都会发挥它的优势。

在Dropbox之上运行 git/mercurial只增加了风险,除了风险。 不要这样做.

我不想把所有的项目放在一个Git库下,也不想在每个项目中运行这个代码,所以我做了一个 Bash的脚本,它将自动化流程。 你可以在一个或者多个目录中使用它,这样它就可以在这里日志中执行代码,或者它可以同时在多个项目中执行它。


#!/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

我不认为使用Git和Dropbox是一种方法。 只需考虑两个方面的特性:

Git:

  • 允许你拥有中央仓库
  • 允许你拥有自己的存储库和自己的更改
  • 允许你从中央仓库发送和接收更改
  • 允许多个人更改相同的文件,或者合并它们或者要求你合并它们,如果不能这样做的话
  • 允许访问中央存储库的站点和桌面客户端

Dropbox:

  • 将所有内容保留在中央存储库中
  • 允许你在服务器中拥有自己的文件版本
  • 强制你从中央仓库发送和接收更改
  • 如果多个人更改了相同的文件,提交的第一个文件将被替换为以后提交的文件,并且不会出现任何麻烦( 并且肯定是最大的缺点)
  • 允许访问中央存储库的站点和桌面客户端。

如果你担心共享一些文件,为什么不加密? 然后你可以得到Dropbox的最大优势,即拥有公共和私人文件。

对于使用Dropbox的小型团队:

也不要有corruption,如果每个开发者都有自己的可以写上裸存储库的下拉框,这是拉唯一给其他开发人员,那么从而可以促进代码共享 !

然后如果你想要一个集中的'主线',你可以让一个开发者从他们自己的仓库管理所有的推送。

我使用了Mercurial推荐的方式,并鼓励你小心,尤其是当任何机器有不同的时候。 Dropbox论坛充满了对神秘的文件名问题的抱怨。 Hg ( 我假设 Git ) 在例行签入期间不会通知或者抱怨,当你尝试使用它时,你将只会听到损坏的存储库。 坏消息。希望我能更具体地了解这个问题和它的解决方法;我仍然试图从这个混乱中挖掘出来。

我喜欢 Dan McNevin的答案 ! 我现在也在一起使用Git和 Dropbox,我在 。bash_profile中使用了几个别名。所以我的工作流程如下所示:


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

这些是我的化名:


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'

我们使用这里方法, 上的共享文件夹

一小组成员可以从同步同步的仓库中提取并创建一个本地克隆。 一旦工作单元完成,我们就回到原点。

一件事我现在缺少的是一个很好的方法来在一个 E-mail 随change-set一起发送的信息推送到原点一旦产生。 我们正在使用googlewave手动跟踪更改。

还有一个开源项目( 跨平台 [Linux, Mac, Win] 脚本的集合),它使用几个命令来完成仓库管理的所有nitty-gritty细节。

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

检查项目wiki和手册以获得完整的命令参考和教程。

相关加密的远程, 备份我使用 hg ( 或者 Git ) + TrueCrypt + dropbox.

最酷的一件事情是,收存箱不同步整个TrueCrypt容器如果修改你的代码的一小部分。 同步时间大致与更改的数量成比例。 尽管它是分组密码的加密,TrueCrypt + 下拉框做优秀的组合用法+ 块级同步。

其次,单一加密容器不仅增加安全性,它还减少了存储库损坏的机会。

注意但是你要务必小心不具有安装升降梭箱运行时的容器。 如果 2个不同客户端向容器签入不同版本,解决冲突也会很痛苦。 使用它来备份,不用于一team,所以,很实用,对于单个 person.

安装:

  • 创建一个文本容器( 多个千兆字节)
  • 在Truecrypt首选项下,取消选中 preserve modification timestamp *.
  • 按照 Dan ( http://stackoverflow.com 1961515/781695 )的要求创建一个存储库

使用方法:

  • 退出 Dropbox
  • 装入容器,推动你的更改,卸载
  • 运行 dropbox

P.S 。取消勾选该 preserve modification timestamp 告诉收存箱,文件已经修改,它应该是同步取得的。 it,请注意,安装在容器中修改了时间戳即使你没有更改任何 file. 如果你不想这样做,只需将卷挂载为 read-only

...