.файлы 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 ответа:
вы должны добавить
.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.
ответ Бена-хорошее начало. Но для такого конкретного правила игнорирования мне не нравится глобальная настройка.
предпочтите локальную конфигурацию для каждого подмодуля и централизованный файл игнорирования в корневом репозитории подмодуля:
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
.