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?
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).
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 emman X
:No entanto, pode não ser uma boa ideia porque alguém pode simplesmente definir
DISPLAY
um valor falso, mesmo fora deX
. Uma maneira melhor é sugerida nesta resposta :Você deve ter um programa chamado
xhost
já instalado em sua máquina, certifique-se de tê-lo:Agora, poderíamos apenas definir
diff.external
para apontar para um wrapper que chamaria um diff externo se estivéssemos dentroX
e executasse o mecanismo padrãogit diff
se não estivéssemos dentroX
. Infelizmente, não consigo encontrar uma maneira simples de executar um padrãogit diff
,diff.external
então vamos criar um alias paragit
que seja definidodiff.external
temporariamente usando-c
. Conforme descrito emman git
:Seria algo como:
Resumindo:
Crie um script chamado
~/git-wrapper.sh
e substitua<YOUR_DIFF_WRAPPER>
pelo que desejar:Defina um bit executável:
Defina o alias no arquivo de inicialização do shell, por exemplo,
~/.bashrc
e recarregue o shell:Use
git
normalmente:Ele usará
<YOUR_DIFF_WRAPPER>
se você estiver dentroX
e usará o padrãogit-diff
fora deX
.