2010-05-17 59 views
1

我从OS X压缩了一个rails项目,并将它发送给在Windows上工作的同事。他更新了源代码,压缩了整个项目文件夹并将zip文件发回给我。在OS X和Windows之间更改了文件权限

解压缩项目后,我发现文件权限信息有点丢失。例如,script/server-rwxr-xr-x更改为-rw-r--r--。在mac和windows之间传输文件时,有没有办法保护文件许可标志?

感谢

回答

3

ZIP文件格式不保留权限。 * .tar(和* .tar.bz2和* .tar.gz)格式确实保留了权限;但是,大多数Windows机器并不了解它们,并且不能保证当它们解除压制时,然后重新保留权限将被保留(但是如果您在任何其他UNIX计算机上解压归档文件,它们将拥有与最初涂柏油时相同的权限)。但是,由于您正在协作处理源代码文件,因此您应该使用某种版本控制系统(VCS),也称为源代码管理(SCM)。根据您更喜欢集中式版本控制系统(CVCS)还是分布式版本控制系统(DVCS),有几种可能的选择。对于CVCS,Subversion(SVN)版本控制系统是一个明显的选择。对于DVCS,GitMercurial值得考虑。据我所知,这些版本控制系统将保留权限(或允许权限通过属性明确设置 - 例如“svn:executable”)。

+0

我不明白'hg'如何保留许可标志。项目树内是不是'.hg'只是另一个文件夹?那么,这是否意味着我应该只压缩并发送'.hg'文件夹,而不是整个项目树?谢谢 – ohho 2010-05-17 03:37:22

+1

@霍勒斯,没有。您在存储库之间推/拉变更。所有这些版本控制系统都存储元数据,除元数据外,推/拉应保留权限。 – 2010-05-17 07:27:16

0

ZIP确实包含文件权限,但是我遇到的所有程序仅保存压缩文件时的权限,这些文件在压缩的操作系统和文件系统上。因此,在Windows上将不会有r/w/x标志,只有目录(目录并不总是作为单独的条目保存,Windows中的“压缩文件夹”不会)。

我制作了一个命令行实用程序,可以在ZIP中将文件设置为可执行文件,因为我想从Windows创建在MacOS和Linux上有效的发行文件。创建的文件将在所有3个操作系统上正常工作。

该实用程序可从http://www.galaxy-forces.com/zip_exec.zip下载。 C++源可从同一个站点获得。

希望它能帮助别人。

/Ronnie