Belirli dizinler dışında her şeyi yoksaymak için .gitignore kullanma


141

Benim sorunum, git repo, themesWordPress bulunan gereksiz dosyaları geri kalanı göz ardı ederken sadece benim klasörlerin içeriğini seçici olarak taahhüt etmek istiyorum bir sürü WordPress web siteleri var .

Daha önce dosya türlerini yoksaymak için .gitignore dosyalarını kullandım, ancak başka bir şekilde kullanılabilir mi - her şeyi görmezden gelmek AMA belirli bir klasör yolu mu?

root (git repo)
- / wordpress
- - / (WordPress Site 1) / wp-content / temalar
- - / (WordPress Site 2) / wp-content / temalar
- - / (WordPress Site 3) / wp-content / temalar

Teşekkürler-

GÜNCELLEME:

Cevaplara dayanarak aşağıdakileri yaptım ama işe yaramıyor. Herhangi bir fikir?

# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*

Ayrıca aşağıdaki varyasyonları denedim:

!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*

Bunların hiçbiri themesklasörlerimi okumuyor .

Yanıtlar:


133

İşte böyle yaptım - esasen yolları yukarı yürümek zorundasınız, herhangi bir yönde birden fazla seviye joker olamaz:

# Ignore everything:
*

# Except for the themes directories:

!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*

Eklemek istediğiniz her düzey için içeriğe nasıl açıkça izin vermeniz gerektiğine dikkat edin. Bu yüzden temalar altında 5 alt dizinim varsa, hala bunu açıklamam gerekiyor.

Sadece benim için böyle çalıştı. Birisi elbette daha bilinçli bir açıklama sunmayı umuyorsa.

Ayrıca, bu cevaplar yararlıdır:
gitignore nasıl-nasıl- olumsuz-desen-çalışma-in-
nasıl-git-gitignore-dışlama-kurallar-aslında-çalışma


NOT: Ben çift joker 'globs' kullanarak ama göre çalıştı bu işlevselliği bağımlı bir sistem olduğunu ve benim mac üzerinde çalışmaya vermedi:

İşe yaramadı:

!**/wp-content/themes/
!**/wp-content/themes/**

4
git 1.8.4'ten önce **joker karakter yalnızca deseninizde eğik çizgi yoksa çalışır, bkz. sparethought.wordpress.com/2011/07/19/…

Bu işe !/wordpress/*/wp-content/themes/**/*
yarar

1
Bu sözdizimi pencerelerde çalışıyor mu? Benim için çalışmıyor gibi görünüyor ...
ScottF

Windows 10'da harikalar yaratıyor. Visual Studio Code'dan her türlü özel proje için kullanılıyor.
klewis

Bu cevap ve benim için çalışan @ 吴毅 凡 tarafından verilen cevapların bir kombinasyonunu kullandım.
MikeyE

95

Yukarıdakileri denedim ve çok iyi çalışmadılar. Buradan daha iyi bir yaklaşım şöyledir: https://gist.github.com/444295

# This is a template .gitignore file for git-managed WordPress projects.
#
# Fact: you don't want WordPress core files, or your server-specific
# configuration files etc., in your project's repository. You just don't.
#
# Solution: stick this file up your repository root (which it assumes is
# also the WordPress root directory) and add exceptions for any plugins,
# themes, and other directories that should be under version control.
#
# See the comments below for more info on how to add exceptions for your
# content. Or see git's documentation for more info on .gitignore files:
# http://kernel.org/pub/software/scm/git/docs/gitignore.html

