мерзавец игнорирует.шаблон 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 успешно удаляет другие шаблоны из архива, Rakefile не является единственным используемым шаблоном, но является единственным, который не работает. Он не работает независимо от того, есть ли он у меня сам по себе или с другими шаблонами, и в любом месте файла. Это неверно, поскольку переименовав некоторые файлы, но не архивировав фиксацию с переименованием, я, по-видимому, получил некоторые хорошие результаты. Моя беда! :S

Это мой .gitattributes (сидит в справочнике Site)

Rakefile        export-ignore
*.local         export-ignore
*.development   export-ignore
*.staging       export-ignore
6 7

6 ответов:

Не уверен, что это распространенный случай, но у меня были проблемы с исключением папки tests из исходного дерева, которое имеет много вложенных уровней папок. Если бы я написал только эту строчку.gitattributes

tests/* 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