【问题标题】:'git clone' respects umask, except for top level project directory'git clone' 尊重 umask,除了顶级项目目录
【发布时间】:2012-05-25 03:07:09
【问题描述】:

我想克隆一个 git 项目(比如来自 github),并让顶级目录可以按组写入。

我尝试了几种不同的方法。首先,只需在克隆前设置 umask。

$ umask
0002

然后我创建的文件可以按组写入

$ touch test
$ ls -l test
-rw-rw-r-- 1 user group 0 2012-05-17 09:32 test

现在我试试git clone

$ git clone git@github.com:user/repo.git
Cloning into repo... [succeeds]

但是克隆目录不可按组写入。

$ ls -ld repo
drwxr-xr-x 11 user group 4096 2012-05-17 09:32 repo

我在具有 775 权限的目录中使用git init --shared=umask(应该已经是默认值)创建的 repo 尝试了同样的事情。推送到github后git clone得到同样的结果。

这没什么大不了的,我可以在结帐脚本中进行 chmod。但是,如果有正确/内置的方法可以做到这一点,那就更好了。 Git 是 Ubuntu 11.04 上的 1.7.4.1 版本。

感谢任何想法或链接。我看到了this post, but it uses chmod,我还没有找到更多关于此的内容。谢谢!

【问题讨论】:

    标签: linux git permissions


    【解决方案1】:

    尝试为克隆命令设置全局“core.sharedRepository=group”:

    git -c "core.sharedRepository=group" clone git@github.com:user/repo.git
    ls -ld repo/.git
    drwxrwsr-x 8 user user 4096 Jul  4 22:16 repo/.git/
    

    【讨论】:

    • 嘿@fork0,感谢您的回复。由于我的 umask,我的 .git 目录和所有项目文件已经是可组写入的。为了澄清,我试图让项目顶级目录可组写入(即ls -ld repo 将显示drwxrwxr-x)。设置core.sharedRepository=group 与后台git init --shared=group 的作用相同,并且不会使顶级目录可按组写入。
    • 是的,它不能。克隆目标目录的创建是无条件的mkdir(work_tree, 0755)。我不确定这是故意的,所以我要在 git 邮件列表上询问。同时,您可以在 builtin/clone.c 中更改 mkdir 以使用 0777
    • 您最后的评论一针见血。目前这是不可能的。谢谢!
    • @r_2:仅当前。正在修复中,补丁已经提交。在官方 repo 中提交 id:45d4fdc2dc74c657a9c2e95bf04aed539fdcb0a4。尚未在主线中被接受,但看起来不错。
    • @AntonyStubbs:您的意思是“更新答案”吗?此外,从 v1.7.11.3 开始,提交已经在主线中,所以“你目前可以”。
    【解决方案2】:

    这是由于一个错误,已在 git >= v1.7.11.3 中修复

    见: https://github.com/git/git/commit/45d4fdc2dc74c657a9c2e95bf04aed539fdcb0a4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2011-11-10
      • 1970-01-01
      • 2017-05-15
      • 2022-11-27
      相关资源
      最近更新 更多