# Ignore everything in the root except the "wp-content" directory.
/*
!.gitignore
!wp-content/

# Ignore everything in the "wp-content" directory, except the "plugins"
# and "themes" directories.
wp-content/*
!wp-content/plugins/
!wp-content/themes/

# Ignore everything in the "plugins" directory, except the plugins you
# specify (see the commented-out examples for hints on how to do this.)
wp-content/plugins/*
# !wp-content/plugins/my-single-file-plugin.php
# !wp-content/plugins/my-directory-plugin/

# Ignore everything in the "themes" directory, except the themes you
# specify (see the commented-out example for a hint on how to do this.)
wp-content/themes/*
# !wp-content/themes/my-theme/

1
@ dwenaus- bunu paylaştığınız için teşekkürler - belirli bir wordpress dir köklü repos için yararlı görünüyor, ama altındaki wpo w birden fazla wordpress sitesinde işe yaramaz, ben ne için gittiğini ..
Yarin

Bu yapı / model çok faydalı. Kombine bir Magento / WP kurulumu için tek bir repo istedim ve bu tekniği kullanarak 30'dan daha az .gitignore ile, sadece Magento tema / skin dosyalarına ve WP tema dosyalarına daraltılabildim. Teşekkürler!
random_user_name

acemi git kullanıcısı girintili alanların dışındaki dosyaları dağıtabileceğinden bu kurulumu otomatik konuşlandırmayla kullanmayın (örn. depodaki tüm dosyaları kazayla silerse ve bu otomatik olarak dağıtıldığında dağınık olacaktır). Bunun dışında iyi çalışıyor.
dwenaus

Sen adam dostumsun! Özellikle sürümünüz> = 2.1.4 ise. Referans: git-scm.com/docs/gitignore/2.1.4
Haktan Suren

29

ilk satırı değiştir

*

olarak değiştir

/*

2
Bu iş benim için. .Gitignore dosyam şöyle / *! .Gitignore! /
Vendors

12

Şu cevapları deneyin:

.Gitignore dosyasını birkaç dosya dışında her şeyi yoksay

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

Git'e bir alt dizin dışındaki her şeyi göz ardı etmesini nasıl söyleyebilirim?

Bu, kök dosyaları ve kök dizinleri yok sayar, ardından kök kutusu dizinini yok sayar:

/*
/*/
!/bin/

Bu şekilde, alt dizinler ve dosyaları da dahil olmak üzere tüm bin dizinini alırsınız.


@ irritate- Teşekkürler, bunları görmedim - ancak, bunları durumuma uygulamakta sorun yaşıyorum. Yukarıdaki düzenlemelerime bakın ...
Yarin

1
Gönderdiğim ikinci bağlantı, hem !*/wp-content/themes/ve hem de ihtiyacınız olacağını söylüyor !*/wp-content/themes/*. Bu varyasyonu denediniz mi? Ayrıca, alternatif olarak, sadece !*/wp-content/themes/her temayı dizinde kullanabilirsiniz . Kendi .gitignore dosyası ile!*
irritate

1
@ irritate- hayır bu varyasyon da işe yaramıyor ve yine de bunun nasıl farklı olacağını görmüyorum!*/wp-content/themes*
Yarin

9

Bir kalıbın başına ünlem işareti ( !) eklerseniz, kalıbı hariç tutan önceki kalıbı reddeder. Yani, muhtemelen, her şeyi görmezden gelebilir, sonra sadece bu kalıbı kullanarak istediğiniz şeye izin verebilirsiniz.


@ dappawit- Teşekkürler- kavramı mantıklı ve dosyalar için çalıştım, ancak temalarım klasörleri için değil
Yarin

Ben glob desen konusunda uzman değilim, ama .gitignore adam sayfasını okurken, ben bu işe yarayabilir inanıyoruz: !wordpress/[write out directories]/wp-content/themes/. Kapanış eğik çizgisine ve kapanış yıldız işaretine dikkat edin. Ayrıca *, yalnızca bir düzeyle eşleşeceğini, birden çok dizinle eşleşmeyeceğini unutmayın . İşte sayfa: kernel.org/pub/software/scm/git/docs/gitignore.html
dappawit

Diğer kurallardan sonra olumsuzlamayı koymak zorunda olduğumu anlamama yardımcı oldu
Ax

6

Alt dizinleri olan bir klasörü değil, her şeyi göz ardı etmek gerekiyordu.

Benim için bu işe yarıyor

# Ignore everything
/*

# Not these directories
!folder/

# Not these files
!.gitignore
!.env
!file.txt

5

Bunun gibi bir dizin yapınız olduğunu varsayalım:

– sites
– -all
– – – -files
– – – – – -private
– – – – – – – -newspilot
– -default
– – – -files
– – – – – -private
– – – – – – – -newspilot

Yalnızca sitelere / tüm / dosyalara / özel / gazetelere ve sitelere / varsayılan / dosyalara / özel / gazetelere izin vermek istediğinizde , ilk önce şunu deneyebilirsiniz:

sites/*/files/*
!sites/*/files/private/newspilot

