来自Powershell的git和psake

时间:2016-04-25 23:46:09

标签: git powershell msbuild psake

我正试图通过Powershell中的psake使用git.exe自动从bitbucket中提取最新版本的代码,但我正在努力解决一些问题。

我在任务中有以下代码:

    Exec {
       &('c:\Program Files\Git\bin\git.exe') pull --progress --no-rebase -v origin
    }

但是我收到以下错误:

Error: 25/04/2016 22:51:02:
At C:\work\mycompany\buildapp\psakefile.ps1:117 char:5 +     
&('c:\Program Files\Git\bin\git.exe') pull --progress --no-rebase -v origin
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
[<<==>>] Exception: From bitbucket.org:mybitbucketusername/work

我认为那是因为我没有从我的克隆文件夹中调用git.exe但是我该怎么做?有没有办法a)从我当前的位置调用git并将其应用到特定的克隆文件夹?或者b)如果a)无法完成,如何在psake中更改文件夹?

假设我可以解决第一个问题,我怎么能找出从git返回的确切错误。只是得到例外:来自bitbucket.org太模糊了。

有没有更好的方法从bitbucket中提取代码?我应该使用Powershell的psake来调用git bash(对于windows)吗?那个更好吗?如果是这样,我如何使用特定命令行调用它。

如果您希望我提供更多信息,请告诉我们。

更新1:

这是我致电git pull

时得到的结果
Error: 26/04/2016 15:46:30: 
At C:\work\mycompany\buildapp\psakefile.ps1:120 char:5 +     
&('c:\Program Files\Git\bin\git.exe') pull +
[<<==>>] Exception: There is no tracking information for the current branch.

这是预期的,因为c:\ work \ mycompany \ buildapp不是克隆的文件夹。它是克隆文件夹的子文件夹。

我需要能够在c:\work\mycompany\buildapp中调用git(因为这是我的脚本运行的地方)但我需要git从c:\work\mycompany\提取数据。

我希望上面的内容澄清了我的问题。

感谢。

更新2:

以下git命令行可以完美地运行从任何文件夹调用的命令行:

git clone git@bitbucket.org:myusername/work.git "c:/Work/"

git --git-dir=c:\work\.git --work-tree=c:\work pull origin master

以下适用于PSake:

 Exec {
   &('c:\Program Files\Git\bin\git.exe') clone
      git@bitbucket.org:myusername/work.git 'C:/Work/'
 }

但是当这样调用时,拉仍然不起作用:

 exec {
   &('c:\program files\git\bin\git.exe') --git-dir=c:\work\.git 
      --work-tree=c:\work pull origin master
 }

我仍然收到错误:

Error: 29/04/2016 10:06:36: 
At C:\temp\buildapp\psakefile.ps1:124 char:8 +        
&('c:\program files\git\bin\git.exe') --git-dir=c:\work\.git - ... +  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
[<<==>>] Exception: From bitbucket.org:myusername/work

不幸的是,异常并没有告诉我们多少。

我尝试过各种带引号/双引号的组合,但没有用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要发布我自己的答案,但非常感谢@etanreisner&amp; @spijn的帮助和建议。

在这个问题上浪费了大量的时间,这完全取决于一件事!直接在ISE中运行我的脚本。在我发布关于psake的错误报告后,Dave Wyatt向我强调了这一点。这就是他所说的:

  

这是从powershell.exe控制台,ISE还是两者都发生的? ISE将任何写入stderr流的控制台应用程序视为异常,但powershell.exe不会。 (这是因为powershell.exe是一个win32控制台应用程序,可以让该子系统处理与其他控制台应用程序的交互.ISE有自己的代码,当它真的是一个WinForms应用程序时假装成一个控制台,并且行为是不同的。我相信微软打算尽快解决这个问题。)

     

无论如何,git.exe会在整个地方写入stderr,这就是为什么我想在运行git命令时始终保持单独的控制台打开的原因(所以我不必盯着所有的红色文本时间。)

以下是我在github上创建的实际问题:Psake always throws an exception when calling git.exe and trying to clone #174

在Powershell而不是ISE中尝试以下操作后:

Git Clone:

Exec {
&('c:\program files\git\bin\git.exe') clone
   git@bitbucket.org:myusername/work.git "C:\Work"
}

Git Pull:

exec {
&('c:\program files\git\bin\git.exe') --git-dir="c:/work/.git" 
   --work-tree="c:/work/" pull origin master
}

希望这有助于其他人并且最终不会浪费尽可能多的时间来做一些如此微不足道的事情,除非你意识到这一点!