Surpreso com tantas respostas incorretas. -u noestá errado. -unoestá correto. -u notenta fazer um status em um arquivo chamado no! O nãono é um argumento para . Para forçar a ser interpretado como um argumento para , não deve haver espaço. Para testar isso, faça e compare com . -uno-utouch Invalidgit status -uInvalidgit status -u Invalid
Aaron McDaid
Respostas:
251
Como já foi dito, para excluir do status, basta usar:
git status -uno # must be "-uno" , not "-u no"
Se você preferir ignorar permanentemente os arquivos não rastreados no momento, poderá, a partir da raiz do seu projeto, iniciar:
Toda chamada subseqüente git statusignorará explicitamente esses arquivos.
UPDATE : o comando acima tem uma pequena desvantagem: se você ainda não possui um .gitignorearquivo, seu gitignore irá se ignorar! Isso acontece porque o arquivo .gitignoreé criado antes da git status --porcelainexecução. Portanto, se você ainda não possui um .gitignorearquivo, recomendo usar:
Isso cria um subshell que é concluído antes da .gitignorecriação do arquivo.
EXPLICAÇÃO DO COMANDO Como estou recebendo muitos votos (obrigado!) Acho melhor explicar um pouco o comando:
git status --porcelainé usado em vez de git status --shortporque o manual declara "Forneça a saída em um formato fácil de analisar para scripts. Isso é semelhante à saída curta, mas permanecerá estável nas versões git e independentemente da configuração do usuário". Portanto, temos a parseabilidade e a estabilidade;
grep '^??'filtra apenas as linhas iniciadas por ??, as quais, de acordo com o manual de status do git , correspondem aos arquivos não rastreados;
cut -c4- remove os 3 primeiros caracteres de cada linha, o que fornece apenas o caminho relativo para o arquivo não rastreado;
os |símbolos são tubos , que passam a saída do comando anterior para a entrada do comando a seguir;
os símbolos >>e >são operadores de redirecionamento , que anexam a saída do comando anterior a um arquivo ou substituem / criam um novo arquivo, respectivamente.
Outra variante para aqueles que preferem usarsed em vez de grepe cut, aqui está uma outra maneira:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
cut -c4- remove os 4 primeiros caracteres de cada linha, o que nos fornece apenas o caminho relativo para o arquivo não rastreado; Não. -cMarca o início de uma lista de números de coluna a serem cortados. E 4-seleciona a linha da coluna 4 até o final, que corta as colunas 1-3. Portanto, seu comando recortar remove os 3 primeiros caracteres de cada linha. Se você removesse 4 caracteres de uma linha de status do git, como a do arquivo aqui:, ?? app/views/static_pages/contact.html.erbvocê removeria a primeira letra de app. Portanto, o comando está correto, mas a explicação está com defeito.
7stud 10/09/14
@ 7stud: obrigado, você está certo, eu escrevi 4 por engano. Eu corrigi a resposta.
Diego
2
Eu realmente aprecio a explicação do comando. É bom saber o que os comandos aleatórios que copiei da Internet estão fazendo e nos ajuda a aprender como usar a linha de comando e o git melhor.
Eric Fitting
1
-u nonão funciona para mim. Mas -unofaz. Atualizei a resposta de acordo. Esse é um design estranho para o git. Estou no git 1.7.1
Aaron McDaid 01/01
2
@AaronMcDaid: obrigado. A mudança está documentado aqui , e discutido aqui
Diego
51
Se você deseja ignorar permanentemente esses arquivos, uma maneira simples de adicioná-los .gitignoreé:
Por que isso não recebe tantos votos? Não há necessidade de passar por outros 2 programas!
JoelFan
4
@ JoelFan: duas razões: 1) essa funciona apenas a partir da raiz do git , enquanto a aceita funciona em todos os subdiretórios, você só precisa ajustar o .gitignorecaminho de destino 2) se você tiver um diretório não rastreado, esta lista cada e todos os arquivos nele, mas não o diretório não rastreado em si (para que você não ignore o diretório e, portanto, ainda receba os arquivos futuros relatados no diretório como não rastreados, enquanto o aceito lista apenas o diretório, e não os arquivos não rastreados dentro . Esta é uma questão do que você quer fazer, mas muitas vezes você só quer ignorar toda a dir
Diego
1
Obrigado, Poolie. Agradeço a diferença de sua sugestão, devido aos pontos mencionados por @Diego. Comecei a trabalhar com uma biblioteca de arquivos e pastas e não quero rastrear / enviar os arquivos originais. Eu só quero rastrear os arquivos que adiciono ou reconstruo na biblioteca. Adicionar as pastas pai ignoraria tudo. Esta / sua solução adicionou todos os 1696 arquivos em um piscar de olhos. xD
Chaos7703 30/07
Isso também pode ser alcançado usando git config status.showUntrackedFiles no.
O parâmetro mode é usado para especificar a manipulação de arquivos não rastreados. É opcional: o padrão é para todos e, se especificado, deve estar preso à opção (por exemplo, -uno, mas não -u no).
Bem, se todo mundo iria RTFM antes de postar, nenhum de nós jamais iria obter qualquer representante :-)
Jenny D
4
Dois caminhos:
use o argumento "-uno" para git-status. Aqui está um exemplo:
[jenny@jenny_vmware:ft]$ git status
# On branch ft
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)
Ou você pode adicionar os arquivos e diretórios ao .gitignore, caso em que eles nunca aparecerão.
Uma maneira prática de editar o .gitignoreser git status | cat >> temp && vim temp. Em seguida, edite o arquivo para que as primeiras linhas e a última linha sejam excluídas, assim como o final #e o espaço em branco a seguir. Então cat temp >> .gitignore && rm temp. Caso não .gitignoreestivesse presente antes, mv temp .gitignoreservirá. Coisas feias, mas melhor do que atualizar .gitignoremanualmente.
Sj #
1
Esta resposta está incorreta. A resposta correta é -uno. Se você usar -u no, é equivalente a no -u- fará um status em um arquivo chamado no(que provavelmente não existe) e usará o -umodo padrão . ou seja, é equivalente agit status no
Aaron McDaid
3
-u notambém não mostra arquivos não estágios. -unofunciona como desejado e mostra sem estágio, mas oculta sem rastreamento.
Mesmo isso não está correto. git status -u Xé equivalente a git status X -u( Xnão é um argumento para -u). Isso, por sua vez, é equivalente a git status X(porque -usem argumento é o padrão -u). Portanto, é simplesmente um status git no arquivo X. Então, se Xé nosimplesmente tenta fazer um git status em um arquivo chamado no, o que você provavelmente não tem
Aaron McDaid
2
Caso você não esteja no Unix como o SO, isso funcionaria no Windows usando o PowerShell
No entanto, o .gitignorearquivo precisa ter uma nova linha vazia, caso contrário, ele acrescentará texto à última linha, independentemente de ter conteúdo.
Se você possui muitos arquivos não rastreados e não deseja " gitignore" todos, observe que, desde o git 1.8.3 (22 de abril de 2013) , git statusele mencionará o --untracked-files=nomesmo se você não adicionou essa opção no diretório " " primeiro lugar!
" git status" sugere que os usuários estudem o uso da --untracked=noopção quando demorar muito.
Eu vim aqui tentando resolver um problema um pouco diferente. Talvez isso seja útil para outra pessoa:
Eu crio um novo ramo feature-a. como parte deste ramo, crio novos diretórios e preciso modificar .gitignore para suprimir alguns deles. Isso acontece muito ao adicionar novas ferramentas a um projeto que cria várias pastas de cache. .serverless, .terraformetc.
Antes que eu esteja pronto para mesclar isso de volta ao master, eu tenho outra coisa, então faço o checkout master novamente, mas agora git statusrecolho as pastas suprimidas novamente, pois o .gitignore ainda não foi mesclado.
A resposta aqui é realmente simples, embora eu tivesse que encontrar este blog para descobrir:
Basta fazer o checkout do arquivo .gitignore da feature-aramificação
*
provavelmente não será o que você deseja.-u no
está errado.-uno
está correto.-u no
tenta fazer um status em um arquivo chamadono
! O nãono
é um argumento para . Para forçar a ser interpretado como um argumento para , não deve haver espaço. Para testar isso, faça e compare com .-u
no
-u
touch Invalid
git status -uInvalid
git status -u Invalid
Respostas:
Como já foi dito, para excluir do status, basta usar:
Se você preferir ignorar permanentemente os arquivos não rastreados no momento, poderá, a partir da raiz do seu projeto, iniciar:
Toda chamada subseqüente
git status
ignorará explicitamente esses arquivos.UPDATE : o comando acima tem uma pequena desvantagem: se você ainda não possui um
.gitignore
arquivo, seu gitignore irá se ignorar! Isso acontece porque o arquivo.gitignore
é criado antes dagit status --porcelain
execução. Portanto, se você ainda não possui um.gitignore
arquivo, recomendo usar:Isso cria um subshell que é concluído antes da
.gitignore
criação do arquivo.EXPLICAÇÃO DO COMANDO Como estou recebendo muitos votos (obrigado!) Acho melhor explicar um pouco o comando:
git status --porcelain
é usado em vez degit status --short
porque o manual declara "Forneça a saída em um formato fácil de analisar para scripts. Isso é semelhante à saída curta, mas permanecerá estável nas versões git e independentemente da configuração do usuário". Portanto, temos a parseabilidade e a estabilidade;grep '^??'
filtra apenas as linhas iniciadas por??
, as quais, de acordo com o manual de status do git , correspondem aos arquivos não rastreados;cut -c4-
remove os 3 primeiros caracteres de cada linha, o que fornece apenas o caminho relativo para o arquivo não rastreado;|
símbolos são tubos , que passam a saída do comando anterior para a entrada do comando a seguir;>>
e>
são operadores de redirecionamento , que anexam a saída do comando anterior a um arquivo ou substituem / criam um novo arquivo, respectivamente.Outra variante para aqueles que preferem usar
sed
em vez degrep
ecut
, aqui está uma outra maneira:fonte
cut -c4-
remove os 4 primeiros caracteres de cada linha, o que nos fornece apenas o caminho relativo para o arquivo não rastreado; Não.-c
Marca o início de uma lista de números de coluna a serem cortados. E4-
seleciona a linha da coluna 4 até o final, que corta as colunas 1-3. Portanto, seu comando recortar remove os 3 primeiros caracteres de cada linha. Se você removesse 4 caracteres de uma linha de status do git, como a do arquivo aqui:,?? app/views/static_pages/contact.html.erb
você removeria a primeira letra deapp
. Portanto, o comando está correto, mas a explicação está com defeito.-u no
não funciona para mim. Mas-uno
faz. Atualizei a resposta de acordo. Esse é um design estranho para o git. Estou no git 1.7.1Se você deseja ignorar permanentemente esses arquivos, uma maneira simples de adicioná-los
.gitignore
é:git ls-files --others --exclude-standard >> .gitignore
Isso enumerará todos os arquivos em diretórios não rastreados, que podem ou não ser o que você deseja.
fonte
.gitignore
caminho de destino 2) se você tiver um diretório não rastreado, esta lista cada e todos os arquivos nele, mas não o diretório não rastreado em si (para que você não ignore o diretório e, portanto, ainda receba os arquivos futuros relatados no diretório como não rastreados, enquanto o aceito lista apenas o diretório, e não os arquivos não rastreados dentro . Esta é uma questão do que você quer fazer, mas muitas vezes você só quer ignorar toda a dirgit config status.showUntrackedFiles no
.Encontrado no manual
git status -uno
fonte
Dois caminhos:
use o argumento "-uno" para git-status. Aqui está um exemplo:
Ou você pode adicionar os arquivos e diretórios ao .gitignore, caso em que eles nunca aparecerão.
fonte
.gitignore
sergit status | cat >> temp && vim temp
. Em seguida, edite o arquivo para que as primeiras linhas e a última linha sejam excluídas, assim como o final#
e o espaço em branco a seguir. Entãocat temp >> .gitignore && rm temp
. Caso não.gitignore
estivesse presente antes,mv temp .gitignore
servirá. Coisas feias, mas melhor do que atualizar.gitignore
manualmente.-uno
. Se você usar-u no
, é equivalente ano -u
- fará um status em um arquivo chamadono
(que provavelmente não existe) e usará o-u
modo padrão . ou seja, é equivalente agit status no
-u no
também não mostra arquivos não estágios.-uno
funciona como desejado e mostra sem estágio, mas oculta sem rastreamento.fonte
git status -u X
é equivalente agit status X -u
(X
não é um argumento para-u
). Isso, por sua vez, é equivalente agit status X
(porque-u
sem argumento é o padrão-u
). Portanto, é simplesmente um status git no arquivoX
. Então, seX
éno
simplesmente tenta fazer um git status em um arquivo chamadono
, o que você provavelmente não temCaso você não esteja no Unix como o SO, isso funcionaria no Windows usando o PowerShell
git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
No entanto, o
.gitignore
arquivo precisa ter uma nova linha vazia, caso contrário, ele acrescentará texto à última linha, independentemente de ter conteúdo.Esta pode ser uma alternativa melhor:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
fonte
Se você possui muitos arquivos não rastreados e não deseja "
gitignore
" todos, observe que, desde o git 1.8.3 (22 de abril de 2013) ,git status
ele mencionará o--untracked-files=no
mesmo se você não adicionou essa opção no diretório " " primeiro lugar!fonte
Eu vim aqui tentando resolver um problema um pouco diferente. Talvez isso seja útil para outra pessoa:
Eu crio um novo ramo
feature-a
. como parte deste ramo, crio novos diretórios e preciso modificar .gitignore para suprimir alguns deles. Isso acontece muito ao adicionar novas ferramentas a um projeto que cria várias pastas de cache..serverless
,.terraform
etc.Antes que eu esteja pronto para mesclar isso de volta ao master, eu tenho outra coisa, então faço o checkout
master
novamente, mas agoragit status
recolho as pastas suprimidas novamente, pois o .gitignore ainda não foi mesclado.A resposta aqui é realmente simples, embora eu tivesse que encontrar este blog para descobrir:
Basta fazer o checkout do arquivo .gitignore da
feature-a
ramificaçãofonte