Bu yanlış! Gitignore ile ilgili zor olan şey , alt dizininin ("gazete listesi") taahhütlere dahil edilmesine izin vermeden önce üst ("private") dizinin eklenmesine izin vermenizdir.

sites/*/files/*
!sites/*/files/private
sites/*/files/private/*
!sites/*/files/private/newspilot

http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/


"Alt dizinine izin vermeden önce üst dizinin eklenmesine izin vermelisiniz" - Bunu işaret ettiğiniz için teşekkür ederiz! Kesinlikle benim sorunumdu.
Jet Blue

4

Yarin'in cevabı benim için çalıştı, işte benim versiyonum ( /wordpressalt dizine ihtiyacım yok ):

*

!.gitignore
!/wp-content/
!/wp-content/themes/
!/wp-content/themes/*
!/wp-content/themes/*/*
!/wp-content/themes/*/*/*
!/wp-content/themes/*/*/*/*
!/wp-content/themes/*/*/*/*/*

# I don't want to track this one, so it's included here, after the negated patterns. 
wp-content/themes/index.php

4

Bu soruya defalarca geri döndükten sonra bile her zaman bu konuda bir yere sıkıştım. Adım adım yapmanın ayrıntılı bir sürecini buldum:

İlk önce git addgerçek içeriği eklemek için kullanın .

Diğerleri hala izlenirken dizine eklenen ilgili dosyaları gösterir. Bu .gitignoreadım adım yapılandırmaya yardımcı olur .

$ git add wp-content/themes/my-theme/*
$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

    Untracked files:
        wp-admin/
        wp-content/plugins/
        wp-content/themes/twentyeleven/
        wp-content/themes/twentytwelve/
        ...
        wp-includes/
        ...

Dizininize geçici bir DUMMY.TXTdosya ekleyin:

$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

    Untracked files:
        wp-admin/
        wp-content/plugins/
        wp-content/themes/twentyeleven/
        wp-content/themes/twentytwelve/
        ...
        wp-content/themes/my-theme/DUMMY.TXT  <<<
        ...
        wp-includes/
        ...

Şimdi hedefimiz kuralları DUMMY.TXT, işimiz bittiğinde hala İzlenmemiş olarak görünen tek kural olacak şekilde yapılandırmaktır.

Kuralları eklemeye başlayın:

.gitignore

/*

İlki sadece her şeyi görmezden gelmek. İzlenmemiş dosyaların tümü gitmiş olmalı, yalnızca dizine alınmış dosyalar gösterilmelidir:

$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

Yoldaki ilk dizini ekle wp-content

/*
!/wp-content

Artık İzlenmeyen dosyalar tekrar görünecek, ancak yalnızca wp-contentiçeriği var

$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

    Untracked files:
        wp-content/plugins/
        wp-content/themes/twentyeleven/
        wp-content/themes/twentytwelve/
        ..

İlk direkteki her şeyi yoksay /wp-content/* ve yoksay!/wp-content/themes

/*
!/wp-content

/wp-content/*
!/wp-content/themes

Artık İzlenmemiş dosyalar yalnızca wp-content/themes

$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

    Untracked files:
        wp-content/themes/twentyeleven/
        wp-content/themes/twentytwelve/
        ..

İzlenmemiş olarak gösterilen tek kukla dosya olana kadar işlemi tekrarlayın:

/*
!/wp-content

/wp-content/*
!/wp-content/themes

/wp-content/themes/*
!/wp-content/themes/my-theme

$ git status

    Changes to be committed:
        new file:   wp-content/themes/my-theme/index.php
        new file:   wp-content/themes/my-theme/style.css

    Untracked files:
        wp-content/themes/my-theme/DUMMY.TXT

3

Temizleyici arayanlar için çözüm lütfen aşağıdakileri deneyin.

Yorumlarında belirtildiği gibi bu cevabın bu yöntemi tekrar tekrar kullanmalısınız.

Bu örnekte, klasörünüzün ve dosyanızın ./bulunduğu web sitesi kurulumunuz ve WordPress kurulum ayarınız var . Tema dizininin kendisi ( ) dışında dizinin altındaki her şeyi doğru şekilde yoksaymak için , izin vermek istediğiniz dizine kadar her dizini yinelemeli olarak yok saymalı ve izin vermelisiniz:.git.gitignore./wordpress./wordpresswordpress/wp-content/themes/my-theme

wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
!wordpress/wp-content
!wordpress/wp-content/themes
!wordpress/wp-content/themes/my-theme

Bir joker karakterle yok saymanın ve dizinin kendisine izin vermenin (veya 'dışında' yoksayılmasının) nedeni Git'in içindeki her şeyi görmezden gelmeden önce dizinin içine bakmasını sağlar. Daha sonra Git'e belirttiğimiz dizinden 'her şeyi' göz ardı etmesini söyleriz. İşte aynı sözdizimi, ancak Git'in bakış açısına göre:

wordpress/*                            # Ignore everything inside here
!wordpress/wp-content                  # Apart from this directory

wordpress/wp-content/*                 # Ignore everything inside here
!wordpress/wp-content/themes           # Apart from this directory

wordpress/wp-content/themes/*          # Ignore everything inside here
!wordpress/wp-content/themes/my-theme  # Apart from this directory

Umarım bu, birisinin özyinelemeli yönteme olan ihtiyacı daha iyi anlamasına yardımcı olur.


3

partiye geç kaldım ama işte bilinmeyen derinlik için kullandığım şey (kabul edilen çözüm bilinen derinlik gerektirir)

/*
!.gitignore
!wp-content/
!*/

