git игнорирует.шаблон gitattributes по

у меня такая структура каталогов:

root/
  .git
  deploy/
  Site/
    blah/
    more_blah/
      something.local
      else.development
    Rakefile
    .gitattributes

Edit: чтобы уточнить вышеизложенное, каталоги имеют трейлинг / и дети отступы под каталогом, так что blah и more_blah - каталоги, но Rakefile и .gitattributes имеют файлы, но все четверо являются детьми Site.


я git-archive С вот так:

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*
  • *

ни один из них не работает так, как я ожидал. Кто-нибудь хочет указать на очевидное, но неочевидное для меня решение? Любая помощь очень ценится.


мои извинения за неясность.

  • я сказал the шаблон я использовал, похоже, не работает, но я использую "экспорт-игнорировать" по образцу.
  • Rakefile это не каталог, а просто файл
  • The .файл gitattributes успешно удаляет другие шаблоны из архива,Rakefile не единственный используемый шаблон, но единственный, который не работает. Он не работает независимо от того, имею ли я его самостоятельно или с другими шаблонами и в любом месте файла. это не так, из - за переименовав определенные файлы, но не архивируя фиксацию с переименованием, я получал хорошие результаты. Моя вина! : S

это мой .gitattributes (сидит в директории Site)

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

6 ответов


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

tests/* export-ignore

Он не работал, и весь каталог оставался в архиве. Решение состояло в том, чтобы добавить подстановочные знаки для всех уровней subdirs:

tests/* export-ignore
tests/*/* export-ignore
tests/*/*/* export-ignore
tests/*/*/*/* export-ignore
tests/*/*/*/*/* export-ignore

С этими строками


Я считаю, что @Jefromi дал информацию, необходимую для меня, чтобы решить эту проблему с его комментариями, но слишком скромный, чтобы взять кредит, и я хотел бы сохранить свой рейтинг принятия на 100% (совершенно правильно), поэтому я дам ответ здесь:


хорошо, две вещи были необходимы. --worktree-attributes сам по себе не работал, но когда я переехал .gitattributes файл в корневой каталог из каталога сайта, затем он работал. Опять,книга Git подразумевает, что файл не должен быть в корне для него работать "... (обычно корень вашего проекта)", поэтому я чувствую себя немного разочарованным этими документами (на этот раз). Я также думаю, что это не то, что вы думаете, чтобы выбрать в файле, когда .gitignore просто работает, ИМО.


для каталогов у меня были проблемы с разными версиями Git, поэтому мне пришлось включить запись и С и без подготовки Слэш:

  • foo/bar экспорт-игнорировать
  • foo / bar / export-игнорировать

где foo / bar относительно того, где я побежал архив git, но фактическое .gitattributes был в корневом каталоге проекта в дополнение к --worktree-attributes как отметил выше.


Примечание: чтобы игнорировать каталог, вам нужно иметь'/' в конце каталога.

Rakefile/

для архива, как Arrowmaster упоминает в ответ, а как Pro Git детали книги вам понадобится :

Rakefile/ export-ignore

с Git версии 1.7.2.5, которая по умолчанию используется в Debian squeeze (отсюда и этот пост), там не должен быть косой чертой в конце, чтобы игнорировать каталог. Поэтому, чтобы игнорировать deploy dir в приведенном выше вопросе, необходимо использовать следующую строку (без косой черты):

deploy        export-ignore

это противоречит документации (man gitattributes / man gitignore) и книге git. Документация gitattributes ссылается на gitignore. Интересно, что dirs с косой чертой (deploy/) работа в .файла.gitignore

Я не тестировал более поздние версии git.


вы пытаетесь включить файлы в репозиторий, но не в архив, созданный из git archive? Если такой синтаксис .gitattributes файлы, неправильно. Если нет, то .gitattributes не то, что вы должны использовать.

чтобы исключить файлы из архива, созданного git archive вы должны поместить следующее в .gitattrubutes.

Rakefile export-ignore