Есть ли способ сказать .dockerignore игнорировать все, кроме определенных пакетов, из node_modules? [Дубликат]

Для текстур 2D-изображений 0,0 в координатах текстуры соответствует нижнему левому углу изображения, а 1,1 в координатах текстуры соответствует верхнему правому углу изображения. Обратите внимание, что «нижний левый угол изображения» находится не в центре нижнего левого пикселя, а на краю пикселя.

Также интересно при загрузке изображений:

8.5.3 Структура изображения текстуры

Самым текстурным изображением (на которое ссылаются данные) является последовательность групп значений. Первая группа - нижний левый задний угол изображения текстуры. Последующие группы заполняют ряды ширины ширины слева направо; ряды высот складываются сверху вниз, образуя единый двумерный срез изображения;

Обратите внимание, что большинство форматов изображений имеют начало данных сверху, а не в нижней строке.

689
задан Matt 9 March 2015 в 11:25
поделиться

12 ответов

Если вы исключаете application/, то все под ним всегда будет исключено (даже если какой-то более поздний шаблон отрицательного исключения («unignore») может соответствовать чему-то в application/).

Чтобы сделать то, что вы хотите, чтобы вы «не записывали» каждый родительский каталог всего, что вы хотите «unignore». Обычно вы заканчиваете тем, что пишете правила для этой ситуации парами: игнорировать все в каталоге, но не какой-то определенный подкаталог.

# you can skip this first one if it is not already excluded by prior patterns
!application/

application/*
!application/language/

application/language/*
!application/language/gr/

Примечание. Конечная / * значительна:

  • Паттерн dir / исключает каталог с именем dir и (неявно) все под ним. Если dir /, Git никогда не будет смотреть на что-либо под dir и, таким образом, никогда не применит ни один из шаблонов «un-exclude» к чему-либо, находящемуся под каталогом.
  • В каталоге dir / * ничего не говорится о самом dir; он просто исключает все, что находится под управлением. С dir / * Git обработает прямое содержимое dir, предоставив другим шаблонам возможность «исключить» некоторый бит содержимого (! Dir / sub /).
1109
ответ дан WonderLand 15 August 2018 в 16:53
поделиться
  • 1
    Значительны ли задние звездочки? Если да, то в чем разница в значении? В алгоритме, описанном в документации gitignore , заканчивающемся конечной косой чертой, соответствует каталог и пути под этим каталогом. Окончание со звездочкой затем упадет до лечения как шаблон глобуса. Эксперимент показывает вариант звездочки для работы, но не тот, который заканчивается только конечной косой чертой. Я хотел бы понять, почему это так. – seh 11 May 2011 в 14:21
  • 2
    @seh: Да, конечный /* является значительным. Если каталог исключен, Git никогда не будет смотреть на содержимое этого каталога. Шаблон dir/ исключает каталог под именем dir и (неявно) все под ним. Шаблон dir/* ничего не говорит о самом dir; он просто исключает все под dir. С помощью dir/ Git никогда не будет смотреть на что-либо под dir и, таким образом, никогда не применит ни один из шаблонов «un-exclude» ни к чему под dir. С помощью dir/* Git обработает прямое содержимое dir, давая другим шаблонам возможность «исключить» некоторый бит содержимого (!dir/sub/). – Chris Johnsen 12 May 2011 в 03:58
  • 3
    Это объясняет это. Независимо от того, сколько раз я читал документацию gitignore , я никогда не понимал, когда обратные шаблоны не работают. С вашими объяснениями теперь ясно. Документация gitignore нуждается в «рецепте», чтобы объяснить, как это сделать. – seh 13 May 2011 в 01:32
  • 4
    просто потому, что это правильно, не означает, что это не безумие – yoyo 13 February 2013 в 23:23
  • 5
    Я не мог заставить это работать (сумасшедший файл .gitignore!), Поэтому вместо этого я просто добавил файлы после cd'ing в каталог, который я хотел. git add -f . – K0D4 21 July 2015 в 21:42

Итак, поскольку многие программисты используют узел. прецедент, который отвечает этому вопросу, заключается в исключении node_modules, за исключением одного модуля module-a, например:

!node_modules/

node_modules/*
!node_modules/module-a/
4
ответ дан Abdennour TOUMI 15 August 2018 в 16:53
поделиться

Еще один пример перехода по структуре каталогов, чтобы получить именно то, что вы хотите. Примечание: я не исключил Library/, но Library/**/*

