Eu tenho vários arquivos em um conjunto de alterações, mas quero ignorar especificamente um único arquivo modificado. É assim depois de git status
:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
Existe uma maneira de fazer isso, git add
mas simplesmente ignore o arquivo de texto que não quero tocar? Algo como:
git add -u -except main/dontcheckmein.txt
main/*
, é necessário adicionar--
na frente dele para que o git saiba que é um caminho. As outras duas variantes funcionam sem incluir os dois traços. (Testado no prompt de comando no Windows 7 com msysGit)git reset
para essas pastas posteriormente ainda funcionará, mas levará muito tempo para o git adicionar as pastas grandes.1) Para começar a ignorar as alterações em um único arquivo já com versão
e desfazer isso
git update-index --no-assume-unchanged "main/dontcheckmein.txt"
docs do github para ignorar arquivos
2) Para ignorar completamente um único arquivo específico, impedindo que ele seja criado no repositório
Primeiro, veja esta postagem do stackoverflow: o Git global ignore não está funcionando
Em
.gitignore
, adicione o caminho relativo ao arquivo sem avanço./
.Portanto, se seu arquivo estiver em
MyProject/MyFolder/myfile.txt
(onde.git
também está oMyProject
pasta), adicioneMyFolder/myfile.txt
ao seu.gitignore
arquivo at .Você pode confirmar quais regras estão associadas a ignorar via
git check-ignore "MyFolder/myfile.txt"
Sobre ignorar global
Esse link fala sobre
~/.gitignore_global
, mas o arquivo está relacionado ao seu projeto. Portanto, se você colocar o padrão de exclusãoMyFolder/myfile.txt
em~/.gitignore_global
, ele vai trabalhar, mas não fará muito sentido ...Por outro lado, se você configurar seu projeto com
git config core.excludesfile .gitignore
onde.gitignore
estáMyProject
, o arquivo local será substituído~/.gitignore_global
, o que pode ter regras muito úteis ...Então, por enquanto, acho que é melhor criar um script para misturar o seu
.gitignore
com o~/.gitignore_global
at.gitignore
.Um último aviso
Se o arquivo que você deseja ignorar já estiver no repositório, esse método não funcionará, a menos que você faça o seguinte: faça
git rm "MyFolder/myfile.txt"
o backup primeiro, pois ele também será removido localmente! Você pode copiá-lo mais tarde ...fonte
git rm --cached MyFolder/myyfile.txt
para remover o arquivo do repositório, mas mantê-lo localmente. Explicação em help.github.comPara um arquivo
Para uma pasta
fonte
git add . && git reset -- main/*
?git push origin master
seu próximo push, apenas ogit push
git saberá que é isso no ramo principal. Espero que ajude.Agora
git
suportaexclude certain paths and files
pela pathspec magic:(exclude)
e sua forma abreviada:!
. Assim, você pode facilmente alcançá-lo como o seguinte comando.Na verdade, você pode especificar mais:
fonte
:!...
cláusulas para evitar que o shell se queixe. Assim, por exemplo:git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
.:!/path/to/(file1|file2)
?Enquanto Ben Jackson está correto, pensei em acrescentar como tenho usado essa solução também. Abaixo está um script muito simples que eu uso (que chamo de gitadd) para adicionar todas as alterações, exceto algumas poucas que eu continuo listadas em um arquivo chamado
.gittrackignore
(muito parecido com o funcionamento do .gitignore).E é assim que minha
.gittrackignore
aparência atual .Estou trabalhando em um projeto Android que eu compilo na linha de comando ao implantar. Este projeto depende do SherlockActionBar, portanto ele precisa ser referenciado em project.properties, mas isso interfere com a compilação; agora, apenas digito
gitadd
e adiciono todas as alterações ao git sem ter que desinstalar project.properties todas as vezes.fonte
--
era até o seu comentário. De acordo com as páginas do manual, é opcional e não altera o resultado do comando (pelo menos neste caso). Esta questão parece apoiar isso, stackoverflow.com/questions/17800994/… . Corrija-me se eu estiver errado, mas parece que isso significa "qualquer coisa deleite depois--
como argumentos, não Opções / desliga"--
nogit checkout
que vejo nessa pergunta. Eu não sabia o que era a corrida dupla até essa nossa troca também. Eu me pergunto se agit checkout
ambiguidade entre ramificações e arquivos poderia afetar, nesta ou em uma forma diferente,git reset
também.Para manter a alteração no arquivo, mas não confirmar, fiz isso
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
para verificar se o arquivo está excluído, faça
git status
fonte
Use
git add -A
para adicionar todos os arquivos modificados e recém-adicionados de uma só vez.Exemplo
fonte
fonte
Tente o seguinte:
fonte
Para o caso específico da pergunta, a maneira mais fácil seria adicionar todos os arquivos com extensão .c e deixar de fora todo o resto:
Do git-scm (ou / e
man git add
):Observe que isso significa que você também pode fazer algo como:
para adicionar todos os arquivos (que não são ignorados) que estão na
main
pasta. Você pode até enlouquecer com padrões mais elaborados:O acima irá adicionar todos os arquivos que estão na
s(any char)c
pasta e têmService
algum lugar em seu nome de arquivo.Obviamente, você não está limitado a um padrão por comando. Ou seja, você pode pedir ao git para adicionar todos os arquivos com uma extensão .c e .h :
Esse link pode fornecer mais algumas idéias de padrões globais.
Acho isso particularmente útil quando estou fazendo muitas alterações, mas ainda quero que meus compromissos permaneçam atômicos e reflitam um processo gradual, em vez de uma mistura de mudanças que eu possa estar trabalhando no momento. Obviamente, em algum momento, o custo de criar padrões elaborados supera o custo de adicionar arquivos com métodos mais simples, ou mesmo um arquivo por vez. No entanto, na maioria das vezes, sou facilmente capaz de identificar apenas os arquivos necessários com um padrão simples e excluir todo o resto.
A propósito, você pode precisar citar seus padrões glob para que funcionem, mas isso nunca foi o meu caso.
fonte
Eu uso
git add --patch
um pouco e queria algo assim para evitar ter que acessar do tempo todo os mesmos arquivos. Criei um par de aliases git muito hacky para fazer o trabalho:No meu caso, eu só queria ignorar certos arquivos minificados o tempo todo, mas você poderia fazê-lo usar uma variável de ambiente como
$GIT_EXCLUDE_PATTERN
para um caso de uso mais geral.fonte
Alterações a serem confirmadas: (use "git reset HEAD ..." para unstage)
fonte
Você pode tentar isso:
git add * && git reset main/dontcheckmein.txt
fonte