Filelist de tubulação em 'git add'

3

Eu executei um novo clone e copiei / colei um diretório de trabalho no diretório clonado. Agora tem uma lista de arquivos alterados:

$ git status --short | grep -v "??" | cut -d " " -f 3 
GNUmakefile
Readme.txt
base32.h
base64.h
...

Quando tento fazer com que o Git os adicione, isso resulta em um erro (não me importo em adicionar 1 por vez):

$ git status --short | grep -v "??" | cut -d " " -f 3 | git add
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?

Adicionando o - :

$ git status --short | grep -v "??" | cut -d " " -f 3 | git add -
fatal: pathspec '-' did not match any files

e -- :

$ git status --short | grep -v "??" | cut -d " " -f 3 | git add --
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?

Tentar usar o interativo da página man parece ter causado uma grande confusão:

$ git status --short | grep -v "??" | cut -d " " -f 3 | git add -i
           staged     unstaged path
  1:    unchanged        +1/-1 GNUmakefile
  2:    unchanged      +11/-11 Readme.txt
  ...

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
Huh (GNUmakefile)?
What now> *** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
Huh (Readme.txt)?

(Eu já deletei o diretório que o Git fez uma bagunça, então eu não estou tentando resolver esse problema).

Como eu digo ao Git para adicionar os arquivos inseridos nele?

    
por jww 19.11.2015 / 18:56

5 respostas

8

git add está esperando que os arquivos sejam listados como argumentos, não canalizados para stdin . Tente

git status --short | grep -v "??" | cut -d " " -f 3 | xargs git add

ou

for file in $(git status --short | grep -v "??" | cut -d " " -f 3); do
    git add $file;
done
    
por 19.11.2015 / 19:04
1

Se os arquivos já estavam no índice (ou seja, eles aparecem como "modificados", ao contrário de untracked, quando você executa 'git status'), então você pode executar

git commit -am "Useful commit message here"

Isso adiciona todos os arquivos rastreados, mas modificados automaticamente.

    
por 19.11.2015 / 20:21
1

eu usei

git add 'cat filelist'

Eu só tinha 100 arquivos. 1000s podem ser problemáticos.

Mas talvez não. Use "-n" para uma corrida a seco.

    
por 19.07.2017 / 19:24
0

Se você estiver usando ag ou ack, isso é o que funciona:

ag -l PATTERN | xargs git add

    
por 06.04.2016 / 10:55
0

Semelhante ao de David King:

git status --short | perl -lane '$F[0] == "M" and print $F[1]' | xargs -n 20 git add

Esse exemplo encontra arquivos apenas no estado Modificado e os adiciona. Para proteger contra listas de parâmetros muito longas, xargs usa o parâmetro -n 20 para limitar cada chamada a git para 20 arquivos.

Altere a condição de correspondência no script perl, conforme necessário. Outro exemplo:

| perl -lane '$F[0] == "M" and $F[1] =~ m/py$/ and print $F[1]' |

Esse exemplo encontra arquivos Python modificados (termina com py ).

    
por 15.11.2017 / 15:30

Tags