Pergunta

Eu estou a experimentar O Git no Windows.Eu cheguei ao ponto de tentar "git commit" e eu tenho esse erro:

O Terminal é mudo, mas não o VISUAL, nem EDITOR definido.Por favor, forneça o mensagem usando -m ou opção-F.

Então eu descobri que eu preciso ter uma variável de ambiente chamada EDITOR.Não há problema.Eu configurá-lo para apontar para o bloco de notas.Que trabalhou, quase.O padrão de mensagem de commit abre no bloco de notas.Mas o bloco de notas não suporta nua alimentações de linha.Eu fui comprar O Notepad++, mas eu não consigo descobrir como obter o Notepad++ definido como o %EDITOR% de tal forma que ele funciona com o Git como o esperado.

Eu não sou casado com o Notepad++.Nesse ponto, eu não me importo o que o editor que eu uso.Eu só quero ser capaz de digite confirmação de mensagens em um editor de ao invés da linha de comando (com -m).

Quem estiver usando o Git no Windows:O que a ferramenta que você usa para editar as suas mensagens de confirmação, e o que é que você tem que fazer para fazê-lo funcionar?

Foi útil?

Solução

Atualização de setembro de 2015 (6 anos depois)

O última versão do git para Windows (2.5.3) agora inclui:

Configurando git config core.editor notepad, usuários pode agora utilizar notepad.exe como o seu editor por omissão.
Configurando git config format.commitMessageColumns 72 será captado pelo bloco de notas de capa e quebra automática de linha da mensagem de commit após o usuário edita-lo.

Ver cometer 69b301b por Johannes Schindelin (dscho).

E Git 2.16 (Q1 2018) irá mostrar uma mensagem para informar ao usuário o que ele está esperando para que o usuário terminar de editar quando a geração de um editor, no caso, o editor abre uma janela oculta ou em algum lugar obscuro e o usuário fica perdido.

Ver cometer abfb04d (07 Dez 2017), e cometer a64f213 (29 de Novembro de 2017) por Lars Schneider (larsxschneider).
Ajudou-por: Junio C Hamano (gitster).
(Intercalado por Junio C Hamano -- gitster -- no cometer 0c69a13, De 19 de Dezembro de 2017)

launch_editor():indicar que o Git aguarda a entrada do usuário

Quando uma gráfica GIT_EDITOR é gerada por um comando svn que abre e aguarda a entrada do usuário (por exemplo,"git rebase -i") e, em seguida, a janela do editor podem ser obscurecidos por outros windows.
O usuário pode ficar olhando para o original Git janela de terminal, mesmo sem perceber que ela precisa de para interagir com outra janela antes do Git pode continuar.Para este usuário Git aparece pendurado.

Imprimir uma mensagem de que o Git está esperando por editor entrada no original terminal e livrar-se dele quando o editor retorna, se o terminal suporta apagar a última linha


Resposta Original

Eu só testei com o git versão 1.6.2.msysgit.0.186.gf7512 e o Notepad++5.3.1

Eu prefiro não é necessário definir um EDITOR de variável, de modo que eu tentei:

git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\""
# or
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"

Que sempre dá:

C:\prog\git>git config --global --edit
"c:\Program Files\Notepad++\notepad++.exe" %*: c:\Program Files\Notepad++\notepad++.exe: command not found
error: There was a problem with the editor '"c:\Program Files\Notepad++\notepad++.exe" %*'.

Se eu definir uma npp.morcego, incluindo:

"c:\Program Files\Notepad++\notepad++.exe" %*

e eu tipo:

C:\prog\git>git config --global core.editor C:\prog\git\npp.bat

Ele só funciona a partir da sessão de ms-DOS, mas não a partir do git shell.
(não que com o núcleo.editor de configuração do mecanismo, um script com "start /WAIT..."no que não daria certo, mas apenas abrir uma nova janela do ms-DOS)


Bennett resposta menciona a possibilidade de evitar a adição de um script, mas para referenciar diretamente o próprio programa entre aspas simples.Observe a direção das barras!Utilização / NÃO \ para pastas separadas no nome do caminho!

git config --global core.editor \
"'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Ou se você estiver em um sistema de 64 bits:

git config --global core.editor \
"'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Mas eu prefiro usar um script (veja abaixo):de que maneira eu posso jogar com diferentes caminhos ou opções diferentes sem ter que registrar-se novamente um git config.


