Estou usando o git para sincronizar com o phonegap durante o teste no navegador nativo do telefone. Como tal, tenho a seguinte linha:
var isPhoneGap = false;
Obviamente, eu mudo isso durante a compilação, mas há alguma maneira de configurar o git para ignorar essa linha ou tenho que ir e colocá-lo em seu próprio arquivo e ignorá-lo dessa forma?
Estou usando Gitx e o terminal no OSX 10.6.
Respostas:
Se o seu arquivo for de um tipo específico, você pode declarar um driver de filtro de conteúdo , que pode ser declarado em um
.gitattributes
arquivo (conforme apresentado na "Expansão de palavras-chave" de " Atributos Git "):(você pode até definir esse filtro para um arquivo específico , se quiser)
Implemento:
yourFilterName.smudge
(acionado emgit checkout
) eyourFilterName.clean
(acionado emgit add
)Seu arquivo pareceria inalterado em
git status
, mas sua versão em check-out teria o valor correto paraisPhoneGap
.fonte
git diff or
git status`, ignorar os filtros? Então, ainda consigo ver o que é diferente? Meu caso de uso é para logs de depuração ... que eventualmente desejo excluir ... @jthill @VonCsh ".git/helper.sh"
certificando-me de passar por quaisquer parâmetros para o sed"$@"
(presumo que apenas o caminho do arquivo seja passado).Você pode usar
para ignorar as alterações de um arquivo que você não deseja rastrear. Eu uso essa solução quando preciso ter um arquivo no repositório, mas esse arquivo tem algumas partes que mudam que não preciso rastrear sempre.
Quando o arquivo tem alterações importantes, você deve fazer o seguinte:
Além disso, consulte o índice de atualização do documento Git para obter o
--[no-]assume-unchanged
parâmetro.fonte
--skip-worktree
seja a melhor opção para a maioria dos propósitos. stackoverflow.com/a/39583010/4233593git commit -a
está livre para confirmar essa alteração). 'Gitx deve permitir que você confirme ou ignore linhas individuais (você já deve saber disso), mas você terá que fazer isso toda vez que fizer um commit. Acho que seria melhor ter um arquivo de configuração por destino de implantação (você pode fazer a versão deles) e alguns parâmetros de tempo de execução para o modo como você está iniciando o servidor (como
./myserver --config=whatever.js
).fonte
Continuando https://stackoverflow.com/a/20574486/4935114 , @Mike propôs a criação de um
pre-commit
gancho que irágrep
nos arquivos de teste para as linhas que alguém pode querer ignorar. O gancho verifica se essas linhas foram encenadas. Em caso afirmativo, éecho
um aviso eexit
está com código1
para que o processo de confirmação não continue.Inspirado pela resposta de @Mike , acabei usando talvez uma versão melhorada de seu gancho que mostra automaticamente
reset
(com a-p
bandeira) a linha específica que queremos ignorar.Não tenho certeza se este gancho funcionará para uma situação onde você tem muitos arquivos com esta linha para serem ignorados, mas este
pre-commit
gancho procura uma alteração nesta linha em um arquivo específicobuildVars.java
. O script de gancho se parecia com isso quando testei em minha máquina.Explicação
O que fiz foi ecoar uma sequência de controle que procura o regex
isPhoneGap
durante umreset
processo interativo . Emulando assim um usuário que pressiona/
para pesquisarisPhoneGap
, pressionay
quando questionado se deseja descartar esse patch e finalmente pressionaq
para sair do interativoreset
.O processo de patch reverso interativo está documentado aqui: https://git-scm.com/docs/git-add#git-add-patch
NOTA: O script acima presume que a variável
interactive.singleKey
éfalse
. Se você configurou o seu paratrue
, remova qualquer um$'\n'
doecho
comando logo após o aviso.fonte
É assim que você pode fazer isso com filtros git :
OU
*.rb filter=gitignore
, ou seja, execute o filtro nomeadogitignore
em todos os*.rb
arquivosgitignore
filtro emgitconfig
:$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
, ou seja, exclua essas linhas$ git config --global filter.gitignore.smudge cat
, ou seja, não faça nada ao puxar o arquivo do repoObservações:
Claro, isso é para arquivos ruby, aplicados quando uma linha termina com
#gitignore
, aplicados globalmente em~/.gitconfig
. Modifique isso como for necessário para seus propósitos.Aviso!!
Isso deixa seu arquivo de trabalho diferente do repo (é claro). Qualquer check-out ou rebasing significará que essas linhas serão perdidas! Esse truque pode parecer inútil, já que essas linhas são perdidas repetidamente no check-out, no rebase ou no pull, mas tenho um caso de uso específico para fazer uso dele.
Apenas
git stash save "proj1-debug"
enquanto o filtro está inativo (apenas desativá-lo temporariamentegitconfig
ou algo assim). Dessa forma, meu código de depuração sempre pode ser adicionadogit stash apply
ao meu código a qualquer momento, sem medo de essas linhas serem confirmadas acidentalmente.Tenho uma ideia possível para lidar com esses problemas, mas tentarei implementá-la em outra ocasião.
Agradecimentos a Rudi e jw013 por mencionar filtros e atributos git.
fonte
Um driver de filtro de conteúdo não é uma boa solução. Você pode ocultar essa linha de
git status
/ etc, mas ela não está sendo realmente ignorada. Assim que você alterar o valor, seu diretório de trabalho será marcado como sujo, embora a alteração possa não estar visível.Se você realmente deseja esta linha fora do controle de versão, alterá-la para um argumento de linha de comando ou colocá-la em um arquivo de inclusão ou construção ignorado pode ser o único meio prático.
fonte
Acho que isso pode ser algo que aparece em mais de uma linha de sua fonte.
Eu acho que seria mais limpo ter um arquivo .userbuildconfig de algum tipo que você acabou de incluir e ter os padrões verificados. Então você pode usar a sugestão de Carlos para marcar esse arquivo sozinho como assumir inalterado. Desta forma, outras alterações no arquivo onde você precisa verificar a configuração não serão perdidas.
Isso pode permitir que você ajuste macros do pré-processador localmente (ou para java, algo como https://stackoverflow.com/a/1813873/1270965 ).
fonte
Não. Você só pode ignorar arquivos individuais (e mais), pois as linhas em .gitignore correspondem aos nomes dos arquivos e não ao conteúdo do arquivo. Você já mencionou a solução para isso, ou seja, ignore um único arquivo que contenha o conteúdo que deseja ignorar.
fonte