Respostas:
Não esqueça, de acordo com o gitignore , que existe uma ordem de precedência nas diferentes "fontes de padrões de ignorar" que o Git considera:
$GIT_DIR/info/exclude
.core.excludesfile
.Os dois últimos podem ser uma solução para o seu problema, mas:
(Veja também esta questão SO )
As outras duas soluções envolvem a atualização do índice ( git update-index
):
git update-index --assume-unchanged
: consulte " Git: rastreie apenas um arquivo no repositório local e mantenha-o no repositório remoto ". git update-index --assume-unchanged
no diretório ". --no-assume-unchange
para reverter o efeito: Consulte " É possível git add
um arquivo atualmente protegido por assume-unchanged
? ".No entanto, quando você faz check-out em outra ramificação ou quando você git pull
, esse status "ignorar" pode ser redefinido. Daí a outra opção:
git update-index --skip-worktree
; Vejo:
A diferença entre os dois é explicada em " Git - Diferença entre ' assume-unchanged
' e ' skip-worktree
' ".
update-index --skip-work-tree
. Editei a resposta para adicionar alguns links às respostas antigas que ilustram esses dois update-index
comandos.
Se você pode modificar, .git/info/exclude
pode colocar as mesmas regras lá. Mas esse arquivo está apenas no seu repositório local.
.git
diretório em uma submodule ...
.git
pasta de um sub-módulo está realmente em parent_repo/.git/modules/submodule_name
. Então você editariaparent_repo/.git/modules/submodule_name/info/exclude
Existem três maneiras de informar ao GIT quais arquivos ignorar:
.gitignore
arquivos$GIT_DIR/.git/info/exclude
core.excludesfile
configuraçãoOs dois últimos pontos podem resolver seu problema.
Para mais informações, consulte gitignore (5) .
Se você deseja apenas ter alguns arquivos locais no repositório e o local do subdiretório for flexível, você pode colocar seus arquivos tracked_dir1/tracked_dir2/untracked_dir/
e adicionar um tracked_dir1/tracked_dir2/untracked_dir/.gitignore
conteúdo com, como:
*
Ou seja,
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Eu já estive em situações semelhantes, então estou adicionando minha solução preferida que não vejo mencionada. O problema git update-index --assume-unchanged
nesse caso é que você não pode fazer isso para um arquivo não rastreado. Você disse
Não consigo modificar o .gitignore do meu repositório.
Eu vou assumir o que você quer dizer é que você não pode enviar nenhuma alteração para .gitignore
a origem. Se for esse o caso, o que você pode fazer é adicionar o arquivo não rastreado ao seu local .gitignore
, git update-index --assume-unchanged .gitignore
para que sua alteração para .gitignore
nunca seja enviada por push. Agora você está ignorando o arquivo (possivelmente) não rastreado e não está afetando o .gitignore
arquivo remoto .
Ignore as alterações locais nos arquivos rastreados:
git update-index --assume-unchanged my-file.php
Desconecte as alterações locais nos arquivos rastreados:
git update-index --no-assume-unchanged my-file.php
fonte: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
Você pode usar o método gitignore global em vez de modificar o método do projeto https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
update-index --assume-unchanged
@see stackoverflow.com/a/25253144/292408