.файлы gitignore добавлены внутри подмодулей Git


недавно я реорганизовал свои dotfiles, чтобы жить внутри репозитория Git в ~/Dropbox/dotfiles и я использую патоген для связывания всех аддонов Vim внутри ~/Dropbox/dotfiles/home/.vim/bundle. Эти аддоны были добавлены в качестве подмодулей в Git.

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

ruby-1.8.7-p330@gs ~/Dropbox/dotfiles ‹master*› $ git st
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   home/.vim/bundle/fuzzyfinder (untracked content)
#   modified:   home/.vim/bundle/l9 (untracked content)
#   modified:   home/.vim/bundle/matchit (untracked content)
#   modified:   home/.vim/bundle/ruby (untracked content)
#   ...
no changes added to commit (use "git add" and/or "git commit -a")

Я пытался добавить к корень моего репозитория Git, чтобы игнорировать все doc папки внутри подмодулей, но это, кажется, не работает:

home/.vim/bundle/**/doc

мой вопрос: есть ли способ игнорировать файлы и папки внутри подмодулей Git или, возможно, настроить Vim для создания документации в папке за пределами репозитория Git?

EDIT: как указал Рэнди Моррис, это может быть дубликат генерации тегов в другое место патогеном

4 53

4 ответа:

вы должны добавить .gitignore внутри каждого подмодуля.
Поскольку указанные подмодули похожи на вложенное git repo, они заботятся о своих собственных правилах игнорирования, и их статус не будет зависеть от .gitignore родительского РЕПО (как пояснил, что).

для настройки vim, как Рэнди Моррис упоминает в комментарии, см. Так вопрос" генерация тегов в другое место с помощью возбудитель".


Примечание:Ник упоминает в этом комментарии, и как показано в ответе на "генерация тегов в другое место патогеном", файл конфигурации, как:

[submodule "path/to/submodule"]
    path = path/to/submodule
    url = http://github.com/username/repo.git
    ignore = untracked  # <====

будет работать и сделать этот подмодуль игнорируется git status.
Но"ignore = untracked"означает, по крайней мере Git1.7.2.


Примечание: Нуреттин упоминает в комментариях:

ignore = dirty сделал это для меня

Commit aee9c7d подробно разница между untracked и dirty.

  • "dirty": только различия фиксации, записанные в суперпроекте и подмодулях HEAD будут рассмотрены изменения, все изменения в рабочем дереве подмодуля будут проигнорированы.
    когда используя это значение, подмодуль не будет сканироваться на наличие изменений в рабочем дереве вообще, что приведет к повышению производительности на больших подмодулях.

  • "untracked": игнорируются только неотслеженные файлы в рабочем дереве подмодулей, изменяется HEAD и / или измененные файлы в подмодуле будут помечены как измененные.

рекомендация VonC ignore = untracked работает, но вы должны внести изменения для каждого такого подмодуля.

Если вы хотите решить проблему раз и навсегда, вы можете настроить глобальный шаблон gitignore на каждом репозитории git, по git config --global core.excludesfile ~/.gitignore_global, тогда просто добавьте doc/tags до $HOME/.gitignore_global.

см.https://help.github.com/articles/ignoring-files.

ответ Бена-хорошее начало. Но для такого конкретного правила игнорирования мне не нравится глобальная настройка.

предпочтите локальную конфигурацию для каждого подмодуля и централизованный файл игнорирования в корневом репозитории подмодуля:

cd .vim/bundle
echo "doc/tags" > .gitignore_submodules
git submodule foreach git config --local core.excludesfile "../.gitignore_submodules"

Я думаю, основная проблема здесь заключается в том, что вы пытаетесь игнорировать 'отслеживали изменения. .gitignore игнорирует только "неотслеженные" изменения в репо. Чтобы убедиться, что вы можете изменить какой-то файл в своем РЕПО (который отслеживается), а также добавить его в свой . На делать git status вы увидите, что файл по-прежнему указан как "измененный". Ваши подмодульные РЕПО также считаются отслеженными вашим основным РЕПО, поэтому простое добавление gitignore к родительскому РЕПО не будет работать. Как было предложено другими, либо добавить .gitignore правила отдельных РЕПО или если вы используете последнюю версию git, вы можете использовать git status --ignore-submodules.