バージョン管理の恩恵を受けるのは、プログラマーだけじゃないと思っている、ユゲタです。
gitを使って仕事で使う書類のデータや、色々なファイル管理などをすることで、バージョン管理もバックアップも、
仲間やチームとのデータ共有なども、便利にできてしまうので、使わな損!
というバージョン管理ですが、ユゲタは世の中にある既存のフレームワークを使わずに、自分フレームワークを作っていて、
その構成をgit管理で行っているんですが、その中の個別フォルダで使っているgit環境に設置してあったgitignoreがうまいこと動作しなかったので、
その事象と解決法を備忘録しておきたいと思います。
事象
次のようなデータ構造のフォルダをgit管理している時に、gitignore設定を行っていて、不要なデータを共有対象外にしたいという仕様です。
この中でtest.txtとtestフォルダ以外を除外したいと思います。
.gitignoreの中身は次のように書き込みました。
*
!.gitignore
!test*
!/test
そして、この状態で、gitがどのように更新されるか、statusオプションで確認
% git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
test.txt
nothing added to commit but untracked files present (use "git add" to track)
test.txtは、清浄にgitに登録されますが、testフォルダは登録されていません。
その後、「!/test」を「!test」にしたり、「!test/*」としてみても思った通りの設定にはならず、困ってしまいました。
解決法
今回のケースは、どうやら、「*」アスタリスクを使用していることが原因で発生している事象で、
この設定は、下位層も含む全てのファイルが対象で、testフォルダの中のファイルがignore対象外にならず、マッチしていないことが原因のようでした。
なので、次のようにすることで、想定通りの設定ができました。
/*
!.gitignore
!test*
!/test
% git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
test.txt
test/
nothing added to commit but untracked files present (use "git add" to track)
違いわかります?
1行目の「*」を「/*」にしたという事ですね。
ルート下位層のみに適用することで、下位層にめんどくさい影響を与えないようになったという事です。
git解説をしてくれているページのどこにも書かれていなかったので、これで困っている人も多いのではないかと思いす。
この設定どんな時に使うの?
実はこの設定をするgit管理は通常ではやる必要はない設定です。
ユゲタの独自フレームワークは、
フレームワーク基本エンジン
フロントデザインフォルダ
個別システム構成フォルダ
データフォルダ
プラグインフォルダ
こんな構成にしていて、拡張性やデザインなどの切り替え、機能追加など、自分が便利だと思う仕組みを導入していて、それぞれgit管理をしてshellバッチで一括commit&pushからデプロイまで自動で行えるようにしています。
この中の「データフォルダ」部分で使用するgit設定で使用するgitignoreだったんですね。
データフォルダというのは、開発環境と本番環境では、同じデータを共有するのは、設定データのみでいいので、そうした必要な箇所のみをignore設定から除外するための設定という事で少し困惑していたという事だったんですね。
git環境を構築する時のignore設定は、色々な条件が考えられるため、全てのケースで同じ設定でOKではないかもしれませんが、こういう特性を覚えておかないと、とんでもないトラブルが発生してしまう可能性も感じてしまった今回の備忘録でした。
0 件のコメント:
コメントを投稿