无法使用本地操作tar + gzip git目录

时间:2014-03-26 15:45:26

标签: python deployment fabric

我正在尝试为基于Django的项目创建自动部署脚本。基本上一切正常,直到我试图压缩我的项目目录的步骤。 Fabric似乎执行命令,它不会返回任何错误。

以下是引起问题的一行:

local('git archive -v --format=tar HEAD | gzip > test.tar.gz')

我正在使用Windows和Cygwin来访问Unix命令。我尝试在项目的根目录(来自Cygwin)中执行相同的命令,并成功创建test.tar.gz(120 MB)。我还从项目的根目录(使用Cygwin)执行Fabric脚本,执行后我看到test.tar.gz被创建,但它只是空的(20字节)。

编辑:试图在我的同事Linux机器上运行相同的脚本,它运行得很好:S

编辑2:我试图在fabfile中执行而不是本地的subprocess.Popen命令,它正确地执行了我需要的东西..现在有一个问题,为什么在本地方法中使用相同的命令(在operations.py源中找到)不执行任务?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这里的问题是Cygwin's environment variableslocal()调用的系统shell不可用,

  

local只是一个关于内置使用的便利包装器   Python子进程模块,shell = True激活。如果你需要这样做   任何特殊情况,请考虑直接使用子进程模块。

这也是他们提供run()的原因。这使您能够在远程主机上运行shell命令。你可以(理论上)创建一个bash文件,调用Cygwin然后调用你的git archive命令。我会推荐这个,here就是原因。

如果您只需要调用git命令的能力,我强烈建议您使用msysGit。安装完成后,将PATH环境变量设置为指向msysgit bin所在的位置,以便从CMD调用git命令。