Для текстур 2D-изображений 0,0 в координатах текстуры соответствует нижнему левому углу изображения, а 1,1 в координатах текстуры соответствует верхнему правому углу изображения. Обратите внимание, что «нижний левый угол изображения» находится не в центре нижнего левого пикселя, а на краю пикселя.
Также интересно при загрузке изображений:
8.5.3 Структура изображения текстуры
Самым текстурным изображением (на которое ссылаются данные) является последовательность групп значений. Первая группа - нижний левый задний угол изображения текстуры. Последующие группы заполняют ряды ширины ширины слева направо; ряды высот складываются сверху вниз, образуя единый двумерный срез изображения;
blockquote>Обратите внимание, что большинство форматов изображений имеют начало данных сверху, а не в нижней строке.
Если вы исключаете 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/
Примечание. Конечная / * значительна:
Итак, поскольку многие программисты используют узел. прецедент, который отвечает этому вопросу, заключается в исключении node_modules
, за исключением одного модуля module-a
, например:
!node_modules/
node_modules/*
!node_modules/module-a/
Еще один пример перехода по структуре каталогов, чтобы получить именно то, что вы хотите. Примечание: я не исключил 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
Ответ Криса Джонсена велик, но с более новыми версиями 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
**
может соответствовать нулевым подпапкам, а *
будет соответствовать language
и исключить его, предотвращая включение gr
. Полная цепочка родителей @ Крис Джонсон рекомендует, по-видимому, все же нужна.
– Sean Gugler
14 February 2014 в 02:26
/www/**/* !/www/config.xml !/www/res
config.xml и каталог res по-прежнему игнорируются.
– Rob
11 August 2015 в 11:18
!/www/res/
. Вы можете использовать шаблон folder/**/*
, но вам все равно нужно добавлять исключения для каждого подкаталога, который вы хотите добавить. Он все еще короче и читабельнее, чем комбинация ignore / exclude.
– Ben Kane
12 April 2018 в 16:14
Здесь я нашел аналогичный случай, где по умолчанию 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/*/*
Специально для более старых версий Git большинство предложений не будут работать так хорошо. Если это так, я бы поместил отдельный .gitignore в каталог, где я хочу, чтобы контент включался независимо от других параметров и позволял там что нужно.
Например: /.gitignore
# ignore all .dll files
*.dll
/dependency_files/.gitignore
# include everything
!*
Таким образом, все файлы / dependency_files (даже DLL-файлы) включены в комплект.
Есть несколько подобных вопросов, поэтому я опубликую то, что я написал раньше:
Единственный способ, которым я получил это, чтобы работать на моей машине, - это сделать это следующим образом:
# 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/**/*
Ничто из этого не сработало для меня. Множество следов и ошибок!
Я хотел отслеживать js-файлы jquery production, и это сработало:
node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
Я нашел только этот на самом деле .
**/node_modules/*
!**/node_modules/keep-dir
В 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/**
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
) пытается добавьте эту функцию:
- совершить 506d8f1 для git v2.7.0, вернули в commit 76b620d git v2.8.0-rc0
- совершить 5e 57f9c git v2.8.0-rc0, ... reverted (!) В commit 5cee3493 git 2.8.0.
Итак, с git 2.9+ , это могло бы действительно работать, но в конечном итоге было отменено:
application/ !application/language/gr/
v2.8.1.windows.1
, но он, похоже, не работает :(
– David Hancock
12 April 2016 в 17:58
application/
+ !application/language/gr/
, упомянутого в ответе, работает как ожидалось.
– Ray Shan
15 June 2016 в 00:52
/*
является значительным. Если каталог исключен, Git никогда не будет смотреть на содержимое этого каталога. Шаблонdir/
исключает каталог под именемdir
и (неявно) все под ним. Шаблонdir/*
ничего не говорит о самомdir
; он просто исключает все подdir
. С помощьюdir/
Git никогда не будет смотреть на что-либо подdir
и, таким образом, никогда не применит ни один из шаблонов «un-exclude» ни к чему подdir
. С помощьюdir/*
Git обработает прямое содержимоеdir
, давая другим шаблонам возможность «исключить» некоторый бит содержимого (!dir/sub/
). – Chris Johnsen 12 May 2011 в 03:58git add -f .
– K0D4 21 July 2015 в 21:42