gitの相対的なコミットの指定、コミットの範囲指定方法
^、~の違いがよくわからなかったので、調べた。
相対的なコミット指定方法
^を用いる方法
主にブランチをマージしたコミットの場合に用いる。
マージしたコミットの場合、以下のように親が2つ以上いることがある。
この際にHEAD^1とすることで一つ目の親、HEAD^2とすることで2つ目の親を指定することができる。
○ー○
○/
~を用いる方法
常に一番目の親を指定する。
まとめ
つまり、HEAD^1とHEAD~1は同じものを指している。これだから混乱してたんだな^^;
範囲指定
ダブルドット
git log [branchname]..[branchname2]
これで[branchname2]にしか含まれていないコミットが抜き出せる。
git log [branchname2] --not [branchname] git log [branchname2] ^[branchname]
としても同じ効果が得られる。
これは2つのブランチを指定しているが、3つ以上の場合は
git log [branch1] --not [branch2] [branch3] git log [branch1] ^[branch3] ^[branch3]
などと指定すれば、上の場合は[branch1],[branch3]には含まれているが、[branch2]には含まれていないコミットが取り出せる。
下の場合には[branch1]には含まれているが、[branch2],[branch3]には含まれていないコミットを取り出せる。
トリプルドット
git log [branch]...[branch1]
これは[branch][branch1]の両方に存在しないコミットを取り出せる。
git log --left-right [branch]...[branch1]
とするとどっちのコミットかわかるようになる.
emacsで矩形選択とレジストリのまとめ
矩形選択系
キーバインド | 関数名 | 効果 |
C-x r k | kill-rectangle | 矩形領域の切り取り |
C-x r c | clear-rectangle | 矩形領域の消去(スペースでの置き換え) |
C-x r d | delete-rectangle | 矩形領域の削除(完全削除) |
C-x r t | string-rectangle | 矩形領域を文字列で置き換え |
C-x r y | yank-rectangle | 矩形領域のはりつけ |
C-x r r a | copy-rectangle-to-register | レジスタaに矩形領域を保存 |
レジスタ系
キーバインド | 関数名 | 効果 |
C-x r i a, C-x r g a | insert-register | レジスタaの内容をはりつけ(前置引数をつけるとカーソルが貼付けた最後に移動する) |
C-x r s a, C-x r x a | copy-to-register | レジスタaに保存(前置引数をつけるとカット) |
C-x r SPC a | point-to-register | 現在の位置をレジスタaに登録 |
C-x r w a | window-configuration-to-register | 現在の画面分割をレジスタaに登録 |
C-x r j a | jump-to-register | レジスターaの位置or画面分割or[Frame状態]に移動 |
C-u 数値 C-x r n a | number-to-register | 数値をレジスタaに登録 |
C-u 数値 C-x r + a | increment-register | レジスタaの値を数値だけ増加させる |
Fedora 16に Tex Live 2011 の環境を構築
調べた限り、大きく分けて2つの方法があるようだ。texlive2011のリポジトリを登録してインストールする方法とTexliveのサイト(tug)のインストール方法である。
texlive2011のリポジトリを登録してインストールする方法(その1)
http://matea2.blogspot.com/2012/01/fedora-16-texlive-2011.htmlに書いてあるとおりにやる。
sudo rpm -i http://jnovy.fedorapeople.org/texlive/2011/packages.fc16/texlive-release.noarch.rpm sudo yum install texlive sudo yum install texlive-collection-langcjk
次に/usr/share/texlive/texmf/dvipdfmx/dvipdfmx.cfgのcid-x.mapのコメントアウトを外す。
f cid-x.map
これでpdfファイルの作成には成功したが、xdviでdviファイルを閲覧すると文字化けがひどい。
pxdviを使おうと思ったが、texlive2011のリポジトリの依存関係上、入らないようだ。
Texliveのサイト(tug)のインストール方法にしたがって構築する(その2)
http://flower-snow.blogspot.com/2011/11/fedora15tex.htmlを参考にした。
TeX Liveのサイト http://www.tug.org/texlive/ から install-tl-unx.tar.gz をダウンロード
tar xvzf install-tl-unx.tar.gz cd install-tl-xxxxxxxx sudo ./install-tl
インストールが終了したらPATHを設定設定する。このPATH設定をrootでもしておく。(アップデートのため)
export PATH=/usr/local/texlive/2011/bin/x86_64-linux:$PATH
32bitのfedora16の場合、x86_64がi386になる。
texliveのアップデートはrootになって以下の通り
tlmgr update --all
あとはdviを表示するためにpxdvi(xdvik), gv, sazanami font, xorg-x11-fonts-ISO8859-1-75dpiをインストールする。
sudo yum install "xdvik gv sazanami-* xorg-x11-fonts-ISO8859-1-75dpi"
環境変数がLANG=ja_JP.UTF-8だとエラーがでるので以下のようにエイリアスを貼る。
alias pxdvi='LANG=C pxdvi' alias gv='LANG=C gv'
まとめ
方法その1
- 比較的簡単に構築できたが、dviファイルが閲覧できない
- yumの管理なので、アップデートが楽?
方法その2
- dviファイルの閲覧が可能
- texliveのアップデートは独自でやらなければならない。
xmodmapでキーバインド変更する方法
CapsキーをCtrlキーにする方法はよく紹介されており、Gnomeなどを使っていれば簡単に変更できる。
しかし、そこではあまり詳細に変更できない、詳細に設定したい場合はxmodmapを用いる。
まず現在のkeymapは以下のコマンドで得られる。
xmodmap -pke
この出力を.xmodmapに書きだすために
xmodmap -pke > ~/.xmodmap
とする。
この.xmodmapを編集し、
xmodmap ~/.xmodmap
とすると、変更が反映される
Caps LockのキーをCtrlに変更したい場合の例
ターミナルでxevというコマンドを使用すると、押したキーが何にバインドされていて何番のキーなのかがわかる。
Capsキーを押すと66番、左Ctrlキーは37番だということがわかると思う。
では、capsキーの番号と左Ctrlきーの番号がわかったので.xmodmapを変更してキーバインドを変更しよう。
.xmodmapの66番を以下のように37番に書かれている内容と同じにする。
つまり、
keycode 66 = Eisu_toggle Caps_Lock Eisu_toggle Caps_Lock
から
keycode 66 = Control_L NoSymbol Control_L
へと変更する。
通常のキーはこれで変更できるが、 Ctrl, Caps Lock, Shift, Altなどは特殊キーなので更に変更を加える必要がある。
末尾に
clear Lock add Control = Control_L
を加える。clear LockによってLockの特殊キーを削除する。
その後Controlの特殊キーにControl_Lを追加する。
もともとControl_L特殊キーに入っているがここで、新しくControl_Lの割り当てキーを増やしたのでそれを反映させるために行う。
この特殊キーの一覧はターミナルで
xmodmap
と叩くことによって得られる。これらのキーを削除または追加するときは注意しよう。
最後に以下のコマンドを叩くことによって以上までの編集内容が反映される。
xmodmap ~/.xmodmap
emacsの設定ファイル.emacsを複数の環境(異なるPC、OS)で統一する方法
今までemacsの設定ファイル(.emacs)がOS等の違いで記述が異なる箇所があった。
そのため異なる部分は別にして共通部分のみ共有してきた。
色々調べて、全て共有することができるようになったのでメモっておく。
emacs lispではOS情報は[system-type]という変数に格納されている。
Linuxではgnu/linux、Macではdarwin、BSDではgnu/kfreebsd、windowsではwindows-ntとなるようだ。
また、現在のホスト名も[system-name]という変数に格納されている。
つまり、Linuxのuser1という環境でのみ用いる設定は
(when (and (eq system-type 'gnu/linux) (equal system-name "user1")) (setq ...) )
と書いたり、Macでのみ用いたい設定には
(when (eq system-type 'darwin) (setq ...) )
と書けばよい。
これで全ての設定ファイルが共有できる。
gitコマンドの自分用まとめ
基本
git remote show [remotename] | 引数なしでpull、pushした場合に何を取ってくるかわかる。 |
git pull [remote] [remotebranch] | リモートのブランチをpullする |
git push [remote] [localbranch] | 新しくブランチをpushする場合 |
git push -u [remote] [localbranch] | 新しくブランチをpushする場合(pullもできるようにする。上記のではpushのみしかできない) |
git push [remote] [localbranch]:[remotebranch] | リモートのブランチの名前を変えたい場合 |
git push [remote] :[remotebranch] | リモートにあるブランチを削除 |
git status -uno | アントラックファイルを無視してステータスを表示する |
git status -sb | ステータスの表示を簡略化し、ブランチ名を表示する |
マージするときなど
git merge [branch] | 現在のブランチと[branch]をマージする |
git rebase -i HEAD~N | N回前のコミットから編集し直す |
git cherry-pick [commit] | [commit]を今のブランチのHEADに取り込む |
[commit]としては例えば、ブランチ名指定でブランチの先端、[ブランチ名]^で[ブランチ名]の一つ前のコミット等が指定できる。
git diff -c | mergeした際の変更を見る |
git checkout --conflict=merge | conflictした時点に戻る |
branchコマンドのまとめ
git branch -rd [remotename/remotebranch] | ローカルのremoteのブランチを消去? |
git branch -d [localbranch] | ローカルブランチの消去 |
git branch | ローカルブランチ表示 |
git branch -a | 情報のあるすべてのブランチを表示 |
git branch -r | リモートブランチの表示 |
git branch -m [oldbranch] [newbranch] | rename |
git branch --set-upstream [localbranch] [remotename/remotebranch] | localbranchにremotebranchを追跡させる(pullやpushができる) |
checkoutのまとめ
git checkout -b [newlocalbranch] | 新しいローカルブランチを作成し、そこにcheckoutする |
git checkout -b [newlocalbranch] [remote/branch] | [remote/branch]から新しいローカルブランチを作し成、そこにcheckoutする |
git checkout -t [remote/branch] | [remote/branch]から新しいローカルブランチをリモートのブランチ名で作成する |
git checkout [commit] [/path/to/file] | [file]を[commit]のバージョンに戻します |
resetのまとめ
git reset --soft HEAD^ | 一つ前のコミットを取り消し(ローカルのコミットのみ) |
git reset | ステージした変更を取り消し。インデックスをHEADに戻す。 |
git reset HEAD | と同様 |
git reset --hard HEAD | インデックスもワーキングツリーもHEADに戻す。 |
reset をまとめると softはHEADの移動
何もつけないと HEADとインデックスの移動
hardをつけるとHEADとインデックスとワーキングツリーの移動
diffのまとめ
git diff | ワーキングツリーとインデックスの差を表示 |
git diff --cached | HEADとインデックスの差を表示 |
git diff HEAD | ワーキングツリーとHEADの差を表示 |
git diff HEAD^ HEAD | HEADと一つ前のコミットの差を表示、引数にはコミット、ブランチやタグを指定できる |
git diff -c | mergeした際の変更を見る |
git diff `git show-branch --merge-base master HEAD` HEAD | 分岐元との比較 |
showのまとめ
git show [commit] [/path/to/file] | [file]の[commit]ヴァージョンを表示します |
stashのまとめ
git stash | 一時的に変更を保存して、前のコミットに戻る |
git stash save [name] | 一時的な保存に[name]という名前をつけて前のコミットに戻る |
git stash list | stashさせたlistを表示させる |
git stash apply | stashを復活させる |
git stash pop | stashを復活させ、削除する |
git stash clear | すべてのstashを削除する. |
git stash drop [name] | [name]のstashを削除する |
logのまとめ
git log --graph | アスキーアートのブランチやマージの歴史を表示 |
git log -p | logと同時にdiffも表示 |
git log -p [branch]..[topicbranch] | [branch]から[topicbranch]までのログ表示 |
git log --oneline [branch]..[topicbranch] | wc -l | [topicbranch]を作成してから何度コミットが行われたかわかる |
git log --graph --decorate --oneline --all | gitk --allのようにコミットの歴史などが見れる。 |
blameのまとめ
git blame [file] | ファイルの各行の編集者とそのコミットのハッシュ値を表示する |
git blame -s [file] | 上記の簡易表記ver |
git blame -L 3,7 [file] | 3−7行目までを表示 |
git blame -L 3,+5 [file] | 3行目から+5行目まで表示 |
git blame -C[num] [file] | [num]字以上の重複を検出しどこのファイルから移動してきたかを表示する |
archiveのまとめ
git archive --format=tar --prefix=[dirname] [commit] | スナップショットをtarファイルで作成する。展開時、prefixで指定した[dirname(/を最後につけること)]に展開される |
git archive --format=tar --prefix=[dirname] --remote=[remotename] [commit] | リモートのスナップショットを作成 |
cleanのまとめ
git clean -n | gitに登録していないファイルorディレクトリの削除リストを表示 |
git clean -d | ディレクトリも削除対称に入れる |
git clean -x | .gitignoreで指定されたもの削除対象に入れる |
git clean -X | .gitignoreで指定されたもののみ削除対象にする |
git clean -f | 実際に削除する |
grepのまとめ
git grep [pattern] | [pattern]にマッチする文字列を探す |
git grep --chaced [pattern] | stageされたのものから[pattern]にマッチする文字列を探す |
git grep --no-index [pattern] | リポジトリに登録されてないものから[pattern]にマッチする文字列を探す |
git grep -e [regexp] | 正規表現[regexp]でマッチする文字列を探す |
git grep -i [pattern] | 大文字小文字を無視して[pattern]でマッチする文字列を探す |
その他
git config --global alias.co "checkout" | これでgit checkout -> git coと出来る。 |
git rm --cached [filename] | ファイルの追跡をやめる |
git config --global color.ui true | gitの出力に色付けする |
git config --global rerere.enable true | マージ方法を記録する |
Wanderlustの最新版をMacBookAirに入れた
wanderlustをmacのemacs23に導入した
http://takanory.net/takalog/1266を参考にして導入した。
ftp://ftp.jpl.org/pub/m17n/から
apel, flim, semi, wandelustを落としてきて、それぞれ順番に
make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs install
を行った。
最後に.emacsに
(autoload 'wl "wl" "Wanderlust" t) (autoload 'wl-other-frame "wl" "Wanderlust on new frame." t) (autoload 'wl-draft "wl" "Write draft with Wanderlust." t)
を追加して完了のはずが、...
Can't open load file ssl
のエラーメッセージssl.elがパスの通ったとこにないっぽい.
落としてきたwanderlustの中にssl.elがあるのでそれをemacsのpathの通ったところに置いたらうまくいきました。
gmailを使う際の.wlの設定はまた今度書こうかな