2012-04-23 80 views
0

我正在使用Fabric运行ANT任务&然后上传到GitHub。该脚本已经工作,但不一致,因此很难理解为什么。无法从GitHub的Fabric脚本提交

我一直在这里看到织物的过程是;

  1. git add
  2. git commit
  3. git push

但我一直看到这个输出;

# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 

Fatal error: local() encountered an error (return code 1) while executing 'git commit -m "Latest Selenium screenshots for View Employee"' 

Aborting. 

我写的函数看起来像这样;

def deploy(): 
    process = test() 
    os.chdir('\\Documents and Settings\markw\GitTest') 
    with cd('\\Documents and Settings\markw\GitTest'): 
     local('git reset --soft HEAD') 
     local('git pull origin master') 
     local('git add -A') 
     local('git commit -m "Latest Selenium screenshots for %s"' % (process)) 
     local('git push -u origin master') 

什么我错过我的承诺,在这里导致问题?是否有另一个标志结合已经排队的提交?

+0

您的路径看起来很奇怪:更好的r'\ docs'或'\\ docs' – guettli 2012-04-23 12:41:48

回答

2

没有要提交的文件,所以git返回一个非零的错误代码。这导致结构认为前面的命令失败了,所以它会中止。老实说,除非你完全确定git是错误的,并且有改变,否则我很想相信你的脚本实际上并没有发生故障。

如果您确定有文件要提交,您应该调查为什么这些更改未被提取。

如果您想织物更友好的方式退出,你可以尝试这样的事:

 
from fabric.api import settings 
import sys 

def deploy(): 
    process = test() 
    os.chdir('\\Documents and Settings\markw\GitTest') 
    with cd('\\Documents and Settings\markw\GitTest'): 
     with settings(warn_only=True): 
      local('git reset --soft HEAD') 
      local('git pull origin master') 
      local('git add -A') 
      commit = local('git commit -a -m "Latest Selenium screenshots for %s"' % (process)) 
      if commit.failed: 
       print 'Nothing to commit, exiting...' 
       sys.exit(0) 
      else: 
       local('git push -u origin master') 

我还添加了一个-a到您的git的承诺行,所以它也提交修改以及添加的文件。

此外,我不确定你的os.chdir()行的重点。

+0

谢谢。我仍然试图了解Git&tortoise SVN之间的差异,所以我认为它应该跟踪更新。首先运行的进程会生成一个路径为'images \ 253 \ View_Employee_Use_Case \ 1.png'的图像,其中文件夹号是修订版。这些文件可能会更新,所以如果名称不变,更新的版本会被忽略?这是我能想到的唯一问题。 – 2012-04-23 13:37:58

+0

'用cd()'不会改变目录,所以这就是为什么我有'os.chdir()'。我打算用cd()去掉''但还没有完成。 – 2012-04-23 13:43:50

+1

迟到的响应,但只是你知道,'cd'上下文管理器用于改变远程机器上的目录。它没有为你工作的原因是因为你使用'local'而不是'run'或'sudo'。 – majackson 2012-05-02 17:25:02