2016-04-25 11 views
0

Я пытаюсь автоматизировать вытягивание последней версии нашего кода из битбакета с помощью git.exe через psake в Powershell, но я борюсь с рядом проблем.git и psake от Powershell

У меня есть следующий код в задаче:

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 от моего clone, но как это сделать? Есть ли способ: a) вызвать git из моего текущего местоположения и применить его к определенной папке клонов? или b) если a) не может быть сделано, как мне изменить папку в psake?

Предполагая, что я могу исправить первую проблему, как я могу узнать точную ошибку, возвращаемую из git. Просто получение Исключения: С bitbucket.org слишком расплывчато.

Есть ли лучший способ вывести мой код из битбакета? Должен ли я назвать git bash (для Windows), используя psake из Powershell? Это лучше? Если да, то как мне его вызвать с помощью конкретной командной строки.

Если вы хотите, чтобы я предоставил дополнительную информацию, пожалуйста, дайте мне знать.

Update 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: \ работа \ MyCompany \ buildapp не клонировали папку. Это подпапка клонированной папки.

Мне нужно иметь возможность называть git в то время как в c:\work\mycompany\buildapp (как это работает мой скрипт), но мне нужно git, чтобы вытащить данные из c:\work\mycompany\.

Надеюсь, что это проясняет мой вопрос.

Спасибо.

UPDATE 2:

следующие командные строки Git работают отлично работает в командной строке вызывается из любой папки:

git clone [email protected]: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 
     [email protected]: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 

К сожалению, исключение не говорят нам много.

Я пробовал различные комбинации с кавычками/двойной цитатой с аргументами, но безрезультатно.

Любые идеи?

+0

Есть ли еще эта ошибка? Или выше или ниже этого фрагмента? Это подобрало ваш пульт, поэтому он должен находиться в вашем рабочем каталоге git. Возможно, вам не хватает необходимых учетных данных? –

+0

Из git -h output: '[--git-dir = ] [--work-tree = ]', поэтому вам просто нужно указать те, которые будут запускать git в любом месте. Альтернативой было бы использовать Invoke-WebRequest, чтобы получить zip с последним источником из битбакета. Я думаю, – stijn

+0

@EtanReisner - Нет, к сожалению, это полная ошибка, которая была отображена. Я изменил свой ssh, чтобы не перефразировать и не проверить его, и он работает так, как ожидалось, поэтому я не думаю, что это учетные данные. Любые другие идеи? – Thierry

ответ

0

Отправляю свой собственный ответ, но большое спасибо @etanreisner & @spijn за помощь и предложения.

Огромное количество времени было потрачено впустую на эту проблему, и все это было до единого! Запуск моих скриптов непосредственно в ISE. Это было любезно подчеркнуто мной Дэйвом Уайаттом после того, как я опубликовал отчет об ошибках в psake. Вот что он сказал:

Is this happening from the powershell.exe console, from the ISE, or both? The ISE treats any console application that writes to the stderr stream as an exception, but powershell.exe does not. (This is because powershell.exe is a win32 console application, and can just let that subsystem handle interaction with other console apps. The ISE has its own code to pretend to be a console when it's really a WinForms app, and the behavior is different. I believe Microsoft intends to fix this soon.)

Anyhow, git.exe writes to stderr all over the place, which is why I always keep a separate console open when I want to run git commands (so I don't have to stare at the red text all the time.)

Вот фактический вопрос, который я создал на GitHub: Psake always throws an exception when calling git.exe and trying to clone #174

После попытки следующее Powershell, а не ISE:

Гит Клон:

Exec { 
&('c:\program files\git\bin\git.exe') clone 
    [email protected]: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 
} 

Надеюсь, это поможет другим и не закончится тратить столько времени, сколько я сделал на что-то столь незначительное, но не очевидное, если вы не знаете об этом!