Meu problema é que tenho vários sites WordPress no meu repositório git, dos quais desejo confirmar seletivamente apenas o conteúdo de minhas themes
pastas, ignorando o restante dos arquivos redundantes encontrados no WordPress.
Eu usei arquivos .gitignore para ignorar os tipos de arquivos antes, mas ele pode ser usado ao contrário - ou seja, ignorar tudo, exceto um determinado caminho de pasta?
root (git repo)
- / wordpress
- - / (WordPress Site 1) / wp-content / themes
- - / (WordPress Site 2) / wp-content / themes
- - / (WordPress Site 3) / wp-content / themes
Obrigado-
ATUALIZAR:
Com base nas respostas, fiz o seguinte, mas não está funcionando. Alguma ideia?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
Eu também tentei as seguintes variações:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
Nada disso lê minhas themes
pastas.
**
curinga funciona apenas se você não tiver barras no seu padrão, consulte sparethought.wordpress.com/2011/07/19/…!/wordpress/*/wp-content/themes/**/*
Eu tentei o acima e eles não funcionaram tão bem. Uma abordagem melhor é a seguinte: https://gist.github.com/444295
fonte
modificar a primeira linha
mude para
fonte
Tente estas respostas:
fonte
!*/wp-content/themes/
e!*/wp-content/themes/*
. Você já tentou essa variação? Além disso, como uma alternativa, você pode simplesmente usar!*/wp-content/themes/
e em cada diretório temas têm seu próprio arquivo .gitignore com!*
!*/wp-content/themes*
Se você prefixar um padrão com um ponto de exclamação (
!
), ele nega qualquer padrão anterior que o exclua. Portanto, presumivelmente, você pode ignorar tudo e permitir apenas o que deseja usando esse padrão.fonte
!wordpress/[write out directories]/wp-content/themes/
. Observe a barra de fechamento e nenhum asterisco de fechamento. Observe também que*
corresponderá apenas a um nível, não a vários diretórios. Aqui está a página do manual: kernel.org/pub/software/scm/git/docs/gitignore.htmlEu precisava ignorar tudo, mas não uma pasta com subdiretórios.
Para mim, isso funciona
fonte
Digamos que você tenha uma estrutura de diretórios como esta:
Quando você deseja permitir apenas sites / all / files / private / newsilot e sites / default / files / private / newsilot , primeiro tente o seguinte:
Isto está errado! O difícil com o gitignore é que você primeiro deve permitir que o diretório pai ("privado") seja incluído , antes de permitir que o diretório filho ("jornalilot") seja incluído nos commits.
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
fonte
A resposta de Yarin funcionou para mim, aqui está minha versão (não preciso do
/wordpress
subdiretório):fonte
Eu sempre fico preso em algum lugar, mesmo depois de voltar a essa pergunta várias vezes. Eu vim com um processo detalhado de fazer isso passo a passo:
Primeiro basta usar
git add
para adicionar o conteúdo real.Ele mostra os arquivos relevantes adicionados ao índice, enquanto todos os outros ainda não são rastreados. Isso ajuda a construir
.gitignore
passo a passo.Adicione um
DUMMY.TXT
arquivo temporário ao seu diretório:Nosso objetivo agora é construir as regras para que isso
DUMMY.TXT
seja a única que ainda esteja aparecendo como Não rastreada quando terminarmos.Comece a adicionar as regras:
.gitignore
O primeiro é apenas ignorar tudo. Os arquivos não rastreados devem ter desaparecido, apenas os arquivos indexados devem estar mostrando:
Adicione o primeiro diretório no caminho
wp-content
Agora, os arquivos não rastreados aparecerão novamente, mas apenas
wp-content
o conteúdoIgnore tudo no primeiro diretório
/wp-content/*
e não ignore!/wp-content/themes
Agora, os arquivos não rastreados diminuirão ainda mais para apenas
wp-content/themes
Repita o processo até que o arquivo fictício seja o único ainda exibido como Não rastreado:
fonte
Para quem procura uma solução mais limpa , tente o seguinte.
Como mencionado nos comentários desta resposta, você deve usar esse método recursivamente.
Neste exemplo, você tem uma configuração de site em
./
que sua.git
pasta e.gitignore
arquivo estão localizados e uma instalação de WordPress./wordpress
. Para ignorar corretamente tudo sob o./wordpress
diretório, exceto o diretório do tema (wordpress/wp-content/themes/my-theme
), você terá que ignorar recursivamente e permitir cada diretório até o diretório que você deseja permitir:A razão para ignorar com um curinga e permitir (ou ignorar 'além de') o próprio diretório permite que o Git procure dentro do diretório primeiro antes de ignorar tudo o que está dentro. Em seguida, dizemos ao Git para ignorar tudo 'além' do diretório que especificamos. Aqui está a mesma sintaxe, mas na ordem em que o Git está olhando:
Espero que isso ajude alguém a entender melhor a necessidade do método recursivo.
fonte
atrasado para a festa, mas eis o que eu uso em profundidade desconhecida (a solução aceita requer profundidade conhecida)
dessa forma, tudo em conteúdo wp não é ignorado.
fonte
Depois de precisar disso várias vezes, finalmente encontrei uma solução [1]:
Explicação linha por linha:
.gitignore
se (e potencialmente.gitattributes
).[1] Limitações (que eu conheço):
/*
quebraria todo o esquema).wordpress
neste caso) não pode ter.
o nome (por exemplowordpress.1
, não funcionaria). Se tiver um.
, remova a linha 2 e encontre outra maneira de excluir todos os arquivos na raiz.git version 2.17.1.windows.2
fonte
Outra solução fácil:
Você deseja ignorar todos os arquivos do Wordpress, mas não o seu tema (por exemplo).
.gitignore , o conteúdo é:
Neste exemplo, você pode remover o wordpress se .gitignore estiver em diretório raiz do wordpress
Você pode fazer exatamente o mesmo com todas as pastas e conteúdos que deseja "excepcionalmente" manter fora das pastas / arquivos com gitignored
Conclusão:
MAS
fonte
Você pode tentar isso:
Onde :
fonte
Aqui está a minha solução, que pressupõe um checkout em
wp-content
e teste:
portanto, ignora corretamente tudo o que não quero e nada que queira manter.
Código de Liberação
O Gitlab é configurado com espelhos de repositório para ramificações protegidas, de acordo com https://docs.gitlab.com/ee/workflow/repository_mirroring.html
Quando o código é enviado para uma ramificação protegida, ele é espelhado para os servidores de armazenamento temporário e de produção no
/opt/checkout/repo.git/
repositório simples. O seguintepost-receive
gancho (pol/opt/checkout/repo.git/hooks/post-receive
) fará o checkout do código no diretório de trabalho.Para obter mais informações, consulte https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps
fonte
Aqui está como eu fiz isso:
Isto é o que funcionou para mim. Permite ignorar tudo, exceto arquivos ou pastas específicos
macOS sierra
fonte
Estou no mesmo barco tentando gerenciar um monte de sites do Wordpress sob um repositório. Minha estrutura de diretórios fica assim:
Quero apenas rastrear os itens dentro da
app/public
pasta para cada site. Eu tentei os exemplos nesta página , bem como algumas das sugestões aqui e acabei tentando o seguinte:que funcionou, mas eu teria que ignorar o mesmo caminho para cada site que estava tentando evitar.
Depois, substituí o nome do site
*
e isso fez o truque para mim. Então foi isso que acabei usando:Isso efetivamente ignorou tudo na pasta do site enquanto captura tudo na
app/public
pasta para qualquer site que eu criei na raiz.Note que ele não irá ignorar arquivos na raiz, apenas diretórios :)
Espero que isto ajude.
fonte
Este é o único arquivo que é ignorado na maioria dos casos, porque você tem o wp-config-sample.php que pode ser compartilhado com outras pessoas.
fonte