web-dev-qa-db-ja.com

Gitサブモジュール内に追加された.gitignoreファイル

最近、~/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を構成する方法はありますか?

編集:ランディモリスが指摘したように、これは 病原体によって異なる場所にタグを生成する の複製である可能性があります

58
rubiii

各サブモジュール内に.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を意味します


注: nurettin 言及 コメント内

ignore = dirtyやってくれた

Commit aee9c7d は、untrackeddirtyの違いを詳しく説明しています。

  • "dirty":スーパープロジェクトとサブモジュールHEADに記録されたコミットの違いのみが変更と見なされます、 サブモジュールの作業ツリーへのすべての変更は無視されます
    この値を使用すると、サブツリーでワークツリーの変更がまったくスキャンされないため、大きなサブモジュールでパフォーマンスが向上します。

  • "untracked":サブモジュール作業ツリー内の追跡されていないファイルのみが無視され、変更されたHEADおよび/または変更されますサブモジュール内のファイルは、それを変更済みとしてマークします。

68
VonC

VonCのignore = untrackedの推奨は機能しますが、そのようなサブモジュールごとに変更を行う必要があります。

問題を一度だけ解決したい場合は、すべてのgitリポジトリでgit config --global core.excludesfile ~/.gitignore_globalを使用してグローバルgitignoreパターンを構成し、doc/tagsを$ HOME/.gitignore_globalに追加するだけです。

https://help.github.com/articles/ignoring-files を参照してください。

8
Ben Challenor

ベンの答えは良い出発点です。しかし、そのような特定の無視ルールでは、グローバル設定は好きではありません。

各サブモジュールのローカル構成を優先し、サブモジュールのルートリポジトリにある一元化された無視ファイル:

cd .vim/bundle
echo "doc/tags" > .gitignore_submodules
git submodule foreach git config --local core.excludesfile "../.gitignore_submodules"
2
Jérôme