AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 406946
Accepted
Martin Vegter
Martin Vegter
Asked: 2017-11-26 02:05:08 +0800 CST2017-11-26 02:05:08 +0800 CST 2017-11-26 02:05:08 +0800 CST

git: use visual diff (meld) somente quando estiver na GUI

  • 772

Eu sei que posso especificar o comando diff externo a ser usado para git diff:

[diff]
    external = 

Mas então, quando estou logado no console (sem X), isso falha porque meu visual diff não pode abrir a exibição (obviamente)

Como posso dizer ao git para usar apenas o visual diff somente quando conectado ao GUI/X?

diff git
  • 2 2 respostas
  • 595 Views

2 respostas

  • Voted
  1. Mats Wichmann
    2017-11-29T06:48:51+08:002017-11-29T06:48:51+08:00

    Existem várias maneiras simples de fazer isso ... para fazê-lo "fora" do git, você pode definir seu programa difftool (você provavelmente deseja difftool em vez de diff para iniciar um diff visual) para um script wrapper que descobre se você está em ambiente gráfico ou não e lança o programa apropriado; ou "dentro" do git, você pode fazer alguma inclusão condicional específica do ambiente (includeIf).

    • 3
  2. Best Answer
    Arkadiusz Drabczyk
    2017-12-01T12:11:42+08:002017-12-01T12:11:42+08:00

    Você pediu an answer drawing from credible and/or official sources, então vou citar alguma documentação oficial nesta resposta.

    Primeiro, precisamos encontrar uma maneira de determinar se estamos executando dentro da X sessão. Poderíamos fazer isso, por exemplo, verificando se a $DISPLAY variável está definida. Como está descrito em man X:

    EXIBIÇÃO

    Esta é a única variável de ambiente obrigatória. Ele deve apontar para um servidor X. Consulte a seção "Nomes de exibição" acima.

    No entanto, pode não ser uma boa ideia porque alguém pode simplesmente definir DISPLAYum valor falso, mesmo fora de X. Uma maneira melhor é sugerida nesta resposta :

    if xhost >& /dev/null ; then echo "Display exists"
    else echo "Display invalid" ; fi
    

    Você deve ter um programa chamado xhostjá instalado em sua máquina, certifique-se de tê-lo:

    $ type -a xhost
    xhost is /usr/bin/xhost
    

    Agora, poderíamos apenas definir diff.externalpara apontar para um wrapper que chamaria um diff externo se estivéssemos dentro Xe executasse o mecanismo padrão git diffse não estivéssemos dentro X. Infelizmente, não consigo encontrar uma maneira simples de executar um padrão git diff, diff.externalentão vamos criar um alias para gitque seja definido diff.externaltemporariamente usando -c. Conforme descrito em man git:

    -c <nome>=<valor>

    Passe um parâmetro de configuração para o comando. O valor fornecido substituirá os valores dos arquivos de configuração. O é esperado no mesmo formato listado por git config (subchaves separadas por pontos).

    Observe que omitir = em git -c foo.bar ... é permitido e define foo.bar como o valor booleano true (assim como [foo]bar faria em um arquivo de configuração). Incluir o igual, mas com um valor vazio (como git -c foo.bar= ...) define foo.bar como a string vazia.

    Seria algo como:

    $ git -c diff.external=diff-wrapper.sh ...
    

    Resumindo:

    • Crie um script chamado ~/git-wrapper.she substitua <YOUR_DIFF_WRAPPER>pelo que desejar:

      #!/usr/bin/env sh
      
      if xhost >/dev/null 2>&1
      then
          git -c diff.external=<YOUR_DIFF_WRAPPER>  "$@"
      else
          git "$@"
      fi
      
    • Defina um bit executável:

       $ chmod +x ~/git-wrapper.sh
      
    • Defina o alias no arquivo de inicialização do shell, por exemplo, ~/.bashrce recarregue o shell:

       alias git=~/git-wrapper.sh
      
    • Use gitnormalmente:

       $ git diff
      

      Ele usará <YOUR_DIFF_WRAPPER>se você estiver dentro Xe usará o padrão git-difffora de X.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve