мерзавец игнорирует.шаблон gitattributes
У меня есть такая структура каталогов:
root/
.git
deploy/
Site/
blah/
more_blah/
something.local
else.development
Rakefile
.gitattributes
Edit: для дальнейшего уточнения вышесказанного, каталоги имеют конечную / и дочерние элементы отступа под каталогом, так что 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
- Site/Rakefile
- * / Rakefile
- ./Rakefile
- Rakefile*
- *
Мои извинения за то, что я не совсем ясно выразился.
- я сказал, что шаблон , который я использовал, кажется, не работает, но я использую "export-ignore" после шаблон.
-
Rakefile- это не каталог, а просто файл -
The .файл gitattributes успешно удаляет другие шаблоны из архива,Это неверно, поскольку переименовав некоторые файлы, но не архивировав фиксацию с переименованием, я, по-видимому, получил некоторые хорошие результаты. Моя беда! :SRakefileне является единственным используемым шаблоном, но является единственным, который не работает. Он не работает независимо от того, есть ли он у меня сам по себе или с другими шаблонами, и в любом месте файла.
Это мой .gitattributes (сидит в справочнике Site)
Rakefile export-ignore
*.local export-ignore
*.development export-ignore
*.staging export-ignore
6 ответов:
Не уверен, что это распространенный случай, но у меня были проблемы с исключением папки
testsиз исходного дерева, которое имеет много вложенных уровней папок. Если бы я написал только эту строчку.gitattributestests/* export-ignoreЭто не сработало и весь каталог остался в архиве. Решение было добавить подстановочные знаки для всех уровней подкаталоги:
С этими строками каталогtests/* export-ignore tests/*/* export-ignore tests/*/*/* export-ignore tests/*/*/*/* export-ignore tests/*/*/*/*/* export-ignoretestsокончательно исчез из архива.
Я считаю, что @Jefromi дал информацию, необходимую для меня, чтобы решить эту проблему своими комментариями, но слишком скромен, чтобы взять кредит, и я хотел бы сохранить свой рейтинг принятия на уровне 100% (совершенно справедливо), поэтому я дам ответ здесь:
Ладно, нужны были две вещи.
--worktree-attributesсам по себе не работал, но когда я переместил файл.gitattributesв корневой каталог с сайта dir, то он работал. Опять же, книга Git подразумевает, что файл не должен быть в корне, чтобы он работал "... (обычно корень вашего проекта)", поэтому я чувствую себя немного разочарованным этими документами (на этот раз). Я также думаю, что это не то-что-вы-думаете поведение, чтобы выбрать в файле, когда .гитюдного просто работает, ИМО.
Для каталогов у меня были проблемы с разными версиями git, поэтому мне пришлось включить запись и то и другое с обучающей косой чертой и без нее:
- foo/bar export-игнорировать
- foo / bar / export-ignore
Где foo / bar относительно того, где я запускал git архив, но фактический .gitattributes находился в корневом каталоге проекта в дополнение к --worktree-attributes, Как отмечалось выше.
Примечание: чтобы игнорировать каталог, вы должны иметь '
/' в конце указанного каталога.Rakefile/Для архива, Как Arrowmaster упоминает в ответ, и Про ГИТ книге подробно, необходимо
export-ignoreпараметр:Rakefile/ export-ignore
С Git версии 1.7.2.5, которая по умолчанию используется в debian squeeze (отсюда и этот пост), там не должно быть косой чертой в конце, чтобы игнорировать каталог. Поэтому для того, чтобы игнорировать deploy dir в приведенном выше вопросе, необходимо использовать следующую строку (без Слэша):
deploy export-ignoreЭто противоречит документации (человек gitattributes по / Человек гитюдного) и забронировать ЖКТ. Документация gitattributes ссылается на gitignore. Интересно, что dirs с косой чертой (deploy/) работают в .файла.gitignore
Я не тестировал более поздние версии git.
Вы пытаетесь включить файлы в репозиторий, но не в архив, созданный из
git archive? Если это так, то синтаксис ваших файлов.gitattributesневерен. Если нет, то.gitattributes- это не то, что вы должны использовать.Чтобы исключить файлы из архива, созданного
git archive, Вы должны поместить следующее в.gitattrubutes.Rakefile export-ignore