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
Другие вопросы по тегам