Скажем, я проигнорировал каталог, но хочу отменить игнорирование определенных подкаталогов в нем. Итак, у меня есть настройка:
/uploads/
/uploads/rubbish/
/uploads/rubbish/stuff/KEEP_ME/
/uploads/foo/
/uploads/foo/bar/lose/
И я хочу игнорировать все, кроме KEEP_ME
каталога. Я надеюсь, что игнорирование будет выглядеть примерно так:
/uploads/*
!/uploads/rubbish/stuff/KEEP_ME/
Но это не работает, как и несколько вариантов одной и той же темы.
Тот, который действительно работает,
/uploads/**/**/**/
!/uploads/rubbish/stuff/KEEP_ME/
Но это кажется немного ограничительным и многословным?
Ответы:
Согласно разделу формата шаблона документации gitignore :
Следовательно, ранее исключенный
/uploads/rubbish/stuff/keep/
шаблон родительского каталога должен быть исключен исключительно перед отрицанием его содержимого:Чтобы включить подкаталоги внутрь,
/uploads/rubbish/stuff/keep/
добавьте третью строку:источник
.gitignore
и она отлично работает !:!*.zip
Даже если вы что-то добавляете
.gitignore
, вы можете заставить git добавить это в индексОднако «KEEP_ME» кажется каталогом, и git обычно не любит пустую папку, поэтому вы можете вместо этого добавить файл «заполнитель», если папка пуста.
источник
git add --force
для каждого нового элемента или папки вKEEP_ME
. но после этого обновления просто добавляются (например, при выполнении agit add -u
), как если бы файлы «не игнорировались». Он.keep_me
ничего не делает, это просто файл, так что git работает с папкой.git add --force
это неправильное решение. Если вы переместите каталог или переместите файл в другой каталог, отслеживание git удалит файл, но не добавит его в новое место, и вам придется сделать этоgit add --force
снова. Отказавшись от общего шаблона, git будет отслеживать перемещение файла в репозитории.Пытался выяснить, как включить конкретную папку при исключении всех папок с общим исключением
если вы добавите
/*
конец своего универсального исключения, вы продолжите исключать все файлы сборки**/build/*
Затем вы добавляете еще одну строку, чтобы исправить путь, который вы хотите включить, чтобы он выглядел
оставив нам gitignore, который читает
источник
Буо-Рен Линь и ДжонОтветы очень полезны, но мне нужно было объединить оба.
При желании исключить другие подпапки, а также файлы из загрузок, я счел необходимым явно указать произвольные каталоги перед данной папкой как при исключении папки, так и при включении подпапки
Я также счел необходимым явно повторно включить как подпапку, так и ее содержимое, чтобы показать как элементы в папке, так и подпапки.
источник
Решение, представленное как ответ, получившее наибольшее количество голосов, неверно и легко демонстрируется как таковое.
Начните с игнорирования всего в uploads / *:
Теперь отмените игнорирование родительского каталога игнорируемого материала, как указано выше:
Не показывает неотслеживаемые файлы.
Чтобы заставить его работать, вам нужно игнорировать все файлы в
uploads/
дереве (аuploads/**/*
не только на верхнем уровнеuploads/*
), а затем добавить все родительские каталоги дерева, которое вы хотите сохранить.Который дает:
Если бы мы использовали
uploads/*
в.gitignore
выше, то все промежуточные файлы были бы включены, так что , например ,uploads/rubbish/a
будет отображаться в команде статус выше.источник