bu şekilde wp içeriği altındaki her şey göz ardı edilmez.


3

Bu defalarca ihtiyaç duyduktan sonra sonunda bir çözüm buldum [1]:

/*/
/*.*
!.git*
!/wordpress

Satır satır açıklama:

  1. Kökteki tüm dizinleri yoksay .
  2. Kök uzantıları olan tüm dosyaları yoksayın.
  3. Kendine izin ver .gitignore(ve potansiyel olarak .gitattributes).
  4. Tüm alt dizinlerle istenen dizine izin ver

[1] Sınırlamalar (farkında olduğum):

  1. Kökte uzantı olmadan dosyaları yok saymaz (ve ekleme /*tüm şemayı kırar).
  2. 4. satıra dahil etmek istediğiniz dizinin adı ( wordpressbu durumda) .adında wordpress.1olamaz (örn . Çalışmaz). Bir varsa ., satır 2'yi kaldırın ve kökteki tüm dosyaları hariç tutmak için başka bir yol bulun.
  3. Yalnızca Windows ile git version 2.17.1.windows.2

3

Başka bir kolay çözüm:

Temanızı değil, tüm Wordpress dosyalarını yok saymak istersiniz (örneğin).

.gitignore , içerik:

# All wordpress + content of revert ignored directories
wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*

# Revert ignoring directories
!wordpress/
!wordpress/wp-content/
!wordpress/wp-content/themes/
!wordpress/wp-content/themes/my_theme

Bu örnekte, kaldırabilir wordpress eğer .gitignore olduğu kök wordpress dizinine

Gitignored klasörlerinden / dosyalarından "istisnai olarak" uzak tutmak istediğiniz her klasör ve içerik için aynısını yapabilirsiniz

Sonuç:

Atamasını kaldırmak istediğiniz bir yolun tüm dizinlerini attığınızdan emin olun

FAKAT

Yoksaymak istediğiniz tüm imzasız dizinlerin içeriğini yok saydığınızdan emin olun


2

Bunu deneyebilirsiniz:

!**/themes/*

Nerede :

  • ! : negate ignore (dahil et)
  • **: herhangi bir dizin ağacı (özyineleme) böylece klasör yolunu belirtmeniz gerekmez
  • temalar: dahil edilecek klasörünüz (herhangi bir şey olabilir)
  • *: bu klasördeki herhangi bir dosyaya, tüm alt klasörleri de dahil edebilirsiniz ** ve herhangi bir dosya (*) eklemek yerine belirli * .css, * .xy olabilir

2

İşte benim çözümüm, wp-content

# Ignore everything except directories
*
!*/

