git игнорирует шаблон .gitattributes - PullRequest
8 голосов
/ 02 апреля 2011

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

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 ]

4 голосов
/ 23 мая 2014

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

tests/* export-ignore

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

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

С этими строками каталог tests окончательно исчез из архива.

3 голосов
/ 11 апреля 2011

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


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

2 голосов
/ 17 октября 2013

Для каталогов у меня были проблемы с различными версиями git, поэтому мне пришлось включить запись и с обучающей косой чертой и без нее:

  • foo / bar export-ignore
  • foo / bar / export-ignore

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

2 голосов
/ 21 августа 2012

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

deploy        export-ignore

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

Более поздние версии git я не тестировал.

2 голосов
/ 02 апреля 2011

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

Rakefile/

Для архива, как Arrowmaster упоминает в его ответ , и как Pro Git book book , вам нужен параметр export-ignore:

Rakefile/ export-ignore
1 голос
/ 02 апреля 2011

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

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

следующее
Rakefile export-ignore
...