質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.01%

[SourceTree]pre-commit内でバッチファイルを呼び出したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 756

fukkun0412

score 35

質問内容

現在SourceTreeのpre-commitを使用して、ファイルをコミットする時に特定のファイルがあった場合、そのファイルをリネームして別のファイルに書き換える処理を実装したいのだが、SourceTree上でコミットするとbash: upload.bat: No such file or directoryとエラー表示され、コミットされない。

pre-commitを.shにして、SourceTreeのターミナルで起動させると正常に動作した。

・OSはWindows10 Proになります。
・処理に必要なファイルに関してはD:\Git\hook_test内にあります。

やりたいこと

pre-commit内でバッチファイルを起動させたい。
→下記にあるバッチファイルの呼び出し方が正解かわからない

処理に必要なファイル

per-commit

#!/bin/bash
if [ $? -eq 0 ]; then
MSG=$(git log -1 --name-only --pretty=format:"%h" | grep 'strings'  | grep '.xml')

for i in ${MSG[@]};do
echo "Update" 
cd ../../

bash upload.bat $i
done 
fi

upload.bat

@echo off
set WINSCPEXE_PATH="C:\Program Files (x86)\WinSCP\WinSCP.com"
set REMOTE_HOST=test@xx.xxx.xx.xxx

set LOCAL_DIR="D:\Git\hook_test"
set TARGET_DIR="/var/www/test/"
set TARGET_RESOURCE="update.xml"
set RESOURCE=%1
rem RESOURCE="test.xml"

%WINSCPEXE_PATH% %REMOTE_HOST% /script=.\upload.script /parameter %LOCAL_DIR% %TARGET_DIR% %TARGET_RESOURCE% 

rm %LOCAL_DIR%\%TARGET_RESOURCE%

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yut148

    2019/01/10 19:40

    ぜひ対象OSの記載をおねがいします。windowsだとPathの設定等いろいろ確認事項があります。

    キャンセル

  • fukkun0412

    2019/01/11 11:34

    記入いたしました。

    キャンセル

回答 1

checkベストアンサー

+1

こんにちは。
「どううまくいかないのか」「エラーメッセージ」を質問文に追記して頂けるとありがたいです。

たとえば相対パス指定するとどうでしょう。

bash ./upload.bat $i

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/11 12:00

    ご回答ありがとうございます。
    こちらの方法でやってみたのですが、変わらずbash: upload.bat: No such file or directoryと出てしまいました。

    質問内容にエラーメッセージを記載いたしました。
    自分なりに
    ‘bash upload.bat $i‘のところを以下のコードに変更しましたが、動作しませんでした。
    cd $(cd $(dirname $0) && pwd)
    `bash ./upload.bat $i`

    キャンセル

  • 2019/01/11 12:49

    追記ありがとうございます。
    私の環境(Windows 10)では「リポジトリの直下」にあるbatファイルは上の書き方で通りました。
    fukkun0412さんの場合、batファイルはどこにあるんでしょう(質問文にご追記くださいまし)。
    汎用性が下がっていいならフルパスで指定するという方法もあります。

    キャンセル

  • 2019/01/11 12:57 編集

    追記ありがとうございます。
    `bash ./upload.bat $i`のところを
    `./upload.bat $i`に変更すると、エラーメッセージは出なくなり、コミット処理が走るようになったのですが、今度はアップロード処理のバッチの処理が正常に動作しなくなりました。
    呼び出し方が間違っているのか、それとも別の原因があるのかわかりません。

    質問内容に記載しておきます。

    キャンセル

  • 2019/01/11 14:14

    「No such file or directory」のエラーは解消されて
    バッチファイルが呼び出されていることを確認できたら、一個ずつ確認していきましょう。
    (shファイル内で exit 1 をしておくと、コミットが必ず失敗するので何度でも試せます)

    1. バッチファイル内でechoしてみて、SourceTreeに表示されるか確認する。
    2.バッチファイル内でshから引数が渡ってきていることを確認する
    3.バッチファイル内でカレントフォルダを確認する

    などなど問題の切り分けと整理を意識して
    バッチファイル内の各行の確認を粘り強くやってみてください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる