мерзавец игнорирует.шаблон 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-ignore
tests
окончательно исчез из архива.
Я считаю, что @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