[macOS General] Meld: Diff & Merge tool fot Git
こちらで紹介されていた Meld が気になったので、インストールしてみました。
が、いろいろ未決な memo.
Contents
インストール
Python も入れた方が良いようなので、あわせてインストールします。
- XQuartz
- Python
XQuartz のインストール
brew cask
でインストールします。
% brew cask info XQuartz
xquartz: 2.7.5
http://xquartz.macosforge.org/
Not installed
https://github.com/phinze/homebrew-cask/commits/master/Casks/xquartz.rb
==> Contents
XQuartz.pkg (install)
% brew cask install xquartz
==> Downloading http://xquartz.macosforge.org/downloads/SL/XQuartz-2.7.5.dmg
######################################################################## 100.0%
==> Running installer for xquartz; your password may be necessary.
Password:
==> installer: Package name is XQuartz 2.7.5
==> installer: Installing at base path /
==> installer: The install was successful.
==> Sorry, try again.
xquartz installed to '/opt/homebrew-cask/Caskroom/xquartz/2.7.5' (64M)
Mac を一度再起動します。
はまりポイント
以下、エラーログ。
- Mac の再起動が必要でした。
- XQuartz (X11) がない環境では、meld のインストール時に以下のエラーが表示されました。
% brew instal meld
pygtk: Unsatisfied dependency: XQuartz
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
gtksourceview: Unsatisfied dependency: XQuartz
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
pango: Unsatisfied dependency: XQuartz
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
gtk+: Unsatisfied dependency: XQuartz 2.3.6
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
py2cairo: Unsatisfied dependency: XQuartz
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
meld: Unsatisfied dependency: XQuartz
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
cairo: Unsatisfied dependency: XQuartz
Homebrew does not package XQuartz. Installers may be found at:
https://xquartz.macosforge.org
Error: Unsatisifed requirements failed this build.
- GtkWarning は、XQuartz インストール後、Mac 再起動すればOK。
% meld
Couldn't bind the translation domain. Some translations won't work.
'module' object has no attribute 'bindtextdomain'
/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
warnings.warn(str(e), _gtk.Warning)
/usr/local/Cellar/meld/1.8.4/libexec/bin/meld:155: GtkWarning: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
gtk.icon_theme_get_default().append_search_path(meld.paths.icon_dir())
Traceback (most recent call last):
File "/usr/local/Cellar/meld/1.8.4/libexec/bin/meld", line 155, in <module>
gtk.icon_theme_get_default().append_search_path(meld.paths.icon_dir())
AttributeError: 'NoneType' object has no attribute 'append_search_path'
Python のインストール
Python を先にインストールします。
% brew install python
% brew info python
python: stable 2.7.6 (bottled), HEAD
http://www.python.org
/usr/local/Cellar/python/2.7.6 (4632 files, 74M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/python.rb
==> Dependencies
Build: pkg-config ✔
Required: openssl ✔
Recommended: readline ✔, sqlite ✔, gdbm ✔
==> Options
--quicktest
Run `make quicktest` after the build (for devs; may fail)
--universal
Build a universal binary
--with-brewed-tk
Use Homebrew's Tk (has optional Cocoa and threads support)
--with-dtrace
Experimental DTrace support (http://bugs.python.org/issue13405)
--with-poll
Enable select.poll, which is not fully implemented on OS X (http://bugs.python.org/issue5154)
--without-gdbm
Build without gdbm support
--without-readline
Build without readline support
--without-sqlite
Build without sqlite support
--HEAD
install HEAD version
==> Caveats
Setuptools and Pip have been installed. To update them
pip install --upgrade setuptools
pip install --upgrade pip
You can install Python packages with
pip install <package>
They will install into the site-package directory
/usr/local/lib/python2.7/site-packages
See: https://github.com/Homebrew/homebrew/wiki/Homebrew-and-Python
.app bundles were installed.
Run `brew linkapps` to symlink these to /Applications.
ターミナルを再起動する。
% which python
/usr/local/bin/python
% python --version
Python 2.7.6
はまりポイント
- ターミナルを再起動する必要がありました。
- インストールの順番を間違えるとうまくいかないこともあるらしい。
% brew deps meld | grep py
py2cairo
pygobject
pygtk
pygtksourceview
python
% brew uninstall py2cairo
Uninstalling /usr/local/Cellar/py2cairo/1.10.0...
% brew uninstall pygobject
Uninstalling /usr/local/Cellar/pygobject/2.28.6...
% brew uninstall pygtk
Uninstalling /usr/local/Cellar/pygtk/2.24.0...
% brew uninstall pygtksourceview
Uninstalling /usr/local/Cellar/pygtksourceview/2.10.0...
% brew uninstall python
Uninstalling /usr/local/Cellar/python/2.7.6...
% brew uninstall meld
Uninstalling /usr/local/Cellar/meld/1.8.4...
Meld のインストール
% brew info meld
meld: stable 1.8.4
http://meldmerge.org
Not installed
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/meld.rb
==> Dependencies
Build: xz ✔, intltool ✔, rarian ✔
Required: pygtk ✘, pygtksourceview ✘, pygobject ✘
以下で X11 アプリとして起動するようになった。
% meld
Couldn't bind the translation domain. Some translations won't work.
'module' object has no attribute 'bindtextdomain'
/usr/local/lib/python2.7/site-packages/gobject/__init__.py:115: Warning: Attempt to add property HistoryCombo::history-id after class was initialised
type_register(cls, namespace.get('__gtype_name__'))
いろいろ warn がでているが、直し方がわからない。
どうも OS X Mavericks にしてから、python 依存のアプリで warn がでるような気がする。
つかいかた
こちらを使わせていただき、テストを行う。
% git clone https://github.com/eiel/git-merge-sandbox.git
Cloning into 'git-merge-sandbox'...
remote: Counting objects: 23, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 23 (delta 5), reused 21 (delta 4)
Unpacking objects: 100% (23/23), done.
Checking connectivity... done.
% cd git-merge-sandbox
% bin/restart
HEAD is now at 79c8638 add master
Auto-merging sample2.txt
CONFLICT (add/add): Merge conflict in sample2.txt
Auto-merging sample.txt
CONFLICT (add/add): Merge conflict in sample.txt
Automatic merge failed; fix conflicts and then commit the result.
% git status
On branch master
Your branch is up-to-date with 'origin/master'.
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both added: sample.txt
both added: sample2.txt
no changes added to commit (use "git add" and/or "git commit -a")
Meld でファイルを開く
% meld sample.txt
ファイルのコンフリクトを直す。
git mergetool から開く
Meld を Merge tool として利用するよう ~/.gitconfig
に設定を加える。
% git config --global merge.tool "meld"
設定後は以下を実行すると、一つずつコンフリクトしているファイルが開かれる。
% git mergetool (git)-[master|merge]
Merging:
sample.txt
sample2.txt
Normal merge conflict for 'sample.txt':
{local}: created file
{remote}: created file
Hit return to start merge resolution tool (meld):
修正完了後、次のファイルを以下のように開くか聞かれる。
Normal merge conflict for 'sample2.txt':
{local}: created file
{remote}: created file
Hit return to start merge resolution tool (meld):
コンフリクト解消後
編集前のファイルは、.orig
をつけて保存されるよう。
% git status (git)-[master|merge]
On branch master
Your branch is up-to-date with 'origin/master'.
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Untracked files:
(use "git add <file>..." to include in what will be committed)
sample.txt.orig
sample2.txt.orig
nothing added to commit but untracked files present (use "git add" to track)
% git commit (git)-[master|merge]
[master be28c39] Merge tag 'feature'
% git status (git)-[master]
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
sample.txt.orig
sample2.txt.orig
nothing added to commit but untracked files present (use "git add" to track)
いろいろ悩んでみることにする。
.gitconfig の設定
上記と重複する箇所もあるが、Meld を Diff & Merge tool として利用するための設定をまとめる。
git mergetool
% git config --global merge.tool "meld"
% git config --global mergetool.keepBackup false
2行目の設定でバックアップファイルが作成されなくなる。
git mergetool
で利用する。
git difftool
こちらを参考に設定します。
% git config --global diff.guitool meld
このように利用。
% git difftool -g -d master
-g
–guidiff tool
つけなくても meld がつかわれました-d
–--dir-diff
補遺
日本語の設定
日本語のファイルも認識させたい場合は、メニューから [編集] – [設定] – [エンコーディング] で
shift_jis euc-jp utf8 latin1
と入れる (この順番が大事)
環境変数 PYTHONPATH を設定
% export PYTHONPATH=/usr/local/lib/python2.7/site-packages/