Matthew Wang f64e6ceb35 Conform PEP8 (with minor own flavors) 12 年之前
img document update; images 12 年之前
tests Handle 'Binary files ... differ' 12 年之前
.gitignore Should use /.coverage 12 年之前
.travis.yml print out coverage version 12 年之前
CHANGES Version bump up to 0.7.1 12 年之前
LICENSE Read version from source code; add --version; try protect my email from spambot 12 年之前
MANIFEST.in Use wrapper `cdiff` instead of symlink for future unit test; doc update 12 年之前
Makefile Fix trget 'test3' 12 年之前
README.rst Document update for known issues 12 年之前
cdiff Conform PEP8 (with minor own flavors) 12 年之前
cdiff.py Conform PEP8 (with minor own flavors) 12 年之前
setup.py Conform PEP8 (with minor own flavors) 12 年之前

README.rst

Cdiff
=====

.. image:: https://travis-ci.org/ymattw/cdiff.png?branch=master
:target: https://travis-ci.org/ymattw/cdiff
:alt: Build status

Term based tool to view **colored**, **incremental** diff in *Git/Mercurial/Svn*
workspace or from stdin, with **side by side** and **auto pager** support.
Requires python (>= 2.5.0) and ``less``.

.. image:: http://ymattw.github.com/cdiff/img/default.png
:alt: default
:align: center

.. image:: http://ymattw.github.com/cdiff/img/side-by-side.png
:alt: side by side
:align: center
:width: 900 px

Installation
------------

Install with pip
~~~~~~~~~~~~~~~~

Cdiff is already listed on `PyPI `_, you can
install with ``pip`` if you have the tool.

.. code:: sh

pip install --upgrade cdiff

Install with setup.py
~~~~~~~~~~~~~~~~~~~~~

You can also run the setup.py from the source if you don't have ``pip``.

.. code:: sh

git clone https://github.com/ymattw/cdiff.git
cd cdiff
./setup.py install

Download directly
~~~~~~~~~~~~~~~~~

Just save `cdiff.py `_ to
whatever directory which is in your ``$PATH``, for example, ``$HOME/bin`` is in
my ``$PATH``, so I save the script there and name as ``cdiff``.

.. code:: sh

curl -ksS https://raw.github.com/ymattw/cdiff/master/cdiff.py > ~/bin/cdiff
chmod +x ~/bin/cdiff

Usage
-----

Show usage:

.. code:: sh

cdiff -h

Read diff from local modification in a *Git/Mercurial/Svn* workspace:

.. code:: sh

cd proj-workspace
cdiff # view colored incremental diff
cdiff -s # view side by side
cdiff -s -w 90 # use text width 90 other than default 80
cdiff -s file1 dir2 # view modification of given files/dirs only

Read the log with changes (e.g. ``git log -p``, ``svn log --diff``) in a
*Git/Mercurial/Svn* workspace (note *--diff* option is new in svn 1.7.0):

.. code:: sh

cd proj-workspace
cdiff -l
cdiff -ls # equivalent to cdiff -l -s
cdiff -ls -w90
cdiff -ls file1 dir2 # see log with changes of given files/dirs only

Pipe in a diff:

.. code:: sh

git log -p -2 | cdiff -s # view git log with changes of last 2 commits
git show 15bfa | cdiff -s # view a git commit
svn diff -r1234 | cdiff -s # view svn diff comparing to given revision
diff -u foo bar | cdiff # pipe in diff between two files (note the '-u')
diff -ur dir1 dir2 | cdiff # pipe in diff between two dirs
cat foo.patch | cdiff # or cdiff < foo.path to view a unified patch

Redirect output to another patch file is safe:

.. code:: sh

svn diff -r PREV | cdiff -s > my.patch

Notes
-----

Cdiff has following known issues:

- Only takes unified diff for input
- Side by side mode has alignment problem for wide chars
- Terminal might be in a mess on exception (type ``reset`` can fix it)

Pull requests are very welcome, please make sure your changes can pass unit
tests and regression tests by run ``make test`` (required tool *coverage* can be
installed with ``pip install coverage``). Also watch out `travis build
`_ after push, make sure it passes as well.

See also
--------

I have another tool `coderev `_ which
generates side-by-side diff pages for code review from two given files or
directories, I found it's not easy to extend to support git so invented
`cdiff`. Idea of ansi color markup is also from project `colordiff
`_.