- 更新日: 2017年4月27日
- Git
git cleanでUntracked files(未追跡ファイル)をまとめて削除
git cleanコマンドで、gitで未追跡のファイル(Untracked files)を一発でまとめて削除する方法です。rm コマンドで1つずつ消すのが面倒くさい場合に利用できます。Rails で generate コマンドでコントローラーのファイル群を生成して、利用するファイルだけを残して、使わないファイルをまとめて git clean で削除してみます。
未追跡のファイル(Untracked files)の確認
まずは、テスト用のコントローラーを生成します。Rails アプリケーションでの例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ bundle exec rails generate controller Page create app/controllers/page_controller.rb invoke erb create app/views/page invoke rspec create spec/controllers/page_controller_spec.rb invoke helper create app/helpers/page_helper.rb invoke rspec create spec/helpers/page_helper_spec.rb invoke assets invoke coffee create app/assets/javascripts/page.coffee invoke scss create app/assets/stylesheets/page.scss |
未追跡のファイル(Untracked files)を確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ git status On branch test/git-clean Untracked files: (use "git add <file>..." to include in what will be committed) app/assets/javascripts/page.coffee app/assets/stylesheets/page.scss app/controllers/page_controller.rb app/helpers/page_helper.rb spec/controllers/page_controller_spec.rb spec/helpers/ |
これらの Untracked files を git clean コマンドでまとめて削除します。
-n オプションで削除対象を前もって確認
削除されるファイル・ディレクトリを前もって確認するには、n オプションを使います。n オプションを付けると、削除対象が一覧表示されるだけで、実際には削除されません。
以下の例「git clean -df -n」コマンドで、削除されるファイルを前もって確認してみます。d オプションは未追跡ディレクトリを削除対象にする、f オプションは未追跡ファイルを削除対象にする意味です。
1 2 3 4 5 6 7 8 9 10 |
$ git clean -df -n Would remove app/assets/javascripts/page.coffee Would remove app/assets/stylesheets/page.scss Would remove app/controllers/page_controller.rb Would remove app/helpers/page_helper.rb Would remove app/views/page/ Would remove spec/controllers/page_controller_spec.rb Would remove spec/helpers/ |
git clean を実行する場合は、必ず事前にこの -n オプションを使って削除対象の一覧を確認するようにしたほうが良いです。理由は以下。
git cleanで.gitignore対象のファイルが消えてしまう話 | dreamin’ blog
以前、自分もリンク先の記事と全く同じ経験をしたことがあります。.gitignore の対象にしていた vendor/bundle 中の gem まで「git clean」で削除してしまい、bundle install をやり直すはめになってしまいました。この対策には vendor/.keep 等をコミットしておくと良いのですが、それがない可能性もありますので。
-e オプション指定で削除対象から除外
-e オプションで指定したフィアルやディレクトリは、git clean による削除対象から除外(exclude)されます。コントローラーのファイル(app/controllers/page_controller.rb)とビューのディレクトリ(app/views/page/)は削除したくない場合、以下のようにする。
1 2 3 4 5 6 7 8 |
$ git clean -df -e "app/controllers/page_controller.rb" -e "app/views/page/" -n Would remove app/assets/javascripts/page.coffee Would remove app/assets/stylesheets/page.scss Would remove app/helpers/page_helper.rb Would remove spec/controllers/page_controller_spec.rb Would remove spec/helpers/ |
git clean で未追跡ファイルの削除を実行
n オプションで確認した後、未追跡ファイルの削除を実行します。今度は n オプションを外してコマンド実行。
1 2 3 4 5 6 7 8 |
$ git clean -df -e "app/controllers/page_controller.rb" -e "app/views/page/" Removing app/assets/javascripts/page.coffee Removing app/assets/stylesheets/page.scss Removing app/helpers/page_helper.rb Removing spec/controllers/page_controller_spec.rb Removing spec/helpers/ |
これで…
app/controllers/page_controller.rb
app/views/page/
以外の Untracked files をまとめて削除することができました。
git clean -fdx
git clean -fdx で、git で未追跡のディレクトリ・ファイル、および .gitignore に記載された git で無視されるファイル・ディレクトリが削除されます。
1 2 3 4 5 6 7 8 9 |
$ git clean -fdx -n Would remove .DS_Store Would remove .bundle/ Would remove .rspec ... Would remove app/controllers/page_controller.rb Would remove app/views/page/ |
Railsで生成したくないファイルはconfigに追加
なお補足ですが、rails generate コマンドで毎回生成したくないファイルは、config/application.rb の config.generators ブロックで指定しておくと楽です。
config/application.rb
1 2 3 4 |
config.generators do |g| g.assets false g.helper false end |
これで assets と helper のファイルは生成されなくなります。
以上 git clean コマンドの使い方でした。
- – 参考リンク –
- transitive.info – git clean 使い方
- Git の関連記事
- .gitignoreを自動生成するgiboとgi(gitignore.io)コマンド
- git管理ファイルを.gitignoreに追加してgit管理から外す
- gitマージのコンフリクトで片方ブランチのファイル変更内容を採用
- git logコマンドで他ブランチにマージされていないコミットのみを確認
- Bitbucketで作成済みWikiページの一覧リストを確認
- GitHubのgh-pages (github.io)でWebページを公開
- git diffで長い行を折り返し表示
- git diffでブランチ間のファイル差分を確認するあれこれ
- Git の履歴からファイルを完全に削除する – git filter-branch
- Bitbucketアカウント作成〜ローカルのGit既存プロジェクトをインポート(push)
Leave Your Message!