A solução real (com um script) foi perceber que:
o que você consulte o arquivo de configuração é realmente um shell (/bin/sh script, não um DOS scripts.

Então, o que funciona é:

C:\prog\git>git config --global core.editor C:/prog/git/npp.bat

com C:/prog/git/npp.bat:

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*"

ou

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

Com essa definição, eu posso fazer 'git config --global --edit'a partir de DOS ou Git Shell, ou o que posso fazer 'git rebase -i ...'a partir de DOS ou Git Shell.
Bot comandos irão desencadear uma nova instância do bloco de notas++ (daí o -multiInst'opção), e aguardar para que a instância a ser fechado antes de ir.

Observe que eu uso apenas '/', não \'.E Eu instalado msysgit usando a opção 2. (Adicione o git\bin diretório para o PATH variável de ambiente, mas sem ultrapassar alguns built-in ferramentas do windows)

O fato de que o notepad++ wrapper for chamado .morcego não é importante.
Seria melhor para o nome 'npp.sh" e colocá-lo no [git]\cmd diretório apesar de (ou em qualquer diretório referenciado pela variável de ambiente PATH).


Veja também:


lightfire228 adiciona nos comentários:

Para qualquer pessoa que tenha um problema que N++ basta abrir um arquivo em branco, e o git não levar a sua mensagem de commit, ver "Abortar cometer devido ao vazio mensagem":alterar o seu .bat ou .sh arquivo para dizer:

"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 

Que dirá o notepad++ para abrir o temp confirmar o arquivo, ao invés de incluir um espaço em branco de novo.

Outras dicas

Em construção Darren resposta, para usar o Notepad++, você pode simplesmente fazer isso (tudo em uma linha):

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Obviamente, o C:/Program Files/Notepad++/notepad++.exe parte deve ser o caminho para o Notepad++ executável no sistema.Por exemplo, pode ser C:/Program Files (x86)/Notepad++/notepad++.exe .

Funciona como um encanto para mim.

De qualquer maneira, eu apenas fui brincar com isso e encontrei o seguinte para funcionar muito bem para mim:

git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"

Eu não acho CMD gosta de aspas simples, então você deve usar aspas duplas "para especificar o espaço incorporado argumento de seqüência de caracteres".

O Cygwin (que eu acredito que é a plataforma de base para o Git é o Bash), por outro lado, gosta de ambos ' e ";você pode especificar um CMD-como caminhos, usando / em vez de \, desde que a seqüência de caracteres é citado i.e.neste exemplo, usando aspas simples.

O -m substituições/indica o uso de vários editores e não há necessidade de um %* preso no final.

Editar: Depois de actualizar para o vim 7.3, cheguei à conclusão de que o mais limpo e mais fácil maneira de fazer isso é:

  1. Adicionar Vim pasta principal para o seu caminho (clique Direito em Meu Computador -> Propriedades -> Avançado -> Variáveis de Ambiente)

  2. Execute este:git config --global core.editor "gvim --nofork '%*'"

Se você fizer dessa forma, então estou bastante certo de que ele vai trabalhar com o cygwin bem.

Original resposta:

Mesmo com um par de vim relacionados com as respostas, eu estava tendo problemas para fazer este trabalho com o gvim no Windows (quando não estiver usando um arquivo em lotes ou %EDITOR% ou cygwin).

O que eu, eventualmente, chegou a é limpo e agradável, e chama a partir de algumas das soluções aqui:

git config --global core.editor \
"'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"

Uma pegadinha que me levou um tempo é que estes não são o estilo do Windows barras invertidas, eles são normais barras.

O Notepad++ funciona muito bem, apesar de eu escolher ficar com o bloco de notas, -m, ou mesmo, por vezes, o built-in "editar".

O problema que você está encontrando usando o Notepad++ está relacionado a como o git está lançando o executável do editor.A minha solução para isso é definir o EDITOR de um arquivo em lotes, em vez do executável do editor, que faz o seguinte:

start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*

/WAIT conta a linha de comando sessão interrompido até que o aplicativo é encerrado, assim, você será capaz de editar para o conteúdo do seu coração enquanto git feliz espera por você.%* passa todos os argumentos para o arquivo em lotes através do Notepad++.

c:\src>echo %EDITOR%
c:\tools\runeditor.bat

O Wordpad!

Eu sou feliz usando o vim, mas desde que eu estou tentando introduzir o Git para a empresa, eu queria algo que nós todos temos, e descobriu que o Wordpad parece funcionar bem (i.e.Git não espere até que você terminar de editar e fechar a janela).

git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'

Usando o Git Bash no msysgit;Eu não tentei prompt de comando do Windows (se é que isso faz alguma diferença).

Eu também uso o Cygwin no Windows, mas com gvim (ao contrário do terminal baseado no vim).

Para fazer este trabalho, eu tenho feito o seguinte:

  1. Criou uma linha de um arquivo de lote (chamado git_editor.bat) que contém o seguinte:
    "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. Colocado git_editor.bat na minha PATH.
  3. Conjunto GIT_EDITOR=git_editor.bat

Com este feito, git commit, etc.corretamente irá invocar o gvim executável.

NOTA 1:O --nofork opção para o gvim garante que ele bloqueia até que a mensagem de commit tenha sido escrito.

NOTA 2:O entre aspas o caminho para o gvim é necessário se você tiver espaços no caminho.

NOTA 3:As aspas em torno de"%*", são necessários apenas no caso de git passa um caminho de arquivo com espaços.

Graças à comunidade ...e um pouco de pesquisa eu era capaz de obter o meu editor favorito, EditPadPro, para trabalhar como editor de núcleo com msysgit 1.7.5.O GIT e TortoiseGit v1.7.3.0 mais WinXP SP3 ...

Seguindo o conselho acima eu adicionei o caminho para um script bash para o editor de código ...

git config --global core.editor c:/msysgit/cmd/epp.sh

No entanto, após várias tentativas fracassadas acima mencionado soluções ...Eu finalmente foi capaz de obter este trabalho.Por EditPadPro da documentação, acrescentar o '/newinstance' bandeira permitir que o shell para aguardar o editor de entrada ....

O '/newinstance'bandeira foi a chave no meu caso ...

#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"

Este é o 1 sintoma de problemas de maior.Nomeadamente que você tem algo a definição de PRAZO=mudo.Outras coisas que não funcionam adequadamente, são os less comando que diz que você não tem um totalmente funcional terminal.Parece que este é mais comumente causado por ter PRAZO definido para algo no seu global de variáveis de ambiente do windows.Para mim, o problema surgiu quando eu instalei o Strawberry Perl alguma informação sobre isso, é sobre a msysgit bug para este problema como também diversas soluções.

A primeira solução é para corrigi-lo no seu ~/.bashrc adicionando:

export TERM=msys

Você pode fazer isso a partir do Git BASH, comandos como:

echo "export TERM=msys" >> ~/.bashrc

A outra solução, que, em última análise, é o que eu fiz, porque eu não me importo sobre Strawberry Perl motivos para a adição de PRAZO=mudo para o meu ambiente de definições é a de ir e remover o PRAZO=mudo como dirigido neste comentário sobre o msysgit relatório de bug.

Controle Painel/Sistema/Avançado/Ambiente Variáveis...(ou similar, dependendo sua versão do Windows) é o lugar onde sticky variáveis de ambiente são definidas no Windows.Por padrão, o TERMO não é definir.Se o TERMO é definido no presente, então você (ou um dos programas que você tem instalado, por exemplo.Strawberry Perl) tem defini-lo.Excluir a configuração, e você deve ser fino.

Da mesma forma, se você usar o Strawberry Perl e se preocupam com o CPAN cliente ou algo assim, você pode deixar o TERM=dumb sozinho e usar unset TERM em seu ~/.bashrc arquivo que vai ter um efeito similar para a definição de um termo explícito como acima.

É claro que todas as outras soluções são corretas que você pode usar git config --global core.editor $MYFAVORITEEDITOR para certificar-se de que o git usa o seu editor favorito quando ele precisa para iniciar um para você.

Para Átomo você pode fazer

git config --global core.editor "atom --wait"

e semelhante para VSCode

git config --global core.editor "code --wait"

que vai abrir uma Átomo ou VSCode janela para você confirmar através de,

ou para Sublime

git config --global core.editor "subl -n -w"

Editar .gitconfig arquivo c:\Users\YourUser pasta e adicionar:

[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'

Vim/Gvim funciona bem para mim.

>echo %EDITOR%

c:\Vim\Vim71\vim.exe

Eu tinha PortableGit 1.6 funcionando bem, mas depois de actualizar para o PortableGit-1.7 windows versão teve problemas.Alguns dos comandos git abre Notepad++.exe bem, mas alguns não, especialmente git rebase se comporta de forma diferente.

Problema é que alguns comandos a executar o windows o processo cmd alguns usam unix cmd processo.Eu quero dar a inicialização de atributos para o Notepad++ editor, por isso, precisam ter um script personalizado.A minha solução é esta.

1) Criar um script para executar um adequado editor de texto.Script parece estranho, mas trata windows e unix de variação.c:/PortableGit/cmd/git-editor.bat

#!/bin/sh
#open a new instance

function doUnix() {
  "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar $*
  exit
}

doUnix $*

:WINCALL
"c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar %*

2) Conjunto global core.editor de variável Script foi salvo para o git/cmd pasta para o seu já em um gitconsole caminho, este é obrigatória, a caminho completo pode não funcionar corretamente.

git config --global core.editor "git-editor.bat"

Agora eu posso correr git commit-a e git rebase -i master comandos.Experimentá-lo se você tiver problemas no Git ferramenta do windows.

Eu uso o git em várias plataformas, e eu gostaria de usar o mesmo git configurações em todos eles.(Na verdade, eu tenho todos os meus ficheiros de configuração sob controle de liberação com o git, e colocar um repositório git clone em cada máquina.) A solução veio-me com isto:

Eu definir o meu editor para giteditor

git config --global core.editor giteditor

Em seguida, crio um link simbólico chamado giteditor o que está na minha CAMINHO.(Eu tenho uma pessoais bin diretório, mas em qualquer lugar do CAMINHO works.) Que o link aponte para a minha atual editor da escolha.Em diferentes máquinas e diferentes plataformas, eu uso editores diferentes, então isso significa que eu não tenho que mudar o meu universal git configuração (.gitconfig), apenas o link que giteditor pontos.

Links simbólicos são tratadas por cada sistema operativo que eu conheço, que eles podem usar diferentes comandos.Para Linux, você pode usar ln -s.Para Windows, você pode usar o cmd construído-em mklink.Eles têm diferentes sintaxes (que você deve olhar para cima), mas tudo funciona da mesma forma, realmente.

Com base no VonC sugestão acima, isso funcionou para mim, foi me deixando louco):