# .gitignore file
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme

> git add Library

> git status

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
    new file:   Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
    new file:   Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
    new file:   Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
    new file:   Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
    new file:   Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings
3
ответ дан Adrian Dunston 15 August 2018 в 16:53
поделиться

Ответ Криса Джонсена велик, но с более новыми версиями Git (1.8.2 или новее) есть двойной шаблон звездочки, который вы можете использовать для более короткого решения:

# assuming the root folder you want to ignore is 'application'
application/**/*

# the subfolder(s) you want to track:
!application/language/gr/

Таким образом, вам не нужно «unignore» родительский каталог вложенной папки, которую вы хотите отслеживать.


С Git 2.17.0 (Не знаете, как раньше, чем эта версия. Возможно, вернуться к 1.8 .2), используя шаблон ** в сочетании с исключениями для каждого подкаталога, ведущего к вашим файлам. Например:

# assuming the root folder you want to ignore is 'application'
application/**

# Explicitly track certain content nested in the 'application' folder:
!application/language/
!application/language/gr/
!application/language/gr/** # Example adding all files & folder in the 'gr' folder
!application/language/gr/SomeFile.txt # Example adding specific file in the 'gr' folder
36
ответ дан Ben Kane 15 August 2018 в 16:53
поделиться
  • 1
    Увы, это не удается (Git 1.8.4.msysgit.0), потому что шаблон ** может соответствовать нулевым подпапкам, а * будет соответствовать language и исключить его, предотвращая включение gr. Полная цепочка родителей @ Крис Джонсон рекомендует, по-видимому, все же нужна. – Sean Gugler 14 February 2014 в 02:26
  • 2
    Звучит идеально, но он не работает для меня на git 2.3.7 ... /www/**/* !/www/config.xml !/www/res config.xml и каталог res по-прежнему игнорируются. – Rob 11 August 2015 в 11:18
  • 3
    @Rob вам также нужно добавить !/www/res/. Вы можете использовать шаблон folder/**/*, но вам все равно нужно добавлять исключения для каждого подкаталога, который вы хотите добавить. Он все еще короче и читабельнее, чем комбинация ignore / exclude. – Ben Kane 12 April 2018 в 16:14
  • 4
    Я знаю, что это старый комментарий, но если вам интересно. Я добавил редактирование ответа, документирующего этот подход. – Ben Kane 12 April 2018 в 16:26

Здесь я нашел аналогичный случай, где по умолчанию laravel .gitignore игнорирует все, используя asterix, а затем переопределяет общий каталог.

*
!public
!.gitignore

Этого недостаточно, если вы запускаете сценарий OP.

Если вы хотите зафиксировать определенные подпапки public, скажем, например, в вашем каталоге public/products вы хотите включить файлы, которые являются одной из подпапок глубоко, например. чтобы включить public/products/a/b.jpg, они не будут обнаружены правильно, даже если вы добавите их именно так !/public/products, !public/products/* и т. д.

. Решение состоит в том, чтобы добавить запись для каждого пути уровень, подобный этому, чтобы переопределить их все.

*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*
3
ответ дан blamb 15 August 2018 в 16:53
поделиться

Специально для более старых версий Git большинство предложений не будут работать так хорошо. Если это так, я бы поместил отдельный .gitignore в каталог, где я хочу, чтобы контент включался независимо от других параметров и позволял там что нужно.

Например: /.gitignore

# ignore all .dll files
*.dll

/dependency_files/.gitignore

# include everything
!*

Таким образом, все файлы / dependency_files (даже DLL-файлы) включены в комплект.

3
ответ дан Breit 15 August 2018 в 16:53
поделиться

Есть несколько подобных вопросов, поэтому я опубликую то, что я написал раньше:

Единственный способ, которым я получил это, чтобы работать на моей машине, - это сделать это следующим образом:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
*.*

#Only Include these specific directories and subdirectories:
!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/*/*/*/*/*

Обратите внимание, что вам необходимо явно разрешить контент для каждого уровня, который вы хотите включить. Поэтому, если у меня есть поддиректории 5 в глубине под темами, мне все равно нужно это сделать.

Это комментарий от @ Yarin здесь: https://stackoverflow.com/a/5250314/1696153