# except everything in the child theme and its required plugin
!/themes/mytheme-child/**
!/plugins/my-plugin/**

# and this file
!.gitignore

ve test etme:

git version 2.20.1 (Apple Git-117)
$ git check-ignore -v .foo foo foo/ themes/foo themes/foo/bar themes/mytheme-child \
themes/mytheme-child/foo plugins/foo plugins/my-plugin plugins/my-plugin/foo .gitignore
.gitignore:2:*  .foo
.gitignore:2:*  foo
.gitignore:2:*  foo/
.gitignore:2:*  themes/foo
.gitignore:2:*  themes/foo/bar
.gitignore:2:*  themes/mytheme-child
.gitignore:6:!/themes/mytheme-child/**  themes/mytheme-child/foo
.gitignore:2:*  plugins/foo
.gitignore:2:*  plugins/my-plugin
.gitignore:7:!/plugins/my-plugin/** plugins/my-plugin/foo
.gitignore:10:!.gitignore   .gitignore

bu yüzden istemediğim her şeyi ve saklamak istediğim hiçbir şeyi yok sayar.

Serbest Bırakma Kodu

Gitlab, https://docs.gitlab.com/ee/workflow/repository_mirroring.html uyarınca korunan dallar için havuz aynalarıyla yapılandırılmıştır.

Kod korumalı bir şubeye aktarıldığında , çıplak depodaki sahneleme ve üretim sunucularına yansıtılacaktır /opt/checkout/repo.git/. Daha sonra aşağıdaki post-receivekanca (in /opt/checkout/repo.git/hooks/post-receive) kodu çalışma dizinine teslim eder.

#!/bin/bash

BRANCH=staging
GIT_DIR=/opt/checkout/repo.git
GIT_WORK_TREE=/opt/bitnami/apps/wordpress/htdocs/wp-content

# on push, checkout the code to the working tree
git checkout -f "${BRANCH}"

# ensure permissions are correct
sudo chown -R bitnami:daemon "${GIT_WORK_TREE}"
sudo chmod -R go-w "${GIT_WORK_TREE}"

Daha fazla bilgi için bkz. Https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps


1

İşte böyle yaptım:

# Ignore everything at root:
/*

# Except for directories:
!wordpress/(WordPress Site 1)/wp-content/themes/
!wordpress/(WordPress Site 1)/wp-content/themes/
!wordpress/(WordPress Site 1)/wp-content/themes/

# Except files:
!README

#Except files of type:
!*.txt

Bu benim için işe yaradı. Belirli dosyalar veya klasörler dışındaki her şeyi göz ardı etmenizi sağlar

macOS sierra


0

Aynı teknede bir grup Wordpress sitesini tek bir repo altında yönetmeye çalışıyorum. Dizin yapım şöyle:

root (git repo)
(WordPress Site 1)/app/public/wp-content/themes
(WordPress Site 2)/app/public/wp-content/themes
(WordPress Site 3)/app/public/wp-content/themes

app/publicHer sitenin klasör içindeki öğeleri izlemek istiyorum . Bu sayfadaki örneklerin yanı sıra burada bazı önerileri denedim ve bunu denedim :

/(WordPress Site 1)/*
!(WordPress Site 1)/app
(WordPress Site 1)/app/*
!(WordPress Site 1)/app/public

hangi çalıştı ama kaçınmaya çalışıyorum her site için aynı yolu görmezden gelmek zorunda kalacaktı.

Sonra sadece sitenin adını değiştirdim *ve bu benim için hile yaptı. Yani ben kullanarak sonuçlandı:

/*/*
!*/app
*/app/*
!*/app/public

Bu app/public, kökte oluşturduğum herhangi bir site için klasördeki her şeyi yakalarken sitenin klasöründeki her şeyi etkili bir şekilde göz ardı etti.

Kökteki dosyaları görmezden gelmeyeceğini unutmayın, sadece dizinler :)

Bu yardımcı olur umarım.


0

Bu, çoğu durumda yok sayılan tek dosyadır, çünkü wp-config-sample.php dosyası başkalarıyla paylaşabilirsiniz.

/wp-config.php
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.