git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait"

Omitindo -wait pode causar problemas, especialmente se você estiver trabalhando com gerrit e alterar as identificações que tem de ser copiados manualmente para o fundo da sua mensagem de commit

Esta é a minha configuração para usar Geany como um editor para o git:

git config --global core.editor C:/path/to/geany.bat

com o seguinte conteúdo no geany.morcego :

#!/bin/sh
"C:\Program Files\Geany\bin\Geany.exe" --new-instance "$*"

Ele funciona tanto em consola de DOS e msysgit.

Eu uso o Cygwin no Windows, por isso eu uso:

export EDITOR="emacs -nw"

O -nw é para no-windows, i.é.diga o Emacs não tentar usar o X11.

O Emacs combinações de teclas não funcionam para mim a partir de uma shell do Windows, então eu só iria usar isso a partir de um Cygwin shell...(rxvt recomendado.)

Eu prefiro usar o emacs.Recebendo-o conjunto de backup pode ser um pouco complicado.

  1. Baixar o emacs e descompacte-o em algum lugar assim c:\emacs.
  2. Executar c:\emacs\bin\addpm.exe.Você precisará clique com o botão direito e clique em "Executar como Administrador" se você estiver usando o Windows Vista ou superior.Isto vai colocar os arquivos executáveis em seu caminho.
  3. Adicionar (server-start) em algum lugar no seu .emacs arquivo.Ver o Emacs Windows FAQ para conselhos sobre onde colocar o seu .emacs arquivo.
  4. git config --global core.editor emacsclientw

