概要
チーム開発を行う際、個人の開発環境のみに追加したいファイルや既にgit
管理下にあるファイルだが編集内容を個人のローカル環境のみに留めて置きたい場面があるかと思われます。この場合、よく使われる手法として、.gitignore
に書き込むやり方があると思います。ただ、.gitignore
に書き込むと他の開発者にも影響するので、チーム開発に於いては、良いやり方とは言えないです。
今回は、表題にも記載した様に、他の開発メンバーに影響を与えず、自身のローカル環境のみに修正内容を反映させる方法を記載します。
新規で追加したファイルをGit管理しない方法
-
.git
にinfo
ディレクトリーを作成後、exclude
ファイルを作成する -
exclude
ファイルにバージョン管理外にしたいファイルやディレクトリーを指定する
exclude
ファイルに記述する内容は、個人的なツールの設定、エディタの一時ファイル、ユーザ特有のビルド設定等を書き込む為に使用する
# .gitのディレクトー構成
.git/
├── FETCH_HEAD
├── objects
├── index
├── ORIG_HEAD
├── config
├── logs
├── refs
├── packed-refs
├── hooks
└── info/ # ⇦ infoディレクトリーを追加
└── exclude # ⇦ excludeファイルを追加
-
exclud
ファイルの書き方の例
# excludファイル
my-test-target.txt
aaa-test-target.txt
- 上記の設定を行った事により、
git status
コマンドの処理を実行した際、設定したファイルはgit status
に表示されなくなる
既にGit
管理しているファイルを無視する方法
- 設定方法が二つある為、どちらのやり方も記載する
git update-index --skip-worktree
コマンドを使用した場合
設定方法
オプションコマンド、--skip-worktree
の補足説明
- フラグが設定されたファイルに何らかの変更を加えても、
git add
やgit commit
等のGit
操作に反映はされない -
git pull
で他の開発者の変更を取り込む際にも、ローカルの変更は維持される
新たな変更を内容をgit pull
でローカル環境に取り込む際は、フラグをリセットする必要がある
# -skip-worktreeを使用した方法
$ git update-index --skip-worktree <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
確認方法
$ git ls-files -v | grep ^S
# 出力結果
# `--skip-worktree`のオプションコマンドを使用すると[S]で表示をされる
S test/test.text
S test/index.html
Git
の管理下に戻す方法
$ git update-index --no-skip-worktree <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
git update-index –assume-unchanged
コマンドを使用した場合
設定方法
オプションコマンド、–assume-unchanged
の補足説明
-
--assume-unchanged
フラグが設定されたファイルは、Git
が追跡し続ける
ローカル環境のみ、ファイルの内容を変更した場合でも、git pull
等を行った際、ファイルの設定が上書きされる可能性がある
# –assume-unchangedを使用した方法
$ git update-index --assume-unchanged <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
確認方法
$ git ls-files -v | grep ^h
# 出力結果
# `--assume-unchanged`のオプションコマンドを使用すると[h]で表示をされる
h test/test.text
h test/index.html
Git
の管理下に戻す方法
$ git update-index --no-assume-unchanged <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
参考資料
- 自分の環境だけgitignoreする方法(2つ)
- Gitで既に管理されているファイルをローカルで無視する方法
- 既に git 管理しているファイルをあえて無視したい
- .gitignoreできないファイルを無視する方法を実例で解説
感想
今回、初めてまともなチーム開発を行い、Git
の操作を正確に行わないと他の開発メンバーに多大なる影響を与える事を、改めて身に染みて理解しました。Git
に関しては、もっと理解する必要があるので、チーム開発を通して深く理解していきたいと考えています。