1

我正在尝试使用 git.exe 通过 Powershell 中的 psake 自动从 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 返回的确切错误。刚刚得到 Exception: From 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 不是克隆文件夹。它是克隆文件夹的子文件夹。

我需要能够在其中调用 git c:\work\mycompany\buildapp(因为这是我的脚本运行的地方),但我需要 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/'
 }

但是当以这种方式调用时,pull 仍然不起作用:

 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

不幸的是,这个例外并没有告诉我们太多。

我尝试了各种带有引号/双引号和参数的组合,但无济于事。

有任何想法吗?

4

1 回答 1

0

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

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

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

无论如何,git.exe 会到处写入 stderr,这就是为什么当我想运行 git 命令时,我总是打开一个单独的控制台(这样我就不必一直盯着红色文本了。)

这是我在 github 上创建的实际问题:Psake 在调用 git.exe 并尝试克隆 #174 时总是抛出异常

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

Git克隆:

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

Git 拉取:

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

希望这对其他人有所帮助,并且不会像我在如此微不足道但不明显的事情上浪费太多时间,除非您意识到这一点!

于 2016-05-01T14:28:59.980 回答