如何使用git进行文件同步?

时间:2010-01-23 18:37:16

标签: git synchronization

我需要分布式文件同步。首先,有什么建议吗?我的想法是git,因为速度是一个问题。

我的git知识非常简陋,但这就是我所做的。

我下载了便携式git(我在PC上,所以msysgit)。 我将副本放入c:\ root \ git并将副本放入c:\ root \ git c:\ client \ git \

我创建了一个目录c:\ temp \ root \ content并在其中创建了一些文件

c:\root\content>..\git\bin\git.exe init
c:\root\content>..\git\bin\git.exe add *
c:\root\content>..\git\bin\git.exe commit -f
c:\client>..\git\bin\git.exe clone file:///c:\root\content

这会创建一个内容目录,但它是空的!提交给root的文件不存在。

当我执行拉动命令时,我得到了

C:\temp\client\content\content>c:\temp\client\git\bin\git.exe pull
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Your configuration specifies to merge the ref 'master' from the remote, but no such ref was fetched

显然我错过了一个概念。发生了什么事?

5 个答案:

答案 0 :(得分:5)

检查http://sparkleshare.org/

Sparkleshare为您提供类似于Dropbox的用户体验,除了它的底层同步引擎是git。这不是最稳定的东西,但你可以看它的日志输出,看看它将实现无缝同步的git命令。一旦你学会了这些,你就可以简单地创建自己的稳定同步脚本。我认为大多数sparkleshare的问题都在GUI中。

答案 1 :(得分:4)

git-annex可能是另一个需要考虑的工具。

答案 2 :(得分:1)

Git 可以成为在开发和生产之间同步源的好工具,原因之一是:它可以轻松地在生产中“热修复”并将修复程序检入树中。当然,您应该始终在开发或测试环境中重现该错误并在那里修复它,但有时您不能。

而不是git add *,请使用git add .

在提交之前使用git status以确保为提交暂存相应的文件。

答案 3 :(得分:1)

我只是想重现你的步骤。

git commit -f对我刚安装的1.6.5.1版本没有任何作用。但它应该给你一个很长的错误信息。

mkdir repo1 repo2
cd repo1
git init
( create files )
git add *
git commit -m "initial commit"
cd ..\repo2
git clone ..\repo1 .

我在repo1中创建的文件显示在repo2

答案 4 :(得分:1)

正如davr在评论中建议的那样,您可以尝试Unison。通过having all your hosts sync with a central hub,您可以进行n路同步。 Unison不保留历史记录,因此如果您需要,您应该安排rdiff-backup每天在您的一台主机上运行(最好是哪一台拥有最大,最可靠的硬盘)。这两个工具都有Windows二进制文件。

我还考虑过使用Git进行文件同步,但是手动添加,提交,提取和合并是太多工作(一个工具只有在你使用时才有用)。在我的脑海中,我设计了一个小的Python或Ruby系统托盘进程来监视你的回购更改,肮脏的时候唠叨你,在没有变化的时候有自动提交的选项,还做自动推/拉。解决合并冲突将使用现有工具完成。

有关详细信息,请查看this article我刚刚撰写了有关个人文件同步的文章。