O que é um arquivo .gitignore e como configurá-lo?
Um arquivo . gitignore é um arquivo de texto colocado em seu repositório git que diz ao git para não rastrear certos arquivos e pastas que você não deseja que sejam enviados para seu repositório mestre. Ele tem muitos usos e você quase sempre precisará configurá-lo se estiver configurando um novo repo.
Qual é o ponto de . gitignore?
Na maioria dos projetos, há uma diferença entre código / configuração e os arquivos gerados a partir desse código ou configuração. O último geralmente não é útil e geralmente pode ser ignorado.
Normalmente, você só deseja que o código e a configuração sejam rastreados por meio do git. Isso ocorre porque os arquivos gerados são efêmeros e, se você excluí-los, pode apenas gerá-los novamente. Freqüentemente, não faz sentido enviá-los, pois eles simplesmente complicam as coisas e causam conflitos de mesclagem desnecessários.
Esta é uma definição ampla, então vamos ver um exemplo. Em projetos Node JS, há uma pasta chamada node_modules que contém todos os pacotes externos de que seu código precisa para ser executado. Você pode excluir este diretório e reconstruí-lo completamente executando npm install, que usa a configuração package. json para pesquisar pacotes.
Então, qual é o ponto de ter a pasta node_modules no Git? Na verdade, não há nenhum, pois é mais complicado, pode causar problemas e pode até aumentar drasticamente o tamanho do repositório Git em muitos casos.
Publicidade
Se você ignorar o diretório inteiro, todos os seus colegas de trabalho ainda poderão gerar sua própria cópia local do arquivo package. json. Portanto, em vez disso, apenas package. json deve ser rastreado no Git. A maioria das coisas que são adicionadas a . gitignore seguem esse padrão. Artefatos de construção, como uma pasta ./bin/, não se comprometam, pois são resultado direto do próprio código.
Outras coisas também podem ser adicionadas ao . gitignore por conveniência. MacOS gera arquivos de sistema chamados . DS_store, que você sempre pode ignorar. Talvez você armazene chaves de API em . env / que não deseja que sejam rastreadas no controle de origem, você também pode adicioná-las. Caches, logs e outras saídas geralmente podem ser ignorados.
Usando . gitignore
Você precisará criar um arquivo chamado . gitignore, sem extensões, na raiz do seu projeto onde o diretório . git está localizado. Você pode fazer isso em seu navegador de arquivos ou na linha de comando com qualquer editor de texto CLI:
nano . gitignore
Você pode configurar isso de várias maneiras, mas as principais ferramentas que você tem são:
- * curingas, que correspondem a qualquer texto e podem ser usados para corresponder a qualquer diretório, ou qualquer arquivo, independentemente da extensão.
- !, que funciona como uma espécie de lista branca que nega um previamente excluído Arquivo. O principal problema com isso é que ele só coloca o arquivo na lista de permissões se ele foi excluído diretamente e não funcionará para arquivos em diretórios que foram completamente excluídos.
- **, que corresponde a qualquer coisa recursivamente em diretórios. Por exemplo, ** / *. Json corresponderá a qualquer arquivo JSON, independentemente de onde ele estiver, e src / ** corresponderá a todos os arquivos na pasta recursivamente. Isso é útil quando você deseja colocar na lista de permissões e não ignorar todo o diretório.
Por exemplo, um Node JS gitignore pode ter a seguinte aparência:
node_modules / build / npm-debug. log . env . env. test . env. production . DS_Store . npm . eslintcache logs / * . log npm-debug. log *
Arquivos na lista de permissões com! pode ser muito útil para muitas configurações. Por exemplo, em um de meus projetos eu tinha uma ferramenta chamada steamcmd que baixa dependências para servidores de jogos do Steam. Esta ferramenta é empacotada em um único executável portátil, mas produz um monte de lixo que eu não quero que seja rastreado no Git.
Publicidade
A solução foi ignorar tudo na pasta, mas colocar o executável na lista de permissões. Isso funcionará para qualquer executável portável que se expanda dessa forma ou produza lixo desnecessário no diretório.
Projeto / steamcmd / **! Projeto / steamcmd / steamcmd. exe
gitignore também usa alguns outros padrões de globbing do Unix para combinar strings, como um ponto de interrogação para combinar um único caractere ou [a-z] que combinará com os conjuntos de caracteres.
Você também pode escrever vários arquivos . gitignore que podem corresponder a arquivos relativos a eles mesmos. Isso não é realmente muito útil, pois você pode simplesmente incluir as regras no arquivo raiz, o que é mais fácil de controlar, mas pode ajudar na repetição do código em alguns casos. No entanto, a solução alternativa é usar conjuntos de caracteres para corresponder a vários diretórios. Por exemplo, correspondendo diretórios em maiúsculas e minúsculas com um conjunto:
# Build results [Dd] ebug / [Dd] ebug Public / [Re] release / [Releases /
Se você estiver tendo problemas com sua configuração . gitignore, poderá depurá-la com o comando check-ignore Git:
git check-ignore -v testfile. json
. gitignore global
Git também tem uma configuração global para . gitignore, mas não deve ser usado na maioria dos casos. Isso ocorre porque o . gitignore global no seu computador não se aplica aos seus colegas de trabalho, e apenas aos commits feitos com a sua instância do Git.
Se desejar defini-lo de qualquer maneira, poderá fazê-lo com o seguinte comando:
git config --global core. excludesfile ~ / . globalignore
Forçar confirmação ou armazenamento de arquivos ignorados
Forçar a confirmação geralmente é uma má ideia — você provavelmente deve adicionar uma lista de permissões para este arquivo específico, porque uma vez confirmado, as atualizações para este arquivo não serão rastreadas. Mas, se quiser fazer um commit manualmente, você pode executar git add com o parâmetro --force:
git add -f debug. log
Publicidade
Da mesma forma, git stash também pode esconder alterações locais em arquivos ignorados, o que pode realmente ser útil, pois não afetará o repositório remoto:
git stash --todos
Nenhum comentário