我和一个开发团队一起使用fabric来将代码部署到远程服务器上,每当一个新文件被创build并添加到git repo时,默认权限是-rw--r--r
,这使得其他开发者无法更新这个文件(所有用户都属于同一个主要组)。
我想要的权限是-rw-rw-r
(组可写),我试图在fabfile.py run("umask 002")
设置“umask 002”,但它不工作。 有没有解决这个问题,除了去编辑/etc/bash.bashrc
fab脚本的 [编辑-1] 输出
[devsrv] Executing task 'deploy' [localhost] local: bash -l -c "umask 002" [localhost] local: bash -l -c "git push" Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 279 bytes, done. Total 2 (delta 1), reused 0 (delta 0) To devsrv:/opt/git/xyzprojv1.git 8a7dcd5..141eb52 master -> master [devsrv] run: umask 002 [devsrv] run: test -d /opt/webapps/xyzprojv1 [devsrv] run: git pull [devsrv] out: remote: Counting objects: 3, done. [devsrv] out: remote: Compressing objects: 100% (2/2), done. [devsrv] out: remote: Total 2 (delta 1), reused 0 (delta 0) [devsrv] out: Unpacking objects: 100% (2/2), done. [devsrv] out: From /opt/webapps/../git/xyzprojv1 [devsrv] out: 8a7dcd5..141eb52 master -> origin/master [devsrv] out: Updating 8a7dcd5..141eb52 [devsrv] out: Fast-forward [devsrv] out: 0 files changed, 0 insertions(+), 0 deletions(-) [devsrv] out: create mode 100644 umask_test
看起来像织物在单独的shell中运行每个命令(虽然我不知道),我暂时通过重写以下格式更改文件系统的命令来解决此问题。 如果有人对织物如何做这个更好的解释,这将是非常有帮助的。
而不是使用
run("umask 002") run("git pull")
我已经改变了
run("umask 002 && git pull")
一切都如预期般运作
[编辑]
织物有这个http://www.fabfile.org/faq.html#my-cd-workon-export-etc-calls-don-t-seem-towork
所以每个调用都有自己独特的shell会话。 这就是为什么在呼叫上设置的umask对其他后续呼叫没有影响
建立在Ryu_hayabusa的回答,正如在编辑链接中指出的,你也可以使用prefix
上下文管理器:
with prefix('umask 002'): run('git pull') # Other code here, also umasked
[编辑]
在BigToach中添加注释 – 多个语句可以组合在一行中,如下所示:
with cd('/some/dir'), prefix('umask 002'): run('git pull')