如何让 SVN 或者 GIT 保留 Linux 文件权限 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
shijingshijing
V2EX    git

如何让 SVN 或者 GIT 保留 Linux 文件权限

  •  
  •   shijingshijing 2016-10-08 12:18:17 +08:00 4920 次点击
    这是一个创建于 3295 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问一下各位是怎么让 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 ,这个是历史原因。

    19 条回复    2016-10-09 09:32:42 +08:00
    gsls200808
        1
    gsls200808  
       2016-10-08 12:54:26 +08:00 via Android   1
    我记得 git 更改权限提交会进版本
    jhaohai
        2
    jhaohai  
       2016-10-08 12:57:39 +08:00 via iPhone   1
    git 本来就有的啊
    mN71eOOprFyMsnPx
        3
    mN71eOOprFyMsnPx  
       2016-10-08 13:02:10 +08:00   1
    Linux 下 git 是会保留文件权限的。
    kokutou
        4
    kokutou  
       2016-10-08 13:02:32 +08:00 via Android   1
    git 有。。
    Clarencep
        5
    Clarencep  
       2016-10-08 13:06:27 +08:00
    git 大法好...
    tracyone
        6
    tracyone  
       2016-10-08 13:07:00 +08:00 via Android
    8.04 ……这个系统上的 git 说不定还真没有权限的区分,楼主不知道怎么想的用这个停止维护的系统
    shijingshijing
        7
    shijingshijing  
    OP
       2016-10-08 13:32:57 +08:00
    @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 。
    sutra
        8
    sutra  
       2016-10-08 14:27:57 +08:00   1
    svn propset svn:executable
    svn propdel svn:executable
    shijingshijing
        9
    shijingshijing  
    OP
       2016-10-08 14:46:28 +08:00
    @sutra 这个是针对 x 属性的, stackoverflow 里面有说,如果是普通文件,不加可执行,是没办法保留的原始权限的。
    ceyes
        10
    ceyes  
       2016-10-08 14:55:39 +08:00 via iPhone   1
    换个思路,可以在 makefile 里做操作把相应的权限设置好
    shijingshijing
        11
    shijingshijing  
    OP
       2016-10-08 15:29:23 +08:00
    @ceyes stackoverflow 里面介绍的 metadata file 也是这个思路,不过还是先试试看 git 吧。
    Balthild
        12
    Balthild  
       2016-10-08 16:27:54 +08:00
    git config --global core.filemode true
    zxq1002
        13
    zxq1002  
       2016-10-08 16:33:28 +08:00 via Android
    Git 可以保留权限,但需要在 Linux 上
    Sasasu
        14
    Sasasu  
       2016-10-08 17:12:41 +08:00 via Android
    git 可以保留权限。

    我见过有人为了解决 zip 不支持权限,多维护了一个 permission.sh
    mN71eOOprFyMsnPx
        15
    mN71eOOprFyMsnPx  
       2016-10-08 17:30:48 +08:00
    楼主,在 Windows 上 Git 是不能保留权限的。 SVN 估计在所有平台上都不能保留权限,多年未使用 SVN 了也不是非常全定。

    你的情况涉及太多方面,大家都没法针对性的回复你的问题,只能大概聊聊工具本身相关的内容。

    最后,还是建议用全新的虚拟机安装 Ubuntu+Git 做服务端。
    shijingshijing
        16
    shijingshijing  
    OP
       2016-10-08 23:30:46 +08:00
    @FifiLyu 虚拟机做配置管理不好使吧。。。
    sweelia
        17
    sweelia  
       2016-10-08 23:45:52 +08:00 via Android
    @shijingshijing 可以考虑专门写个脚本批量自动修复权限。这个脚本进代码库,每次拉完代码执行一下就好
    shijingshijing
        18
    shijingshijing  
    OP
       2016-10-08 23:47:06 +08:00
    @sweelia 是的,前面的 metadata 管理也是这样做的,关键是到时候不是我用,也不是我来维护。。。
    mN71eOOprFyMsnPx
        19
    mN71eOOprFyMsnPx  
       2016-10-09 09:32:42 +08:00
    @shijingshijing 其实,虚拟机是可以的。看情况选择合适的方法吧!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5268 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:12 PVG 15:12 LAX 00:12 JFK 03:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86