Existe uma maneira de usar um comando como git ls-files
mostrar apenas arquivos não rastreados?
A razão pela qual estou perguntando é porque uso o seguinte comando para processar todos os arquivos excluídos:
git ls-files -d | xargs git rm
Eu gostaria de algo semelhante para arquivos não rastreados:
git some-command --some-options | xargs git add
Consegui encontrar a -o
opção git ls-files
, mas não é isso que eu quero, porque também mostra arquivos ignorados. Também pude criar o seguinte comando longo e feio:
git status --porcelain | grep '^??' | cut -c4- | xargs git add
Parece que deve haver um comando melhor que eu possa usar aqui. E se não houver, como crio comandos git personalizados?
git
git-status
git-rm
git-stage
git-ls-files
Somos todos Monica
fonte
fonte
git ls-files -d | xargs git rm
?git
funciona apenas em arquivos, ele não tem como rastrear pastas vazias. Tente emfind . -type d -empty
vez disso.Respostas:
Para listar arquivos não rastreados, tente:
Se você precisar canalizar a saída
xargs
, é recomendável cuidar dos espaços em branco usandogit ls-files -z
exargs -0
:Bom apelido para adicionar arquivos não rastreados:
Edit: Para referência: git-ls-files
fonte
!
significa o início da linha de alias ou onde isso está documentado?git add *
fará o mesmo: adicione todos os arquivos não rastreados, exceto o padrão (arquivos em que os caminhos são abordados.gitignore
).[alias] lso = "!f() { cd $(git rev-parse --show-toplevel); git ls-files -o; }; f"
Se você deseja apenas remover arquivos não rastreados, faça o seguinte:
adicione
x
a isso se você quiser incluir também arquivos especificamente ignorados. Eu usogit clean -dfx
um monte ao longo do dia.Você pode criar um git personalizado, basta escrever um script chamado
git-whatever
e colocá-lo em seu caminho.fonte
git add -A
ougit add -u
(dependendo do que faz mais sentido para você)git add -A -n
fará o que você quiser.-A
adiciona todos os arquivos não rastreados ao repositório,-n
torna-odry-run
onde a adição não é realizada, mas a saída de status é fornecida listando cada arquivo que teria sido adicionado.fonte
.gitignore
arquivos, o que geralmente é o que queremos, mas se nãogit add -fAn
,.add '$file'
. Considerando quegit ls-files --exclude-standard -o
dá uma saída nua, muito quente.A resposta aceita trava nos nomes de arquivos com espaço. Neste momento, não tenho certeza de como atualizar o comando alias, então colocarei a versão aprimorada aqui:
fonte
Tudo é muito simples
Para obter a lista de todos os arquivos não rastreados, use o comando git status com a opção -u (--untracked-files)
fonte
--ignored
aogit status -u
comandoAo procurar arquivos para adicionar potencialmente. A saída
git show
faz isso, mas também inclui muitas outras coisas. O comando a seguir é útil para obter a mesma lista de arquivos, mas sem todas as outras coisas.Isso é útil quando combinado em um pipeline para encontrar arquivos que correspondam a um padrão específico e, em seguida, canalizá-lo para
git add
.fonte
Eu sei que é uma pergunta antiga, mas em termos de lista de arquivos não rastreados, pensei em adicionar outro que também lista pastas não rastreadas:
Você pode usar a operação git clean com -n (execução a seco) para mostrar quais arquivos serão removidos (incluindo os arquivos .gitignore):
git clean -xdn
Isso tem a vantagem de mostrar todos os arquivos e pastas que não são rastreados. Parâmetros:
x
- Mostra todos os arquivos não rastreados (incluindo ignorados pelo git e outros, como saída de compilação etc ...)d
- mostra diretórios não rastreadosn
- e o mais importante! - dryrun, ou seja, na verdade não exclua nada, basta usar o mecanismo de limpeza para exibir os resultados.Pode ser um pouco perigoso fazê-lo assim, caso você esqueça o
-n
. Então, eu costumo usar o apelido no git config.fonte
Todas as respostas anteriores que eu verifiquei listariam os arquivos a serem confirmados também. Aqui está uma solução simples e fácil que lista apenas os arquivos que ainda não estão no repositório e não estão sujeitos a
.gitignore
.ou
fonte
Eu acho que isso será o mesmo que o pôster original pretendia:
git add .
fonte
git/svn add .
, o gatinho morre.git add .
impunemente!.gitignore
corretamente. Ainda é bom evitargit add .
, no entanto. Melhor égit add -u
.