想问一下各位是怎么让 SVN 或者 GIT 保留 Linux 文件权限的。
背景: 十一期间帮朋友解决一个问题,他们的知识库是用 WordPress 搭建的(which is a stupid choice),历史原因没有用 Wiki ,中间还间断自己根据需求开发了一些插件,自己重新修改过主题,总之各种更改。现在他们想把这个知识库开放给合作伙伴使用,而且对其进行更进一步的开发,部分合作伙伴会参见进来协同开发。
以前他们对这个 WP 系统预想的比较简单,就是一个纯粹的知识存档和检索的系统,一直是单人开发,当初也没怎么重视,都是怎么简单怎么来,没有进行过版本控制和配置管理,最多也就简单进行备份。开发的流程也很简单:开发者自己在虚拟机的 Ubunutu 8.04 里面修改 -> tar 包 + .SQL 文件 -> Ubuntu 8.04 服务器部署,这个过程由于 tar 包能够完整的权限,基本上没有问题。
现在他们想把开发人员增加到 3 人。十一期间他们尝试了用 SVN 进行版本管理,将当前 Ubuntu 8.04 服务器上运行的版本用 tar 打包并导出了.SQL 文件作为后续开发的基线,个人负责开发各自功能模块,然后提交到 SVN 服务器,最后从 SVN export 出来放回到 Ubuntu 8.04 服务器上部署。
现在的问题是:在用 SVN 管理的过程中,发现 SVN 不能够保留 Ubuntu 下文件和文件夹权限。我做了个简单的实验,从基线中恢复到本地虚拟机里面的某个文件夹原来的权限是 744 ,将权限变更为 766 ,然后导出再 Commit 到 SVN 服务器的时候, SVN 提示没有任何 update 。
在 StackOverflow 里面找了半天,发现 SVN 和 Git 都默认不保留文件权限,也有介绍使用 asvn 等第三方模块的:
http://stackoverflow.com/questions/56149/storing-file-permissions-in-subversion-repository
http://stackoverflow.com/questions/3207728/retaining-file-permissions-with-git
我想问一下各位是如何处理这个问题的?特别是各位 CM 们,最好是使用 SVN 原生的方法。
PS:他们的系统可能比较特殊,内部封闭使用,不能连外网,系统也是多样的,有的时候是 Win XP ,有的时候是 Win 7 ,有的时候是 Ubuntu 8.04 ,这个是历史原因。
1
gsls200808 2016-10-08 12:54:26 +08:00 via Android 1
我记得 git 更改权限提交会进版本
|
2
jhaohai 2016-10-08 12:57:39 +08:00 via iPhone 1
git 本来就有的啊
|
3
FifiLyu 2016-10-08 13:02:10 +08:00 1
Linux 下 git 是会保留文件权限的。
|
4
kokutou 2016-10-08 13:02:32 +08:00 via Android 1
git 有。。
|
5
Clarencep 2016-10-08 13:06:27 +08:00
git 大法好...
|
6
tracyone 2016-10-08 13:07:00 +08:00 via Android
8.04 ……这个系统上的 git 说不定还真没有权限的区分,楼主不知道怎么想的用这个停止维护的系统
|
7
shijingshijing OP @gsls200808
@jhaohai @FifiLyu @kokutou 刚看到那个 StackOverflow 上面的帖子是 6 年前的。。。 应该是后来 Git 加上去的吧。我看那个 SVN 的帖子说 SVN 不保留权限也是有道理的,系统太多了,要考虑 NFS , POSIX 各种兼容什么的,还要考虑漏洞啥的,不知道 Git 是怎么处理的。 对了,打的匆忙忘记说了,他们现在用的配置管理服务器是 Visual SVN Server ,因为还有其他项目是挂在这个 Visual SVN Server 系统下的,所以他们倾向于用这个 Visual SVN Server 来管理,人员的权限都已经配好,对他们来说就是新加一个 Repo 的问题。如果让他们单开 Git 可能要重新考虑一下。 最后,我对这个问题主要是有几个方面的考虑: 1 ,是 SVN 的问题还是系统的问题,我做实验用的是本地 Win XP 系统 + VMWare 跑 Ubuntu 8.04 虚拟机(直接 VMware 拷过来的)+ TortoiseSVN 客户端,服务器 Win 2008 R2 + Visual SVN Server ,这个配置的目的是尽量模拟他们的环境。第一次用的是他们正在使用的老版本 Visual SVN Server ,后来我又重新部署了官网的最新版 Visual SVN Server(32 bit),还是一样。 2 ,按照 @FifiLyu 的回复, Linux 下面 Git 是能够保留权限的,请问 Win 下面 Git 能够完整保留权限么?因为他们的配置管理服务器做了 RAID5 ,所以尽量跟这个 Visual SVN Server 放在同一台服务器上。 3 ,如果折腾完了,我还想了解一下, Linux 下面最新版的 SVN 是否能够和 Git 一样完整保留权限。 最后,他们是做嵌入式的公司,这个知识库包含了很多客户的 Case Study ,不方便对外,所以只能够内部封闭使用。 @tracyone 不是我想用这个 Ubuntu 8.04 系统,是他们有很强制性的理由用这个,这个上面还跑了其他的比较重要的 Service ,迁移成本很高。 综上,目前我估计会建议他们干脆新开一台 Linux 服务器,专门用来放 Git 和 Apache 跑 WP 。 |
8
sutra 2016-10-08 14:27:57 +08:00 1
svn propset svn:executable
svn propdel svn:executable |
9
shijingshijing OP @sutra 这个是针对 x 属性的, stackoverflow 里面有说,如果是普通文件,不加可执行,是没办法保留的原始权限的。
|
10
ceyes 2016-10-08 14:55:39 +08:00 via iPhone 1
换个思路,可以在 makefile 里做操作把相应的权限设置好
|
11
shijingshijing OP @ceyes stackoverflow 里面介绍的 metadata file 也是这个思路,不过还是先试试看 git 吧。
|
12
Balthild 2016-10-08 16:27:54 +08:00
git config --global core.filemode true
|
13
zxq1002 2016-10-08 16:33:28 +08:00 via Android
Git 可以保留权限,但需要在 Linux 上
|
14
Sasasu 2016-10-08 17:12:41 +08:00 via Android
|
15
FifiLyu 2016-10-08 17:30:48 +08:00
楼主,在 Windows 上 Git 是不能保留权限的。 SVN 估计在所有平台上都不能保留权限,多年未使用 SVN 了也不是非常全定。
你的情况涉及太多方面,大家都没法针对性的回复你的问题,只能大概聊聊工具本身相关的内容。 最后,还是建议用全新的虚拟机安装 Ubuntu+Git 做服务端。 |
16
shijingshijing OP @FifiLyu 虚拟机做配置管理不好使吧。。。
|
17
sweelia 2016-10-08 23:45:52 +08:00 via Android
@shijingshijing 可以考虑专门写个脚本批量自动修复权限。这个脚本进代码库,每次拉完代码执行一下就好
|
18
shijingshijing OP @sweelia 是的,前面的 metadata 管理也是这样做的,关键是到时候不是我用,也不是我来维护。。。
|
19
FifiLyu 2016-10-09 09:32:42 +08:00
@shijingshijing 其实,虚拟机是可以的。看情况选择合适的方法吧!
|