2017-01-09 21 views
3

Я читал об этом post, чтобы проверить стоимость доставки на определенную дату. Я был в состоянии получить ревизию фиксации SHA кода к конкретному коммит, который я нацеливание на кассе, но когда я пытаюсь на самом деле выполнить команду мерзавец линии проверки, я получил ошибку:Как запустить git checkout в ant?

error: pathspec 'de957d59f5ebef20f34155456b8ab46f127dc345 ' did not match any file(s) known to git.

Не уверен, что это значит. Я бег этой команды муравьев 1.94 на моих окнах 7 Машины

Команда сценарий муравья выглядит следующим образом:

<target name="git.revlist" description="Revision list of repo for a particular timeframe" > 
    <exec executable="git" dir="${run.repo.dir}" failifexecutionfails="true" output="${output_commit_sha_file}" > 
     <arg line="rev-list -n 1 --before=${snapshot_before_date} ${repo_branch}"/> 
    </exec> 
    <loadfile property="output_commit_sha" srcfile="${output_commit_sha_file}" /> 
    <exec executable="git" dir="${run.repo.dir}" failifexecutionfails="true" > 
     <arg line="checkout ${output_commit_sha}"/> 
    </exec> 
</target> 

Если первое исполнение на самом деле получить код SHA (de957d59f5ebef20f34155456b8ab46f127dc345) успешно, но при попытке используйте это для вторых аргументов команды выполнения задач, чтобы выполнить описанную выше ошибку.

Любые идеи/рекомендации о том, чего я здесь не вижу. Как я уже упоминал, у меня есть несколько команд командной строки задач, которые выглядят так и используются для выполнения других задач, таких как git clone и git log, но, похоже, этого не хватает.

Заранее спасибо

+0

Вы абсолютно точно знаете, что это правильный ключ sha1, а текущий рабочий каталог находится в репозитории git, который вы считаете своим долгом? Можете ли вы выполнить команду вручную? –

+0

Да, спасибо – alestar

ответ

1

В сообщении об ошибке, я заметил пробел перед концом цитаты:

pathspec 'de957d59f5ebef20f34155456b8ab46f127dc345 ' 
               ^a space 

Я считаю, что атрибут <exec>output вставляет символ новой строки в конце файла вывод. <loadfile> позже преобразует новую строку в пространство.

Чтобы избежать иметь дело с пространством, рассмотреть вопрос о сохранении результатов git rev-list муравья свойства с помощью outputproperty вместо output:

<exec executable="git" dir="${run.repo.dir}" outputproperty="output_commit_sha"> 
    <arg line="rev-list -n 1 --before=${snapshot_before_date} ${repo_branch}"/> 
</exec> 
<exec executable="git" dir="${run.repo.dir}"> 
    <arg line="checkout ${output_commit_sha}"/> 
</exec> 

выше версия хороша, потому что она позволяет избежать необходимости создавать что хранит файл результаты git rev-list. Он также удаляет звонок до <loadfile>.

Кстати, вы можете использовать failonerror="true" вместо failifexecutionfails="true". failifexecutionfails по умолчанию true, так что его можно опустить. failonerror, однако, false по умолчанию. Добавление failonerror="true" в <exec> обычно является хорошей вещью.

+0

Привет, Чад, это определенно ответ, который я еще не могу проголосовать, но вы поняли это правильно. Я нашел трудный путь, но вы правы, вывод 'exec' вставляет новую строку в конец файла, что вызывает проблему. Я понимаю это, когда вручную копирую точный идентификатор SHA в строку 'arg. Кроме того, спасибо за совет, я не знал, что это было так для 'failonerror' и' failonerror'. FYI Я не могу c – alestar