Adicionando apenas arquivos não rastreados


168

Um dos comandos que acho incrivelmente úteis no Git é git add -ulançar tudo, menos os arquivos não rastreados, no índice. Existe um inverso disso? Nos últimos meses, muitas vezes me encontrei em uma posição em que adicionei algumas atualizações interativamente ao índice e quero adicionar todos os arquivos não rastreados a esse índice antes de confirmar.

Existe uma maneira de adicionar apenas os arquivos não rastreados ao índice sem identificá-los individualmente? Não vejo nada óbvio nos documentos de ajuda, mas talvez eu esteja sentindo falta disso?

Obrigado.


1
Em relação a "lançar tudo, menos os arquivos não rastreados no índice", .gitignorefoi especificamente projetado para esse fim, não git add -u.
Pacerier

Além disso, você está pedindo para adicionar os arquivos não rastreados enquanto remove todos os rastreados no momento, ou está pedindo para adicionar os arquivos não rastreados em cima dos rastreados no momento (tornando tudo rastreado)?
Pacerier

Respostas:


236

É fácil com git add -i. Digite a(para "adicionar não rastreado"), depois *(para "todos"), depois q(para sair) e pronto.

Para fazer isso com um único comando: echo -e "a\n*\nq\n"|git add -i


4
Eu esperava que houvesse algo menos interativo, mas certamente é melhor do que arquivo por arquivo. :-)
Rob Wilkerson

34
echo -e "a\n*\nq\n"|git add -i
Tapete de

@ Mat obrigado, então é o comando completo ----> git add -ia * q ??
BKSpurgeon

Argument list too long... tão perto!
Simeon

1
Para mim com git 2.21.0 é era git add -iseguida 4para adicionar untracked em seguida, *para todos, em seguida, qparar de fumar
Harry B

36

git ls-files -o --exclude-standard fornece arquivos não rastreados, para que você possa fazer algo como abaixo (ou adicionar um alias a ele):

git add $(git ls-files -o --exclude-standard)

1
alias gau = "arquivos ls git -o --exclude-standard | xargs -i git add '{}'" funciona para mim
Stephan

ls-arquivos git help é bastante uma leitura útil: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann

15

Não é exatamente o que você está procurando, mas achei isso bastante útil:

git add -AN

Adicionará todos os arquivos ao índice, mas sem o conteúdo deles. Os arquivos que não foram rastreados agora se comportam como se fossem rastreados. O conteúdo deles será exibido em git diff, e você poderá adicioná-lo interativamente git add -p.


Isto é exatamente o que eu estava procurando - também permite git commit -ppercorrer novos arquivos.
Nitsujri 05/09/19

11

Você pode adicionar isso ao seu arquivo ~ / .gitconfig:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Em seguida, na linha de comando, basta executar:

git add-untracked

Eu gosto dessa abordagem, mas ela não lida com espaços nos nomes de arquivos.
Paul Coccoli

9

As pessoas sugeriram canalizar a saída de git ls-filespara, git addmas isso falhará nos casos em que houver nomes de arquivos contendo espaços em branco ou caracteres globos como *.

A maneira segura seria usar:

git ls-files -o --exclude-standard -z | xargs -0 git add

onde -zdiz ao git para usar \0terminadores de linha e -0diz ao xargs o mesmo. A única desvantagem dessa abordagem é que a -0opção não é padrão, portanto, apenas algumas versões da xargssuportam.


6

git ls-fileslista os arquivos no diretório atual. Se você deseja listar arquivos não rastreados de qualquer lugar da árvore, isso pode funcionar melhor:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Para adicionar todos os arquivos não rastreados na árvore:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add

6

Eu tentei isso e funcionou:

git stash && git add . && git stash pop

git stashsó colocará todos os arquivos rastreados modificados em uma pilha separada e os arquivos restantes serão arquivos não rastreados. Em seguida, isso git add .fará com que todos os arquivos não sejam rastreados, conforme necessário. Eventualmente, para recuperar todos os arquivos modificados da pilha, fazendogit stash pop


0

Se você tiver milhares de arquivos não rastreados (ugh, não pergunte), git add -inão funcionará ao adicionar *. Você receberá um erro informando Argument list too long.

Se você também estiver no Windows (não pergunte # 2 :-) e precise usar o PowerShell para adicionar todos os arquivos não rastreados, use este comando:

git ls-files -o --exclude-standard | select | foreach { git add $_ }

Uma versão mais condensada:git ls-files -o --exclude-standard | % { git add $_ }
marckassay

0

Muitas dicas boas aqui, mas dentro do Powershell não consegui fazê-lo funcionar.

Sou desenvolvedor .NET e ainda utilizamos o Windows OS principalmente porque não utilizamos tanto o .Net core e a plataforma cruzada, por isso meu uso diário com o Git é em um ambiente Windows, onde o shell usado é mais frequentemente o Powershell e não Git bash.

O procedimento a seguir pode ser seguido para criar uma função com alias para adicionar arquivos não rastreados em um repositório Git.

Dentro do seu arquivo $ profile do Powershell (caso esteja faltando - você pode executar: New-Item $ Profile)

notepad $ Profile

Agora adicione este método do PowerShell:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Salve o arquivo $ profile e recarregue-o no Powershell. Em seguida, recarregue seu arquivo $ profile com:. $ profile

Isso é semelhante ao comando de origem nos ambientes * nix IMHO.

Então, da próxima vez, se você é desenvolvedor usando o Powershell no Windows contra o repositório Git e deseja incluir apenas arquivos não rastreados, pode executar:

AddUntracked-Git

Isso segue a convenção do Powershell, onde você tem substantivos verbais.


0

git add. (adicione todos os arquivos neste diretório)

git add -all (adiciona todos os arquivos em todos os diretórios)

O git add -N pode ser útil para listar quais para mais tarde ....


git add -uirá adicionar arquivos modificados não untracked
Tarasovych

-3

Para adicionar todos os arquivos não rastreados, o comando git é

git add -A

Além disso, se você quiser obter mais detalhes sobre as várias opções disponíveis, digite o comando

git add -i

em vez do primeiro comando, com isso você terá mais opções, incluindo a opção de adicionar todos os arquivos não rastreados, como mostrado abaixo:

$ git add -i warning: o LF será substituído pelo CRLF no README.txt. O arquivo terá suas terminações de linha originais em seu diretório de trabalho. aviso: o LF será substituído pelo CRLF no package.json.

* Comandos * 1: status 2: atualização 3: reverter 4: adicionar não rastreados 5: patch 6: diff 7: sair 8: help O que agora> a

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.