Eu tenho vários arquivos em um site CodeIgniter que desejarei ter no repositório, mas não acompanho nenhuma alteração.
Por exemplo, implanto uma nova instalação dessa estrutura em um novo cliente, desejo que os seguintes arquivos sejam baixados (eles têm valores padrão CHANGEME) e só preciso fazer alterações específicas para esse cliente (credenciais do banco de dados, informações de endereço de email, CSS customizado).
// the production config files i want the files but they need to be updated to specific client needs
application/config/production/config.php
application/config/production/database.php
application/config/production/tank_auth.php
// index page, defines the environment (production|development)
/index.php
// all of the css/js cache (keep the folder but not the contents)
/assets/cache/*
// production user based styling (color, fonts etc) needs to be updated specific to client needs
/assets/frontend/css/user/frontend-user.css
Atualmente, se eu correr
git clone [email protected]:user123/myRepo.git httpdocs
e edite os arquivos acima, tudo está ótimo. Até eu lançar um hotfix ou patch e executar git pull
. Todas as minhas alterações são substituídas.
Respostas:
O git tem uma solução diferente para fazer isso. Primeiro mude o arquivo que você não deseja que seja rastreado e use o seguinte comando:
e se você deseja rastrear as alterações novamente, use este comando:
Documentação do git-update-index
fonte
--skip-worktree
opção é mais adequada para esse trabalho do que--assume-unchanged
.Para extrair uma resposta dos comentários de outra resposta:
$ git update-index --skip-worktree FILENAME
Parece ser uma opção melhor do que
--assume-unchanged
Pode-se ler mais sobre isso aqui: Git - Diferença entre 'assumir-inalterado' e 'ignorar-área de trabalho'
fonte
Para meus projetos do Code Igniter, mantenho database.php.example e config.php.example no repositório.
Em seguida, adiciono config.php e applications / config / database.php ao arquivo .gitignore .
Então, finalmente, quando implanto, posso copiar os arquivos .example (para config.php e database.php), personalizá-los e eles não serão rastreados pelo GIT.
fonte
Eu os colocava no seu
.gitignore
arquivo e apenas os copiava manualmente, conforme necessário.Portanto, o nome do arquivo do esqueleto estaria no git, os nomes de arquivos ignorados não estariam no git (mas em .gitignore). Dessa forma, quando a etapa manual para copiá-los para 'real' do 'modelo' (melhor nome do que esqueleto, talvez) for concluída, eles serão imediatamente ignorados.
fonte
git rm <file>
. O objetivo é o IE: um arquivo config.php. Eu quero manter o arquivo de configuração, mas obviamente não quero rastrear as credenciais do banco de dados de cliente para cliente, pois são diferentes.git add file1
e edite-o.gitignore
. O arquivo confirmado permanecerá lá e não será atualizado. Ou: Você pode adicionar o arquivo para.gitignore
e, em seguida, adicioná-lo comgit add --force file1
para forçar o arquivo em Você pode usar a segunda opção sempre que você tem que substituir o arquivo.As respostas dadas estão resolvendo o problema apenas parcialmente, mas introduzindo ainda mais problemas.
Eu precisava preservar o arquivo "Web.Local.config". A única solução que funcionou para mim foi:
1. Excluir o arquivo do projeto
2. Crie uma cópia separada do arquivo como Web.LocalTemplate.config
Agora que o "Web.LocalTemplate.config" é rastreado pelo Git, todos os desenvolvedores podem usá-lo como ponto de partida. No entanto, o "Web.Local.config", que não faz parte do projeto, será automaticamente ignorado.
fonte
git update-index --skip-worktree FILENAME
resolver apenas parcialmente o seu problema, ou até adicionar mais problemas? Resolve exatamente o que você está tentando fazer. Você tentou?