Это были полезные темы:

Я также пробовал

*
*/*
**/**

и **/wp-content/themes/**

или /wp-content/themes/**/*

Ничто из этого не сработало для меня. Множество следов и ошибок!

14
ответ дан Community 15 August 2018 в 16:53
поделиться
  • 1
    Это также, как это сработало для меня. Использование усадьбы. – user2094178 30 March 2016 в 16:51
  • 2
    Единственный способ, который работал для меня с git 2.9 – lostcitizen 17 June 2016 в 14:47
  • 3
    Лучший ответ, спасибо! Работает отлично. – BendEg 29 June 2016 в 14:21
  • 4
    Этот ответ сработал, когда все остальные подвели меня! – thehelix 26 July 2018 в 18:00

Я хотел отслеживать js-файлы jquery production, и это сработало:

node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
-1
ответ дан Indrek Ruubel 15 August 2018 в 16:53
поделиться

Я нашел только этот на самом деле .

**/node_modules/*
!**/node_modules/keep-dir
3
ответ дан Steve Kling 15 August 2018 в 16:53
поделиться

В WordPress это помогло мне:

wp-admin/
wp-includes/
/wp-content/*
!wp-content/plugins/
/wp-content/plugins/*
!/wp-content/plugins/plugin-name/
!/wp-content/plugins/plugin-name/*.*
!/wp-content/plugins/plugin-name/**
1
ответ дан T.Todua 15 August 2018 в 16:53
поделиться

Commit 59856de из Karsten Blees (kblees) для Git 1.9 / 2.0 (Q1 2014) поясняет этот случай:

gitignore.txt : уточнить рекурсивный характер исключенных каталогов

Необязательный префикс «!», который отрицает шаблон; любой сопоставимый файл, исключенный предыдущим шаблоном, снова будет включен.

Невозможно повторно включить файл, если родительский каталог этого файла исключен. (*) (*: если определенные условия не выполняются в git 2.8+, см. ниже) Git не перечисляет исключенные каталоги по причинам производительности, поэтому любые шаблоны с содержащимися файлами не влияют, независимо от того, где они определены .

Поместите обратную косую черту («\») перед первым «!» для шаблонов, которые начинаются с литерала «!», например, «\!important!.txt».

Пример, чтобы исключить все, кроме определенного каталога foo/bar (обратите внимание на /* - без косой черты, подстановочный знак также исключит все внутри foo/bar):

 --------------------------------------------------------------
     $ cat .gitignore
     # exclude everything except directory foo/bar
     /*
     !/foo
     /foo/*
     !/foo/bar
 --------------------------------------------------------------

Обновление февраль / март 2016:

Обратите внимание, что с git 2.9.x / 2.10 (в середине 2016?) возможно повторное включение файла, если родительский каталог этого файла исключается , если в пути не добавлено подстановочное значение .

Nguyễn Thái Ngọc Duy (pclouds) пытается добавьте эту функцию:

Итак, с git 2.9+ , это могло бы действительно работать, но в конечном итоге было отменено:

application/
!application/language/gr/
101
ответ дан VonC 15 August 2018 в 16:53
поделиться
  • 1
    Я попытался использовать обновленный синтаксис повторного включения, опубликованный в конце вашего ответа на git для windows v2.8.1.windows.1, но он, похоже, не работает :( – David Hancock 12 April 2016 в 17:58
  • 2
    @DavidHancock Извините, я отредактировал ответ: этого пока нет. – VonC 12 April 2016 в 18:24
  • 3
    @DavidHancock меня тоже: это больше, чем 13 ответов переполнения стека, которые мне приходилось редактировать несколько раз! – VonC 12 April 2016 в 18:49
  • 4
    Вчера был выпущен Git 2.9. Подтверждение шаблона application/ + !application/language/gr/, упомянутого в ответе, работает как ожидалось. – Ray Shan 15 June 2016 в 00:52
  • 5
    @RayShan Strange: я вижу, что revert commit отменяет эту функцию, но я не вижу (и примечание к выпуску github.com/git/git/blob/master/Documentation/RelNotes/2.9.0.txt не упоминает) любое совершение улучшения правил .gitignore. – VonC 15 June 2016 в 07:13
0
ответ дан BKSpurgeon 28 October 2018 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: