O git diff
comando assume valores opcionais para --stat
:
--stat[=<width>[,<name-width>[,<count>]]]
Generate a diffstat. You can override the default output width for
80-column terminal by --stat=<width>. The width of the filename
part can be controlled by giving another width to it separated by a
comma. By giving a third parameter <count>, you can limit the
output to the first <count> lines, followed by ... if there are
more.
These parameters can also be set individually with
--stat-width=<width>, --stat-name-width=<name-width> and
--stat-count=<count>.
(Para scripts, você pode querer usar git diff-tree
diretamente, pois é mais um comando "encanamento", embora eu suspeite que você ficará bem de qualquer maneira. Observe que você precisa do mesmo texto extra --stat
ao usar git diff-tree
. A diferença essencial entre usar a git diff
"porcelana "front end, e o git diff-tree
comando de encanamento, é que git diff
procura suas configurações definidas para opções como diff.renames
decidir se deve fazer a detecção de renomeação. Bem, isso, mais o front end git diff
fará o equivalente a git diff-index
se você estiver comparando um commit com o índice , por exemplo. Em outras palavras, git diff
lê sua configuração e invoca o encanamento correto automaticamente .)
--stat-graph-width=...
chave separada . Observe também que definir alto--stat-graph-width=
e--stat-name-width=
não é suficiente, você também deve definir--stat-width=
grande o suficiente para cobrir os dois.diff.statGraphWidth
você pode usar para definir o--stat-graph-width
valor, mas as outras são padronizadas para a largura do seu terminal. (Portanto, resposta alternativa: "sim, basta deixar sua janela de terminal com 1000 colunas de largura" :-))Para processamento de script, pode ser melhor usar um dos seguintes:
Cada um deles se torna mais prático para um processamento robusto de script quando combinado com a
-z
opção, que usaNUL
como terminadores de campo.fonte
git rev-parse --show-toplevel
. O problema original referia-se a caminhos truncados, o que é um problema em diffstats, especialmente para nomes de arquivo longos ou um valor baixo para--stat-name-width
. Os comandos acima não truncarão os caminhos, mas mostrarão o caminho "completo" conforme solicitado, embora ainda relativo à raiz do repositório.Para usuários do Bash, você pode usar a
$COLUMNS
variável para preencher automaticamente a largura do terminal disponível:Nomes de caminhos muito longos ainda podem estar truncados; neste caso, você pode reduzir a largura da peça +++ / --- usando
--stat-graph-width
, por exemplo, isso limita a 1/5 da largura do terminal:Para uma solução mais genérica, você poderia usar a saída de
tput cols
para determinar a largura do terminal.fonte
--stat=$COLUMNS,$COLUMNS
? Digitar sempre é uma loucura.export COLUMNS
ao seu~/.bashrc
e em seu~/.gitconfig
abaixo[alias]
, adicionesmart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
diff
. Eu quero que ele funcione para mesclagens e puxões, etc. também. (Não é possível fazer isso manualmente lá.) Não acho que o GIT suporte isso.Há uma opção
--name-only
:git diff --name-only
. A opção também é suportada por outros comandos git comoshow
estash
.Os caminhos não são encurtados com a opção.
fonte
Eu criei o seguinte alias git:
Ele lê a contagem de colunas do
tput cols
comando. O padrão é diffing contramaster
, mas você pode opcionalmente especificar outro branch.fonte
Uma solução simples que encontrei foi fazer isso: (só funciona em * nix, desculpe, não osx)
Esta versão funciona para ambos, mas não fica bem no osx.
fonte
Descobri que o comportamento de diff --stat mudou em algum lugar em torno do git 1.7.10, onde anteriormente ele encurtava os caminhos de arquivo para uma largura fixa por padrão - agora ele exibe tanto quanto sua janela de terminal permitir. Se você estiver enfrentando esse problema, certifique-se de atualizar para 1.8.0 ou mais recente.
fonte