O Git irá agora abrir arquivos dentro de um emacs processo.Você terá que executar esse processo existente manualmente a partir de c:\emacs\bin\runemacs.exe.

Eu tive dificuldade em obter o git para cooperar com o wordpad, KomodoEdit e praticamente todos outros do editor de eu dar a ele.Mais aberto para edição, mas o git claramente não esperar para o salvar e fechar para acontecer.

Como uma muleta, eu acabei de fazer o i.e.

git commit -m "Fixed the LoadAll method"

para manter as coisas em movimento.Tende a manter as minhas mensagens de consolidação de um pouco mais curto do que eles, provavelmente, deve ser, mas claramente há algum trabalho a ser feito na versão para Windows do git.

O GitGUI também não é tão ruim.É preciso um pouco de orientação, mas depois disso, ele funciona bastante bem.

Eu precisava fazer ambos dos seguintes procedimentos para obter o git para iniciar o notepad++ no windoze:

-adicione o seguinte .gitconfig:

editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin

-modificar o atalho para iniciar o git bash shell para executar como administrador e, em seguida, usar isso para lançar o git bash shell.Eu estava supondo que a entrada do menu de contexto "Git Bash here" foi o lançamento npp com as permissões necessárias.

Depois de fazer ambas as opções acima funcionou.

Parece como se o Git não encontrar editor, se não houver espaços no caminho.Assim, você terá que colocar o arquivo em lotes mencionados na Patrick resposta em um não-espaço em branco de caminho.

Eu apenas tive o mesmo problema e encontrou uma solução diferente.Eu estava ficando

