7

私はGITを初めて使用します。数日前にGitHubリンクからGITforWindowsをダウンロードしました。コマンドラインツールMinGW32を使用しています。私はデフォルトのエディターに慣れていないので、お気に入りのエディターをセットアップしようとしています。

EditPad Proをエディターとして使用するために、ここの指示に従いました。しかし、私は次のメッセージを受け取り続けます:

Aborting commit due to empty commit message.

EditPadProは新しいインスタンスを開きます。EditPad Proを閉じるまで中止メッセージが表示されないため、MinGW32は待機しています。エディターを開くと、。という名前の空のファイルが表示されCOMMIT_EDITMSGます。エディターを閉じると、ファイルはリポジトリのメインディレクトリに保存されます。

私はこの答え、特にこのフレーズに手がかりを見つけました:

[Vim]はデフォルトでファイルを.git/COMMIT_EDITMSGに保存します

エディターを閉じる前に[名前を付けて保存]を実行してファイルを.gitディレクトリに保存すると、機能します。ただし、これには2つの問題があります。

  1. 名前を付けて保存することを忘れないでください
  2. GitがデフォルトでCOMMIT_EDITMSGに追加する有益なコメントが表示されません

の現在の構成設定core.editorは次のとおりです。

"'D:\Program Files\JGsoft\EditPadPro5\EditPad Pro.exe' //newinstance"

手順に記載されている内容が何であるかはわかりません$*が、それを使用した場合と使用しない場合、および一重引用符と二重引用符を使用しない場合のさまざまなバリエーションを試してみました。シェルスクリプトでも値を設定してみました。最悪の場合、それはまったく機能せず(たとえば、エディターを開かない)、せいぜい空のファイルを開きます。

Gitが.gitディレクトリに作成したファイルでエディターを開くにはどうすればよいですか?

編集:$*使用するかどうかにかかわらず、まったく同じ結果が得られます。この回答は、それが必要ないことを示しています。このGitProページでは、外部のマージツールと差分ツールのセットアップ方法について説明していますが、構成設定については説明していませんcore.editor。注:私も試し%*ました。

変数が必要な場合$*(および欠落している場合)、EditPad Proは、現在のディレクトリにある空白のCOMMIT_EDITMSGファイルではなく、空白の無題のファイルで開くと思います。問題はパスにあるようです。

編集:私はもっと実験をしました。ファイルパスにスペースがあり、それが問題の原因である可能性があると思いました。名前にスペースを入れずにリポジトリを新しいディレクトリに複製し、構成変数を修正しました。それは問題を解決しませんでした。しかし、私は別の問題に気づきました。私のテストのいくつかでは、エディターにロードされた空のファイルは。という名前$@でした。

4

5 に答える 5

6

混乱や問題を引き起こす可能性のあるいくつかの問題があります。

  1. シェル特殊変数

    がエディタのパスとファイル名にcore.editor設定されている場合、変数は冗長であり、必要ありません。ただし、がシェルスクリプトに設定されている場合は、変数をエディターに渡す必要があります。$*core.editor$*

    これは有効です:

    $ git config --global core.editor "'D:/Path To/EditPadPro.exe' //newinstance"
    

    これも有効です:

    $ git config --global core.editor "'E:/Path To/editor.sh'"
    

    editor.shに含まれる場合:

    #!/bin/sh
    "D:/Path To/EditPadPro.exe" //newinstance "$*"
    
  2. ファイル名のスペース

    スペースを含むファイル名は面倒な場合があります。パス/ファイル名が引用符で囲まれている場合、通常は問題になりません。しかし、core.editorあなたの価値を設定するときは、

    このようにスペースをエスケープします。

    "E:/Path\ To/editor.sh"
    

    または、次のように2回引用します。

    "'E:/Path To/editor.sh'"
    

    余分な引用符(または円記号のエスケープ)がないと、値の設定に問題はありませんが、外側の引用符は値の一部ではないため、使用すると失敗します。

    編集:後の方法(2回引用)の方が安全なようです。詳細については、下部の編集を参照してください。

  3. Windowsパス区切り文字

    エディターに渡されるファイル名は、相対パス(つまり、.git / COMMIT_EDITMSG)または絶対パス(つまり、/ path to /.git/rebase-merge/git-rebase-todo)にすることができますが、どちらの場合もパス区切り文字としてスラッシュを使用しています。Windowsは通常、特にパスが引用符で囲まれている場合、パス区切り文字としてスラッシュを受け入れることができます。おそらく、古いバージョンのEditPad Proは、隠しディレクトリと組み合わせてスラッシュを受け入れることができません。少し前処理することでこれを修正できます。

    注:スラッシュがあり、隠しディレクトリがないハードコードされたパスは正常に機能しているようです。隠しディレクトリバックスラッシュを含むハードコードされたパスは正常に機能しているようです。

