git игнорирует шаблон.gitattributes
У меня есть структура каталогов, как это:
root/
.git
deploy/
Site/
blah/
more_blah/
something.local
else.development
Rakefile
.gitattributes
Изменить: чтобы уточнить выше, каталоги имеют конечный /
и дети имеют отступ под каталогом, поэтому blah
а также more_blah
каталоги, но Rakefile
а также .gitattributes
файлы, но все четверо являются детьми Site
,
я бегу git-archive
от Site
каталог вроде так:
git archive --format=tar --prefix=git-v0.0.1/ v0.0.1 | gzip > ../deploy/git-v0.0.1.tar.zip
но какой бы шаблон я ни поместил в.gitattributes, результирующий архив всегда содержит Rakefile
, Я пробовал:
- Rakefile
- Сайт / Rakefile
- * / Rakefile
- ./Rakefile
- Rakefile *
- *
Никто из них не работает так, как я ожидал. Кто-нибудь готов указать на очевидное, но не очевидное для меня решение? Буду признателен за любую оказанную помощь.
Мои извинения за то, что не ясно.
- Я сказал, что шаблон, который я использовал, похоже, не работает, но я использую "export-ignore" после шаблона.
Rakefile
это не каталог, просто файл-
Файл.gitattributes успешно удаляет другие шаблоны из архива,Rakefile
это не единственный используемый шаблон, но единственный, который не работает.Он не работает независимо от того, есть ли он у меня сам по себе или с другими шаблонами, и в любом месте файла.Это не так, потому что я переименовал некоторые файлы, но не заархивировал коммит с переименованием, которое я получал, чтобы получить хорошие результаты. Виноват!:S
Это мое .gitattributes
(сидит в каталоге Site
)
Rakefile export-ignore
*.local export-ignore
*.development export-ignore
*.staging export-ignore
6 ответов
Я полагаю, что @Jefromi предоставил информацию, необходимую мне для решения этой проблемы, в своих комментариях, но слишком скромен, чтобы взять кредит, и я хотел бы сохранить свой рейтинг приемлемости на уровне 100% (вполне справедливо), поэтому я дам ответ Вот:
Хорошо, две вещи были необходимы. --worktree-attributes
сам по себе не работал, но когда я переехал .gitattributes
файл в корневой каталог с сайта dir, потом все заработало. Опять же, книга Git подразумевает, что файл не должен быть в корне, чтобы он работал "... (обычно это корень вашего проекта)", поэтому я чувствую себя немного разочарованным этими документами (на этот раз), Я также думаю, что это не то, что вы думаете, нужно выбирать в файле, когда.gitignore только работает, IMO.
Не уверен, что это обычный случай, но у меня возникли проблемы с исключением папки tests
из дерева исходников, которые имеют много вложенных уровней папок. Если бы я написал только эту строку в.gitattributes
tests/* export-ignore
Это не сработало, и весь каталог остался в архиве. Решением было добавить символы подстановки для всех уровней subdir:
tests/* export-ignore
tests/*/* export-ignore
tests/*/*/* export-ignore
tests/*/*/*/* export-ignore
tests/*/*/*/*/* export-ignore
С этими линиями tests
каталог окончательно исчез из архива.
Примечание: чтобы игнорировать каталог, вам нужно иметь/
в конце указанного каталога.
Rakefile/
Для архива, как упоминает Arrowmaster в своем ответе, так и для деталей книги Pro Git, вам понадобится export-ignore
опция:
Rakefile/ export-ignore
Если вы хотите, чтобы git игнорировал файл, поместите его в файл .gitignore, ане в файл .attributes.
Если вы хотите игнорировать свой Rakefile, поместите следующее в файл.gitignore в корень вашего проекта.
/**/Rakefile
Укажите полный путь, если у вас их несколько, и вы хотите игнорировать только один из них.
Несколько примеров того, как реализовать сопоставление с образцом для этих файлов:
Для всех файлов во всех папках/**/*.ext
Для файла во всех папках/**/some_file.ext
Файл в корневой папке/some_file.ext
Файл в папке/some_folder/some_file.ext
Все файлы в папке/some_folder/*
В git версии 1.7.2.5, которая используется по умолчанию в debian squeeze (отсюда и этот пост), в конце не должно быть косой черты, чтобы игнорировать каталог. Таким образом, чтобы игнорировать каталог размещения в приведенном выше вопросе, необходимо использовать следующую строку (без косой черты):
deploy export-ignore
Это противоречит документации (man gitattributes / man gitignore) и git book. Документация gitattributes ссылки на gitignore. Интересно, что каталоги с косой чертой (deploy/) работают в файле.gitignore.
Более поздние версии git я не тестировал.
Для каталогов у меня были проблемы с разными версиями git, поэтому мне пришлось включить запись как с обучающей косой чертой, так и без нее:
- foo / bar export-ignore
- foo / bar / export-ignore
Где foo / bar относительно того места, где я запустил git архив, но фактические.gitattributes были в корневом каталоге проекта в дополнение к --worktree-attribute, как отмечено выше.
Вы пытаетесь включить файлы в хранилище, но не в архив, созданный из git archive
? Если да, то синтаксис вашего .gitattributes
файлы неверные. Если нет то .gitattributes
это не то, что вы должны использовать.
Чтобы файлы были исключены из архива, созданного git archive
Вы должны поместить следующее в .gitattrubutes
,
Rakefile export-ignore