error: There was a problem with the editor 'ec'

Eu tenho VISUAL=ec, e um arquivo de lote chamado ec.bat no meu caminho que contém uma linha:

c:\emacs\emacs-23.1\bin\emacsclient.exe %*

Isto me permite editar arquivos a partir da linha de comando com ec <filename>, e ter o visual do conjunto de meios mais unixy programas de pegá-lo também.Git parece procurar o caminho de forma diferente para meus outros comandos embora, quando eu olhei para um git commit no ProcMon Eu vi ela olhar em cada pasta no caminho para ec e para ec.exe, mas não para ec.bat.Eu adicionei outra variável de ambiente (GIT_EDITOR=ec.bat) e tudo estava bem.

Eu consegui a versão de ambiente de trabalho definindo o EDITOR variável usando aspas e /:

EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe"

Eu estou usando o GitHub para Windows, que é um visual agradável opção.Mas eu também prefiro a linha de comando, para fazê-lo funcionar ao abrir um repositório no Git shell eu apenas definir a seguinte:

git config --global core.editor vim

que funciona muito bem.

Isso funciona para o Powershell e cmder-1.2 (quando usado com o powershell).Em ~/.gitconfig

[core]
    editor = 'c:/program files/sublime text 3/subl.exe' -w

Como posso fazer o Sublime Text editor padrão para o Git?

Ressuscitando um velho thread, mas eu encontrei uma bela solução simples postado aqui - apesar de haver um erro no caminho em que você tem de copiar o "subl" arquivo dado pelo autor.Estou com o Win 7 x64 e eu tinha que colocar o "subl de arquivo" na minha /Git/cmd/ pasta para fazer o trabalho.Ele funciona como um encanto embora.

O ATOM e o Windows 10

  1. Direito clicado o Átomo ícone na área de trabalho e clicar em propriedades.
  2. Copiou o "Iniciar em" caminho de localização
  3. Olhou para lá com o windows explorer e encontrado "atom.exe".
  4. Digitei isso no git bash:

    git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"

Nota:Eu troquei tudo \ para / .Eu criei um .bashrc no meu diretório home e usados / para o meu diretório home e funcionou, então eu achava que / vai ser o caminho a percorrer.

Quando utilizar um montado remotamente homedrive (compartilhamento do samba, nfs, ...) o seu ~/.git pasta é compartilhada acros todos os sistemas, o que pode levar a vários problemas.Assim, eu prefiro um script para determinar o editor certo para o sistema de direito:

#!/usr/bin/perl
# Detect which system I'm on and choose the right editor
$unamea = `uname -a`;
if($unamea =~ /mingw/i){
    if($unamea =~ /devsystem/i){#Check hostname
        exec('C:\Program Files (x86)\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV);
    }
    if($unamea =~ /testsystem/i){
        exec('C:\Program Files\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV);
    }
}
$MCEDIT=`which mcedit`;
if($MCEDIT =~ /mcedit/){
    exec($MCEDIT, @ARGV);
}
$NANO=`which nano`;
if($NANO =~ /nano/){
    exec($NANO, @ARGV);
}
die "You don't have a suitable editor!\n";

Pode-se considerar um simples shell script, mas eu usei perl como é o perl é fornecido com o msysgit und seu unixoid sistemas irá proporcionar um bem.Colocar o script em /home/username/bin, que deve ser adicionado ao PATH no .bashrc ou .profile.Uma vez adicionado com git config --global core.editor giteditor.pl você tem o direito o editor, onde você estiver.

Esse é um trabalho para mim, usando o Cygwin e o Textpad 6 (EDIÇÃO:também trabalhando com o Textpad 5 enquanto você faz a mudança óbvia para o script), e, presumivelmente, o modelo poderia ser utilizado para outros editores, bem como:

~/.gitconfig:

[core]
    editor = ~/script/textpad.sh

~/script/textpad.sh

#!/bin/bash

APP_PATH=`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`
FILE_PATH=`cygpath -w $1`

"$APP_PATH" -m "$FILE_PATH"

Esta linha funciona bem:

~/script/textpad.sh (opção 2):

"`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`"

Isso funcionou para mim:

  1. Adicione o diretório que contém o editor do executável para o seu CAMINHO variável.(e.g. "C:\Program Files\Sublime Texto 3\")
  2. Reinicie o seu computador.
  3. Alterar o núcleo.editor global git variável para o nome do executável do editor sem a extensão '.exe' (e.g.git config --global core.editor de sublime_text)

Que é isso!

NOTA: Sublime Texto 3 é o editor que eu usei para este exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top