2008-08-29 38 views
7

尽管主要是Windows用户,但我是rsync的忠实粉丝。现在,我不想争论rsync与任何其他工具的优点......这不是我的观点。Win32 rsync端口的技术障碍

我发现在Windows上运行rsync的唯一方法是通过一个构建在Cygwin上运行的版本,并且由于Cygwin存在Unicode问题,rsync也是如此。

是否有人熟悉rsync的工作方式来说明是否有任何真正的技术编程障碍将rsync移植到本机Win32二进制文件?

或者,它可能是从来没有足够的兴趣,从Windows用户关心移植它?

部分我问,因为我正在考虑尝试开始一个端口的任务,但我想确保没有什么我错过了为什么它可能不可能。

回答

5

窗口锁定打开文件的方式可能会导致需要挂钩到卷影拷贝服务的问题。

大约两年前,这位研究员将算法移植到了C#中。我没有看过代码(或提供的二进制文件),但它可能是一个开始查找或尝试联系人的地方。
http://www.russiantequila.com/wordpress/?p=8

+0

快速更新以加速某些人随意浏览:作者@kolosy在2009年将源文件放在github上,从那以后,唯一的活动一直在2010年中以前由Matthew Steeples更新:https:// github.com/MatthewSteeples/rsync.net – Tao 2011-10-20 15:07:54

0

你见过这样的:

http://www.itefix.no/i2/taxonomy/term/39

我用cwrsync没有任何问题(而且与许多常用的cygwin的痛苦),但我还没有得到任何需要的Unicode文件名,所以我没有看到这个问题。

我真的不知道为什么没有原生的Win32端口,但我之前看了一下源代码,因为我在C#中实现了类似的增量复制系统。正如人们所期望的来自辉煌的* nix黑客世界,源代码很大程度上是单字符变量名称,并且完全没有评论,这不是可怕的帮助,并且可能会对愿意的搬运工非常不利。

0

我一直在评估努力承担win32端口。我不相信任何重大的东西都会阻止它,但是来自rsync mailing list和另一个讨论的证据都表明严重依赖于unix fork()系统调用。使用线程似乎是win32的方式。

Threads vs. Fork discussion

+0

“使用线程似乎走向win32的方式” - 或I/O完成端口,如果你想扩展真的很好... – 2009-04-08 19:18:16

1

(免责声明:我保证,我不会谷歌自己,但Google Analytics(分析)把我带到这里)

通过我的rsync移植到.NET(SIG11的链接是我的博客)去了。没有技术障碍,只有实际的障碍。正如已经说过的那样,代码相当密集。难以遵循,并且完全缺乏评论。我很高兴能够提供我的工作,但不幸的是,由于它是商业努力的一部分,所以它的形状并不明显。

我在很多场合都混淆了对协议进行逆向工程的想法,并且做了一个与现有协议有线兼容的开创性实现,但是...更清洁一点。我甚至已经开始了一个wiki,但是......正如你可以从内容不足那里看到的,其他项目已经被优先考虑。如果有人愿意和我一起工作,那可能是我需要走的动力。

该工具的概念很好,它提供的功能也是如此,但它在* ix空间之外相当有限,并且肯定可以从api中受益。

维基链接以供参考:

http://www.russiantequila.com/wiki/index.php?title=Main_Page

+0

Kolosy,我很想得到一个持有你有什么副本。如果可以的话,甚至可以伸出援助之手。我同意,使用API​​的清洁版本会很棒,但说实话,我的首要任务是Windows版本,它不依赖于Cygwin – 2009-04-08 21:19:38

0

我会很感激的rsync到MS-Windows中的一个端口,以使得它可以使用Visual Studio来构建。我随机遇到各种协议错误,有时会间歇性地发生。我正在使用rsync将sw分发到大约200台机器的网格中,并且通常会遇到十几个故障。我正在使用GCC 4.4.2和最新的cygwin来构建rsync v3.0.7。如果我可以试验一个不需要cygwin的版本,它会帮助我很多。这是因为网格中的机器已经有另一个基于cygwin的应用程序运行,这与我所使用的版本不同。

花了一些时间在rsynv邮件列表上,意见似乎被分解为MS-Windows上的协议错误的原因。有人说这是一个rsync中的错误,它没有做一个干净的套接字关闭,一个刚刚修复的错误。其他人说,这是rsync中的一个基本协议错误,其中客户端不告诉服务器它已完成,它只是关闭,导致MW-windows服务器在套接字上获得RST信号,这在Unix上不会发生。