web-dev-qa-db-ja.com

drushエイリアスを使用してリモートサーバーで「git」を実行します

私のPCから本番サーバーでgitコマンドを起動したいと思います。本番アプリケーションのドキュメントルートは、gitリポジトリのクローンです。

製品版では、sites/all/drush/drushrc.phpに次の行を追加しました。

<?php

// Drush aliases
$options['Shell-aliases']['git-status'] = '!git status';

本番環境にログインして「git status」を実行すると、すべてが動作します。

実行しようとすると、私のPCから "drush @ mysite.prod git-status"取得します:

fatal: Not a git repository (or any of the parent directories): .git
Command git status failed.

drush @ mysite.local git-status」を実行しようとすると、機能します(そして、私のローカルコピーは本番コピーのようであり、ドキュメントルートはgitリポジトリのクローンです)。

どうしましたか?私のエイリアスで宣言されたドキュメントルートディレクトリは正しく(他の一般的なDrushコマンドが機能します)、gitリポジトリのチェックアウトです。

ありがとう。

2
arrubiu

これは、Drushの6.xブランチとmasterブランチの両方、および6.2.0リリースでうまく機能します。したがって、最初のステップは最新バージョンで試して、それが機能するかどうかを確認することです。それでも問題が解決しない場合は、-vフラグを使用してコマンドを再度実行し、より詳細な出力を取得してください。次のようなものが表示されます。

_$ drush -v @mysite.prod git-status
Loaded alias @server.xxxxxxxxxxx from file                              [notice]
/home/ga/local/config/drush-aliases/server.aliases.drushrc.php
Loaded alias @mysite.prod from file                                     [notice]
/home/ga/local/config/drush-aliases/mysite.aliases.drushrc.php
Include /home/ga/local/drupal/drush_extensions                          [notice]
Include /home/ga/.drush                                                 [notice]
Calling proc_open(ssh -o PasswordAuthentication=no [email protected] 'cd /srv/www/myserver.com/htdocs && git status');
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   ../xxxxx.txt
nothing added to commit but untracked files present (use "git add" to track)
Command dispatch complete                                               [notice]
_

シェルから "proc_open(...)"内でコマンドを実行してみて、同じように動作するかどうかを確認してください。正しく機能するまでsshオプションを調整します。次に、_$options['ssh-options']_を設定して調整します。

注:

Shellエイリアスを定義せずにこのようなことをしたい場合は、以下も機能するはずです。

_drush @mysite.prod ssh git status
_
4
greg_1_anderson