最終的解決

私はシェルスクリプトの経験があまりありませんが、次のことがうまくいきました。

editor.shファイルには次のものが含まれています。

#!/bin/sh
fullpath=`echo "$*" | tr '/' '\\\'`
"D:/Program Files/JGsoft/EditPadPro5/EditPadPro.exe" //newinstance "$fullpath"

構成は次のように設定されます。

$ git config --global core.editor "'E:/Path To/editor.sh'"

EditPad Pro 5.3.2の私のコピーは、どのgitコマンドがエディターを起動するかに関係なく、正しいファイルが既にロードされた状態で開いています。

編集:の値を変更する必要がありcore.editorました。パス内のスペースをエスケープするために円記号を使用しましたが、これによりエディターが正しく開きました。ただし、GItコマンドが相対パス(ドットで始まる)を持つフィールド名をシェルスクリプトに渡した場合、の値はファイル名ではなく$ @$*であったため、エディターは$@という名前の空白のファイルで開きました。私はその組み合わせをテストしたと思いましたが、明らかにそうではありませんでした。引用符を2回使用する方法が機能します。

于 2012-12-29T11:44:16.277 に答える
2

$*「他のすべてのパラメータ」用です:「シェルスクリプトでの意味」を参照しください$*

忘れた場合$*

 "C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"

、最後のパラメータである。でエディタを開くことはありません.git/COMMIT_EDITMSG
つまり、コミットメッセージを保存する場所にdfaultで保存することはありません(gitが使用する場合)。

于 2012-12-28T12:51:30.330 に答える
1

問題がEditPadProとMinGW32のどちらにあるのかわかりませんが、回避策を見つけました。パスとファイル名を渡すと、機能します。

例えば:

$ git config --global core.editor "'D:/Program Files/JGsoft/EditPadPro5/EditPadPro.exe' //newinstance '.git\COMMIT_EDITMSG'"

EditPad Proは、現在のディレクトリにある空白のCOMMIT_EDITMSGと.gitディレクトリにあるCOMMIT_EDITMSGの2つのファイルで開きます。.gitを編集して保存できます。エディターを閉じると、コミットメッセージとして.gitが使用されます。空白のものはどこにも保存されず、完全に無視されます。

の円記号と一重引用符'.git\COMMIT_EDITMSG'は重要です。他の方法では機能しません。最初は、古いバージョンのEditPad Proがスラッシュを気に入らなかったのではないかと思いましたが、パスにスラッシュを使用して(引用符の有無にかかわらず)他のファイル名を渡すことができ、それらのファイルで機能します。COMMIT_EDITMSGの他のバリエーションは、MinGW32がすでに渡しているものと競合していると推測できます。

パスは現在のディレクトリからの相対パスであるため、コミットしているリポジトリに関係なく機能するはずです。

編集:上記の解決策はコミットに対してのみ機能します。

エディターをインタラクティブなリベースなどの他の目的で使用する場合は役に立ちません。最終的な解決策については、他の回答を参照してください。

于 2012-12-28T14:20:35.710 に答える
0

これまでのところ、コミットについては次のように機能します。

$ git config --global core.editor "'C:/Program Files/Just Great Software/EditPad Pro 7/EditPadPro7.exe' '//wait'" --replace-all

これにより、正しいファイルを指す新しいタブが開き、そのタブが閉じるのを待ってから続行します。--replace-allは、以前の設定の試みで残っていたものをクリアするために追加されました。

于 2016-01-22T17:04:16.657 に答える
0

選択した回答の解決策は非常に役に立ちました。

それに基づいたワンライナーバージョンを共有したい:

git config --global core.editor "callEditor(){ filepath=\`echo \"\$*\" | tr '/' '\\' 2> /dev/null\`; '**PathToYourEditorHere**' \"\$filepath\"; }; callEditor"
于 2016-10-25T12:52:35.310 に答える