最近、~/Dropbox/dotfiles
のGitリポジトリ内に存在するようにドットファイルを再編成し、~/Dropbox/dotfiles/home/.vim/bundle
内のすべてのVimアドオンをバンドルするために病原体を使用しています。これらのアドオンは、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")
.gitignore
ファイルをGitリポジトリのルートに追加して、サブモジュール内のすべてのdoc
フォルダーを無視しようとしましたが、これは機能していないようです:
home/.vim/bundle/**/doc
私の質問:Gitサブモジュール内のファイルとフォルダーを無視する方法、またはGitリポジトリ外のフォルダーにドキュメントを作成するようにVimを構成する方法はありますか?
編集:ランディモリスが指摘したように、これは 病原体によって異なる場所にタグを生成する の複製である可能性があります
各サブモジュール内に.gitignore
を追加する必要があります。
サブモジュールはネストされたGitリポジトリのようなものであるため、独自の無視ルールを処理し、それらのステータスは親リポジトリの.gitignore
の影響を受けません( ここで説明) )。
Vim固有の設定については、コメントに Randy Morris の言及があるので、SO質問 " 病原体による別の場所へのタグの生成 を参照してください。 」.
注: Nick がこのコメントで言及されており、「 病原体によって別の場所にタグを生成する 」への回答で示されているように、次のような構成です。
[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
の推奨は機能しますが、そのようなサブモジュールごとに変更を行う必要があります。
問題を一度だけ解決したい場合は、すべてのgitリポジトリでgit config --global core.excludesfile ~/.gitignore_global
を使用してグローバルgitignoreパターンを構成し、doc/tags
を$ HOME/.gitignore_globalに追加するだけです。
ベンの答えは良い出発点です。しかし、そのような特定の無視ルールでは、グローバル設定は好きではありません。
各サブモジュールのローカル構成を優先し、サブモジュールのルートリポジトリにある一元化された無視ファイル:
cd .vim/bundle
echo "doc/tags" > .gitignore_submodules
git submodule foreach git config --local core.excludesfile "../.gitignore_submodules"