2
(let ((default-directory "/home/vision/"))
  (magit-pull)
  (magit-fetch "upstream")
  (magit-merge "upstream/master")
  (magit-push))

私が得ている:

Running git fetch upstream
Git is already running

フェッチが終了するのを待つにはどうすればよいですか?

4

2 に答える 2

5

Magitはgitのインタラクティブなフロントエンドとして意図されているためmagit-fetch、コードから実行することは実際には意図されていません...しかし、本当に主張する場合は、コードをざっと見てみると、magit-processそれがプロセスを保持する変数であることがわかります実行中、実行が完了するとクリアされます。したがって、それが発生するまで待機するループで使用できます。

(progn
  (magit-fetch "upstream")
  (while magit-process (sleep-for 0.25))
  (magit-fetch "upstream"))

しかし、それは本当にそれを推進しています-たとえば、フェッチが失敗するとどうなりますか?

ところで、あなたができるもう一つのことは、この場合の1行の関数であるソースを調べることですmagit-fetch

(apply 'magit-run-git-async "fetch" remote magit-custom-options)

非同期バージョンを使用するコードを記述します。

(progn
  (apply 'magit-run-git "fetch" "upstream" magit-custom-options)
  (apply 'magit-run-git "fetch" "upstream" magit-custom-options))

(そして、オプションのフラグ引数を追加するパッチを提案することもできますが、それはインタラクティブツールの便利な機能のようです...)

于 2012-06-21T05:39:35.180 に答える
0

この質問は、前の質問に関連しているようです。あなたは2つのアプローチでemacs内からgitを使用するという問題を解決しようとしています:

  • bashスクリプトを1行ずつemacslispに変換する
  • 既存のライブラリを使用してgitと対話する

最初のアプローチは明らかに機能していませんでしたが、2番目のアプローチの方が優れているようです。ただし、magitはコードから使用するためのものではありません。magitはフロントエンドにのみ関心があるため、関数はいつでも変更される可能性があります。機能を損なわない変更は安全であると見なされます。

より良い答えを得ることができるように、あなたの最終目標が何であるかを説明するならば、それは役に立ちます。必要なのは、emacsから呼び出すことができる単純なgitエイリアスかもしれません。

于 2012-06-21T14:35:06.993 に答える