Moim problemem jest to, że mam kilka witryn WordPress w moim repozytorium git, z których chcę selektywnie zatwierdzać tylko zawartość moich themes
folderów, ignorując pozostałe nadmiarowe pliki znalezione w WordPress.
Wcześniej korzystałem z plików .gitignore, aby ignorować typy plików, ale czy można ich używać na odwrót - to znaczy ignorować wszystko, ALE określoną ścieżkę folderu?
root (repo git)
- / wordpress
- - / (witryna WordPress 1) / wp-content / themes
- - / (WordPress witryna 2) / wp-content / themes
- - / (WordPress witryna 3) / wp-content / themes
Dzięki-
AKTUALIZACJA:
Na podstawie odpowiedzi wykonałem następujące czynności, ale to nie działa. Jakieś pomysły?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
Wypróbowałem również następujące odmiany:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
Żaden z nich nie czyta moich themes
folderów.
**
tylko symbole wieloznaczne, jeśli nie masz ukośników we wzorcu, zobacz Sparethought.wordpress.com/2011/07/19/...!/wordpress/*/wp-content/themes/**/*
Wypróbowałem powyższe i nie działały tak dobrze. Lepsze podejście jest następujące: https://gist.github.com/444295
źródło
zmodyfikuj pierwszą linię
zmień to na
źródło
Wypróbuj te odpowiedzi:
źródło
!*/wp-content/themes/
i!*/wp-content/themes/*
. Czy próbowałeś tej odmiany? Alternatywnie, możesz po prostu użyć!*/wp-content/themes/
i w każdym katalogu motywów mieć swój własny plik .gitignore z!*
!*/wp-content/themes*
Jeśli poprzedzisz wzorzec wykrzyknikiem (
!
), neguje on wszystkie poprzednie wzorce, które go wykluczały. Więc przypuszczalnie możesz zignorować wszystko, a następnie pozwolić tylko na to, co chcesz, używając tego wzorca.źródło
!wordpress/[write out directories]/wp-content/themes/
. Zwróć uwagę na zamykający ukośnik i brak zamykającej gwiazdki. Zauważ również, że*
będzie pasować tylko do jednego poziomu, a nie do wielu katalogów. Oto stronaMusiałem zignorować wszystko, ale nie jeden folder z podkatalogami.
U mnie to działa
źródło
Powiedzmy, że masz taką strukturę katalogów:
Jeśli chcesz zezwolić tylko na witryny / all / files / private / NewSilot i sites / default / files / private / moviesilot , możesz najpierw spróbować tego:
To jest źle! Problem z gitignore polega na tym , że musisz najpierw zezwolić na dołączenie katalogu nadrzędnego („prywatnego”) , zanim będziesz mógł zezwolić na dołączenie jego katalogu podrzędnego („gazeta”) do zatwierdzeń.
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
źródło
Odpowiedź Yarina zadziałała dla mnie, oto moja wersja (nie potrzebuję
/wordpress
podkatalogu):źródło
Zawsze gdzieś w tym utknąłem, nawet po wielokrotnym powrocie do tego pytania. Wymyśliłem szczegółowy proces robienia tego krok po kroku:
Najpierw po prostu użyj
git add
aby dodać rzeczywistą zawartość.Wyświetli odpowiednie pliki dodane do indeksu, podczas gdy wszystkie inne nadal nie są śledzone. Pomaga to w konstruowaniu
.gitignore
krok po kroku.Dodaj
DUMMY.TXT
plik tymczasowy do swojego katalogu:Naszym celem jest teraz takie skonstruowanie reguł, aby
DUMMY.TXT
była to jedyna, która po zakończeniu gry nadal byłaby wyświetlana jako Nieśledzona.Zacznij dodawać reguły:
.gitignore
Pierwsza to ignorowanie wszystkiego. Nieśledzone pliki powinny zniknąć, powinny wyświetlać się tylko pliki zindeksowane:
Dodaj pierwszy katalog w ścieżce
wp-content
Teraz nieśledzone pliki pojawią się ponownie, ale będą miały tylko
wp-content
zawartośćZignoruj wszystko w pierwszym katalogu
/wp-content/*
i anuluj ignorowanie!/wp-content/themes
Teraz nieśledzone pliki będą dalej zawężane do tylko
wp-content/themes
Powtarzaj ten proces, aż ten fikcyjny plik będzie jedynym nadal wyświetlanym jako Nieśledzony:
źródło
Dla szukających środka czyszczącego rozwiązania, wypróbuj następujące rozwiązania.
Jak wspomniano w komentarzach do tego odpowiedzi, musisz używać tej metody rekurencyjnie.
W tym przykładzie masz konfigurację witryny internetowej, w
./
której znajduje się.git
folder i.gitignore
plik, oraz konfigurację instalacji WordPress w./wordpress
. Aby poprawnie zignorować wszystko w./wordpress
katalogu oprócz samego katalogu motywu (wordpress/wp-content/themes/my-theme
), będziesz musiał rekurencyjnie zignorować i zezwolić każdemu katalogowi aż do katalogu, na który chcesz zezwolić:Powód zignorowania za pomocą symbolu wieloznacznego i zezwolenia (lub zignorowania „poza”) samego katalogu umożliwia Gitowi zajrzenie do katalogu, zanim zignoruje wszystko w nim. Następnie mówimy Gitowi, aby ignorował wszystko poza wskazanym przez nas katalogiem. Oto ta sama składnia, ale w kolejności, w jakiej patrzy na to Git:
Miejmy nadzieję, że pomoże to komuś lepiej zrozumieć potrzebę stosowania metody rekurencyjnej.
źródło
spóźniony na imprezę, ale oto, czego używam do nieznanej głębokości (przyjęte rozwiązanie wymaga znanej głębokości)
w ten sposób wszystko w wp-content nie jest ignorowane.
źródło
Po wielokrotnej potrzebie tego w końcu znalazłem rozwiązanie [1]:
Wyjaśnienie wiersz po wierszu:
.gitignore
sobie (i potencjalnie.gitattributes
).[1] Ograniczenia (o których wiem):
/*
zepsułoby cały schemat).wordpress
w tym przypadku) nie może mieć.
w nazwie (np.wordpress.1
By nie działał). Jeśli ma.
, usuń linię 2 i znajdź inny sposób na wykluczenie wszystkich plików w katalogu głównym.git version 2.17.1.windows.2
źródło
Kolejne łatwe rozwiązanie:
Chcesz zignorować wszystkie pliki Wordpress, ale nie motyw (na przykład).
.gitignore , zawartość to:
W tym przykładzie możesz usunąć wordpress, jeśli .gitignore znajduje się w głównym katalogu wordpress
Możesz zrobić dokładnie to samo z każdym folderem i zawartością, które chcesz „wyjątkowo” trzymać z dala od folderów / plików gitignored
Wniosek:
ALE
źródło
Możesz spróbować tego:
Gdzie :
źródło
Oto moje rozwiązanie, które zakłada przejście do
wp-content
i testowanie:
więc poprawnie ignoruje wszystko, czego nie chcę i nic, co chcę zatrzymać.
Wydanie kodu
Gitlab jest skonfigurowany z serwerami lustrzanymi repozytorium dla chronionych gałęzi, zgodnie z https://docs.gitlab.com/ee/workflow/repository_mirroring.html
Gdy kod zostanie przesłany do chronionej gałęzi, zostanie dublowany na serwery pomostowe i produkcyjne w samym
/opt/checkout/repo.git/
repozytorium. Następujący punktpost-receive
zaczepienia (in/opt/checkout/repo.git/hooks/post-receive
) pobierze kod do katalogu roboczego.Aby uzyskać więcej informacji, zobacz https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps
źródło
Oto jak to zrobiłem:
To właśnie zadziałało dla mnie. Pozwala zignorować wszystko oprócz określonych plików lub folderów
macOS sierra
źródło
Jestem na tej samej łodzi, próbując zarządzać kilkoma witrynami Wordpress w ramach jednego repozytorium. Moja struktura katalogów wygląda następująco:
Chcę po prostu śledzić elementy w
app/public
folderze dla każdej witryny. Wypróbowałem próbki na tej stronie, a także niektóre sugestie tutaj, a skończyło się na tym:co działało, ale musiałem zignorować tę samą ścieżkę dla każdej witryny, której starałem się uniknąć.
Potem po prostu zmieniłem nazwę witryny na
*
i to załatwiło sprawę. Oto, co ostatecznie użyłem:To skutecznie zignorowało wszystko w folderze witryny, jednocześnie przechwytując wszystko w
app/public
folderze dla każdej witryny, którą utworzę w katalogu głównym.Zauważ, że nie zignoruje plików w katalogu głównym, tylko katalogi :)
Mam nadzieję że to pomoże.
źródło
Jest to jedyny plik, który jest ignorowany w większości przypadków, ponieważ masz plik wp-config-sample.php, który możesz udostępnić innym.
źródło