2012-04-23 79 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