githubでpull requestが来たときの対処法
まず自分の現状のコミットIDを調べておく.
git log
新しいブランチを作成して,相手のブランチを持ってくる.
git checkout -b pull-request master
git pull https://github.com/hishername/project.git branchname
最初に調べたコミットIDを使って,差分をチェックする(もしかしてコミットIDなしでもできる?)
git diff -r 80deaed24b328140c9181050a1536754eedfa8cd --ignore-all-space
masterにマージする.
git checkout master
git merge --no-ff pull-request
git push origin master
Ubuntu Desktop 14.04 Memo
とりあえずメモ
sudo rm -r /etc/ssh/ssh*key sudo dpkg-reconfigure openssh-server
sudo apt-get install nvidia-current
screenでタイトルを,コマンド実行中はコマンド名に,でなければ現在のディレクトリ名に自動で設定する
以前にscreenのhardstatusに表示されるウィンドウタイトルを現在実行中のコマンドに設定する方法の記事を書いたが,今回はその更新版.
screenの各ウィンドウのタイトルを,コマンド実行中はそのコマンド名に自動で設定し,そうでなければ現在の作業ディレクトリ名に自動で設定する.
bashとtcshの2つのシェルについてその方法は以下の通り.
zshの場合にはおそらく,tcshの場合と同じようにprecmdを設定すれば,同様のことができるはず(未確認).
設定するとこんな感じで,screenのtitleが自動で設定される.
ウィンドウ1ではemacsを,2ではtopをそれぞれ実行中.3では現在workディレクトリにいて,コマンドは実行していない.
bashの場合,PS1とPROMPT_COMMAND変数を設定する.
## .bashrc if [ $TERM == 'screen' ]; then export PS1='\u@\h:\W\$ ' export PROMPT_COMMAND='echo -ne "\033k\033\0134\033k$(basename $(pwd))\033\\"' else export PS1='\u@\h:\W\$ ' fi
tcshの場合,promptとprecmd変数を設定する.
echo_styleをbothに設定しないとMacなどのBSD系の環境で正しく動作しないため注意.
## .cshrc if ( $TERM == 'screen' ) then set echo_style=both set prompt="%n@%m:%c1$ " alias precmd 'echo -n "\033k\033\0134\033k`basename ${cwd}`\033\\"' else set prompt="%n@%m:%c1$ " endif
ちなみに.screenrcはこんな感じ.
## .screenrc startup_message off ## current command name as window name shelltitle "$ |bash" #hardstatus alwayslastline "%-w%{= ck}%n %t%{-}%+w %=%H [%Y-%m-%d %02c:%s]" hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y %m/%d %C:%s%a" hardstatus off escape ^z^z termcap * 'G0:S0=\E(%.:E0=\E(B:TY=iso2022' termcapinfo xterm* ti@:te@ autodetach on defflow off crlf off vbell off vbell_msg "Bell" defutf8 on defkanji utf-8 encoding utf-8 utf-8 defencoding utf-8 bind o focus bind k kill bind s split screen 0 scrollback 4000 screen 1 scrollback 4000
ログインシェルをtcshのままbashを普段使いシェルとして使う
通常はypchsh/chshをすれば良いのだが,ログインシェルを変更ができない場合やしない方が良い場合には,.cshrcを以下の様に設定して,ログイン時にbashを起動する.
Non-interactiveの場合(scpやsshfs)の場合にも正しく動作するようにpromptのチェックを行う.
if ( ! $?prompt ) then exit 0 endif setenv OLDSHELL $SHELL setenv SHELL /bin/bash exec /bin/bash --login
emacsでPython+Jediの補完を使う
OSには事情によりCentOS 6.5を想定しているが,Ubuntu等でもほぼ同じ.
各種ソフトウェアインストール
pipをインストールし,その後virtualenvをインストールする.既にインストールされていればスキップ可能.
CentOS (6.5) の場合 (rootで実行)
yum install python27 python3 easy_install pip easy_install-3.3 pip pip install virtualenv pip3 install virtualenv
次に,jediとepcをインストールする
pip3 install jedi epc
jediの設定をする
cd .emacs.d/site-lisp/jedi/emacs-jedi
virtualenv-3.4 env
emacs lispを設定する
inits/70-python.el はこんな感じ
;; python-mode with jedi (add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-deferred") (add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-epc") (add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-ctable") (add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-jedi") (autoload 'python "python" nil t) (autoload 'jedi "jedi" "Jedi for python" t) (add-hook 'python-mode-hook '(lambda () ;; python common (setq python-python-command "python3") (setq indent-tabs-mode nil) (setq indent-level 4) (setq python-indent 4) (setq tab-width 4) ;; jedi (setq jedi:setup-keys t) (jedi:setup) (define-key jedi-mode-map (kbd "M-TAB") 'jedi:complete) (setq jedi:complete-on-dot t) (setq jedi:environment-root "env") (setq jedi:environment-virtualenv (append python-environment-virtualenv '("--python" "python3"))))) (eval-after-load "jedi" '(progn (setq jedi:server-command (list python-python-command jedi:server-script))))
emacsでGo言語(golang)の補完と定義ジャンプをするにはgocodeとgodefを使う
emacs (24.3) 上でgolang (1.3.3) の補完とコードジャンプを利用する方法をまとめました.
ターミナルのシェルにはbashを使っていますが,他のシェルでも変わらないはず.
PATH各種を設定する
まず,emacs上でexec-pathが$GOPATH (Goコマンドでインストールしたバイナリがあるディレクトリのパス) を含むことを確認する.*scratch*で
exec-path
とタイプしてからC-j (Ctrl + j) とすれば確認できる.
シェルからemacsを起動すれば自動的に$PATHをexec-pathとして取り込むので,予めシェルで$PATHが$GOPATHを含むように設定しておけばOK.
Macなどでアプリケーションのアイコンから直接emacsを起動してしまうとexec-pathに$PATHが取り込まれないので注意.
また,OSX Yosemite上で起動したemacs 24.4では,うまくexec-pathに$PATHを取り込めていない模様.
かたついさんの記事の通りに,exec-path-from-shell を使いましょう.
package.el等でemacsの環境にexec-path-from-shellをインストールし,inits/30-exec-path-from-shell.elを
(exec-path-from-shell-initialize)
と設定.
あとは,シェルの設定をする.bashなら.bashrcに
if [ -x "`which go`" ]; then export GOROOT=`go env GOROOT` export GOPATH=~/.go export PATH=$GOROOT/bin:$GOPATH/bin:$PATH fi
としておけば良いし,tcshなら.cshrcに
if (-x "`which go`") then set GOROOT=`go env GOROOT` set GOPATH=~/.go set path= ( \ $GOROOT/bin \ $GOPATH/bin \ $path \ ) endif
としておけば,ターミナルからemacsを起動した際に$PATHがexec-pathに取り込まれる.
もし,$GOPATHの実体となるディレクトリがなければ,作成する.
mkdir -p $GOPATH
gocode, godef, goimportsをインストールする
hgやgitが必要になるかもしれないので,予めインストールしておく.
MacでHomebrewを使っているなら
brew install git hg
Ubuntuでapt-getなら
sudo apt-get install hg git
godefをインストールする.
go get code.google.com/p/rog-go/exp/cmd/godef
gocodeをインストールする.
go get -u github.com/nsf/gocode
goimportsをインストールする.
go get code.google.com/p/go.tools/cmd/goimports
emacs lispの設定
emacsに auto-complete, go-mode, go-autocomplete のパッケージを追加する.
僕はemacs24系でinit-loader.el+package.elを使ってパッケージ管理をしているので,inits/20-package.el がこんな感じになっている.パッケージがなければ自動的にダウンロードし,インストールされる.
init-loader.el+package.elの詳しい使い方はかたついさんの記事を参照しましょう.
(require 'package) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (package-initialize) (require 'cl) (defvar installing-package-list '( auto-complete exec-path-from-shell gtags flymake flymake-cursor markdown-mode markdown-mode+ python-mode epc python-environment jedi jinja2-mode go-mode go-autocomplete scala-mode2 haskell-mode )) (let ((not-installed (loop for x in installing-package-list when (not (package-installed-p x)) collect x))) (when not-installed (package-refresh-contents) (dolist (pkg not-installed) (package-install pkg))))
auto-completeの設定をする.inits/50-auto-complete.elはこんな感じ.
(require 'auto-complete) ;(add-to-list 'ac-dictionary-directories "~/.emacs.d/elpa/auto-complete-20130724.1750/dict") (require 'auto-complete-config) (ac-config-default) (global-auto-complete-mode t)
最後に,inits/70-go-mode.elを用意し,go-modeと補完機能を設定する.
;; go-mode ;; In advance, install godef, gocode, and goimports in $GOPATH. ;; go get code.google.com/p/rog-go/exp/cmd/godef ;; go get -u github.com/nsf/gocode ;; go get code.google.com/p/go.tools/cmd/goimports ;; exec-path should include a path to .go/bin. ;; So DO NOT launch an emacs from App icon, DO launch an emacs from terminal (shell). (autoload 'go-mode "go-mode" nil t) (eval-after-load "go-mode" '(progn (require 'go-autocomplete))) (add-hook 'go-mode-hook '(lambda() (setq gofmt-command "goimports") (add-hook 'before-save-hook 'gofmt-before-save) (setq c-basic-offset 4) (setq indent-tabs-mode t) (local-set-key (kbd "M-.") 'godef-jump) (local-set-key (kbd "C-c C-r") 'go-remove-unused-imports) (local-set-key (kbd "C-c i") 'go-goto-imports) (local-set-key (kbd "C-c d") 'godoc) (define-key ac-mode-map (kbd "M-TAB") 'auto-complete)))
go-modeの設定の仕方はこちらを参照しました.ありがとうございました.