Vim使いなら.vimrcとか、
Bash使いなら.bashrc、
Zsh使いなら.zshrc。
こうした「.(ドット)」で始まるファイルって有りますよね。
たいていのプロジェクトを使うときに使いまわしたり、
新しいPCに環境構築するときに、「あ、あのドットファイルどこいったっけ??」ってことに
なったことがある方はいませんか?
RailsアプリやAndroidでいつも使う「.gitignore」ファイル。
ドットで始まるファイルだけじゃなくても、
Gitプッシュ用に書いた便利なカスタムシェルスクリプトや
バッチファイルなど、使い回したい・常に最新版で管理しておきたいものファイルは
誰しもあるはずです。
このドットファイルの重要性やTipsについては、下記記事などで非常にわかりやすく
書いてありますので、ぜひ御覧ください。
@see
http://qiita.com/himinato/items/7f5461814e8ed8916870
@see
http://qiita.com/b4b4r07/items/b70178e021bef12cd4a2
自分の管理しているもの
一般的なもの
メジャーどころで言ったら、以下あたりになるかと思います。
・vimrcファイル
・vimのカラースキーマファイル
・vimのプラグインの内いくつか必要なもの
・bashrcファイル(たまにbash使う)
・zshrcファイル
・汎用的なシェルスクリプトいくつか
その他
ちなみに自分は、「新しいPCに環境構築する際に参考になるように」ということで、
以下の情報も管理しています。
・インストールしたNPM一覧
・インストールしたgem一覧
・(Macなので)/Applications配下にあるアプリケーションの名前リスト
・brewでインストールしたもの一覧
・/usr/local/bin配下のコマンドリスト
これらは、「名前リスト」一覧にすぎないのですが、
新しいPCに環境構築するときなどに、
「あれ、なにインストールしてたっけ」とか
「あのときバージョン何使ってたっけ」といった忘れがちなものも
記録しておくことができるからです。
これらは、以下のように取得できます。
brew list > ./dist/brew_list.txt
gem list > ./dist/gem_list.txt
npm list --depth 0> ./dist/npm_list.txt
ls -A /Applications > ./dist/applications_list.txt
ls -A /usr/local/bin > ./dist/usr_local_bin.txt
GitにPushするシェルスクリプト
ということで、こうしたドットファイル一覧を取得してGithubのレポジトリ(gitのリモートリポジトリならどこでもいいが)にPushするシェルスクリプト(一部)を紹介します。
大したことはしてません。
・上記で上げたようなファイルを「/dist」ファイルにコピーしている
・それらをGitのリモートリポジトリにプッシュしている
ファイル構成
だいたいこんな感じになります。
.
├── README.md
├── backup.sh # 下記で紹介
├── commit.sh # commit用に作ったシェルスクリプト
├── dist # ここに管理しておくファイルをすべて格納しておく
│ ├── applications_list.txt
│ ├── bash
│ │ └── .bashrc
│ ├── brew_list.txt
│ ├── gem_list.txt
│ ├── npm_list.txt
│ ├── shellscript
│ │ ├── backup.sh
│ │ ├── commit.sh
│ │ └── push.sh
│ ├── usr_local_bin.txt
│ ├── vim
│ │ └── .vimrc
│ │ └── colors
│ │ ├── grb256.vim
│ │ ├── solarized.vim
│ │ └── twilight.vim
│ └── zsh
│ └── .zshrc
├── log
│ └── 20150801_22:22:13.log
└── push.sh # push用に作ったシェルスクリプト
7 directories, 16 files
コレは、以下のシェルスクリプトを叩けば自動でGithubのレポジトリにPushしてくれるようにしてあります。作った当初はcronに登録していましたが、別にそこまでしなくていいかなと、最近は思い立った時にシェルスクリプトを叩くくらいです。ちょっとリファクタが不十分なところも多々ありますが。。
backup.sh
#!/bin/sh# Created by Kenju Wagatsuma# # What to do# - backup some setting files# - ~/.vimrc# - ~/.bashrc# - write log# - /log/YYYYmmDDHHMMSS.log# - push to remote git repo# - add/commit/push## initializeNOW=`date +%Y%m%d_%H:%M:%S`LOGFILE=./log/$NOW.log
rm ./log/*
touch $LOGFILE# wrap all commands for using tee{echo"$NOW"echo"=========================="################### Backup################### initializeDIST=./dist/
FBACKUP=./backup.sh
FVIM=~/.vimrc
FBASH=~/.bashrc
FZSH=~/.zshrc
# add files to dist/ folder# $1 = target file which you want to copy into dist/# $2 = target dire in distfunction copy2dist(){# if second parameter set copy target directoryif[ -n $2]thenTARGET=$2# if target directory does not exsit, create a new dirif[ ! -f $2]then
mkdir -p $2fielseTARGET=$DISTfiif[ -f $1]then
cp $1$TARGETecho"Successfully copied $1 to $TARGET"elseecho"$1 was not found"fi}function copyMultiple2dist(){for var in $@do
copy2dist $var ./dist/vim/colors/
done}
copyMultiple2dist ~/.vim/colors/*.vim
copy2dist $FBACKUP ./dist/shellscript/
copy2dist $FVIM ./dist/vim/
copy2dist $FBASH ./dist/bash/
copy2dist $FZSH ./dist/zsh/
copy2dist ./push.sh ./dist/shellscript/
copy2dist ./commit.sh ./dist/shellscript/
#TODO: refactor by creating generic method
brew list > ./dist/brew_list.txt
gem list > ./dist/gem_list.txt
npm list --depth 0> ./dist/npm_list.txt
ls -A /Applications > ./dist/applications_list.txt
ls -A /usr/local/bin > ./dist/usr_local_bin.txt
################# Git################echo"=========================="# push to remote git repo
git add -A
git commit -m "Automatically pushed at $NOW"
git push
} 2>&1| tee $LOGFILE