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 · 4603 次点击
    这是一个创建于 2960 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问一下各位是怎么让 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 本来就有的啊
    FifiLyu
        3
    FifiLyu  
       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
    FifiLyu
        15
    FifiLyu  
       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 管理也是这样做的,关键是到时候不是我用,也不是我来维护。。。
    FifiLyu
        19
    FifiLyu  
       2016-10-09 09:32:42 +08:00
    @shijingshijing 其实,虚拟机是可以的。看情况选择合适的方法吧!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1571 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:16 · PVG 01:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.