Emulando o status git --ignado na pasta não-repositório

1

Isso pode ser, em essência, uma duplicata da pergunta , no entanto, o script perl fornecido não funcionou na minha caso, tanto quanto eu posso dizer. Há também muitas perguntas sobre como encontrar vários padrões, mas é surpreendentemente difícil pesquisar porque o Google não parece fazer diferença entre um "arquivo de padrões" e um "padrão de nome de arquivo".

Eu gostaria de imitar o comportamento de

git status --ignored --porcelain | awk '{print $2}'

em uma pasta sem repositório. Ou seja, gostaria de listar arquivos e diretórios que correspondam aos padrões listados em um arquivo (especificado), com as seguintes restrições :

  • os padrões são escritos com a sintaxe do gitignore , em particular linhas vazias e comentários devem ser ignorados pelo script ;
  • o script deve sair do diretório de trabalho atual;
  • o script deve não entrar em diretórios correspondentes (isto é, uma correspondência é sempre uma folha) ou em links simbólicos.

Aqui está um exemplo simples:

$> cat .gitignore 
    *.DS_Store*
    tmp/
    a/**/foo

$> tree -a .
.
|-- .DS_store
|-- .gitignore
|-- a
|   |-- b
|   |   |-- foo
|   |   |   '-- file
|   |   '-- tmp
|   |-- foo
|   '-- tmp
|       '-- file
'-- c
    |-- .DS_Store?
    '-- foo

5 directories, 8 files

$> git status --ignored --porcelain | awk '{print $2}'
    .DS_store
    a/b/foo/
    a/foo
    a/tmp/
    c/.DS_Store?

Se possível, eu estaria particularmente interessado em soluções que funcionam tanto no osx como no linux, e que podem ser estendidas para considerar padrões no formato posix-egrep. Para a última parte, algo semelhante a find . -print | egrep -f patternfile poderia funcionar, embora isso andasse em diretórios correspondentes, o que poderia tornar as coisas muito lentas.

    
por Sheljohn 23.02.2017 / 13:05

0 respostas