在工作区或stdin中查看彩色增量diff,支持并排和自动寻呼机

ydiff的Python项目详细描述


ydiff

Build status

基于术语的工具,用于查看coloredincrementaldiff in agit/mercurial/svn 工作区或来自stdin,与并排(类似于diff -y)和自动 寻呼机支持。需要python(>;=2.5.0)和less

defaultside by side

安装

使用pip安装

ydiff已经列在PyPI上,如果您有 工具。

pip install --upgrade ydiff

使用setup.py安装

如果没有pip,也可以从源代码运行setup.py。

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

使用自制软件安装

您也可以在Mac上安装自制程序。(多亏了@josa42@bfontaine@hivehand@nijikon为自制贡献 Formula)。

brew install ydiff

直接下载

只需将ydiff.py保存到$PATH中的任何目录,即可 例如,$HOME/bin在我的$PATH中,所以我将脚本保存在那里并命名 作为ydiff

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

使用量

键入ydiff -h以显示用法:

$ ydiff -h
Usage: ydiff [options] [file|dir ...]

View colored, incremental diff in a workspace or from stdin, with side by side
and auto pager support

Options:
  --version            show program's version number and exit
  -h, --help           show this help message and exit
  -s, --side-by-side   enable side-by-side mode
  -w N, --width=N      set text width for side-by-side mode, 0 for auto
                       detection, default is 80
  -l, --log            show log with changes from revision control
  -c M, --color=M      colorize mode 'auto' (default), 'always', or 'never'
  -t N, --tab-width=N  convert tab characters to this many spaces (default: 8)
  --wrap               wrap long lines in side-by-side view

  Note:
    Option parser will stop on first unknown option and pass them down to
    underneath revision control. Environment variable YDIFF_OPTIONS may be
    used to specify default options that will be placed at the beginning
    of the argument list.

git/mercurial/svn工作区中的本地修改读取diff(输出 例如git diffsvn diff):

cd proj-workspace
ydiff                         # view colored incremental diff
ydiff -s                      # view side by side, use default text width 80
ydiff -s -w 90# use text width 90 other than default 80
ydiff -s -w 0# auto set text width based on terminal size
ydiff -s -w 0 --wrap          # same as before, but also wrap long lines
ydiff -s file1 dir2           # view modification of given files/dirs only
ydiff -s -w90 --wrap -- -U10  # pass '-U10' to underneath revision diff tool
ydiff -s -w90 --wrap -U10     # '--' is optional as it's unknown to ydiff
ydiff -s --cached             # show git staged diff (git diff --cached)
ydiff -s -r1234               # show svn diff to revision 1234

git/mercurial/svn工作区中读取包含更改的日志(例如 git log -psvn log --diff,注意–diff选项是SVN 1.7.0中的新选项:

cd proj-workspace
ydiff -l                    # read log along with changes
ydiff -ls                   # equivalent to ydiff -l -s, view side by side
ydiff -ls -w90 --wrap       # set text width 90 and enable wrapping as well
ydiff -ls file1 dir2        # see log with changes of given files/dirs only

环境变量YDIFF_OPTIONS可用于指定默认选项 将放在参数列表的开头,例如:

exportYDIFF_OPTIONS='-s -w0 --wrap'
ydiff foo                   # equivalent to "ydiff -s -w0 --wrap foo"

如果您更喜欢使用git ydiff这样的命令来触发 使用ydiff命令,可以将可执行文件符号链接到名为^{tt16}的文件$ 如下所示:

ydiff_dir=$(dirname $(which ydiff))
ln -s "${ydiff_dir}/ydiff""${ydiff_dir}/git-ydiff"

管道压差:

git log -p -2 | ydiff       # view git log with changes of last 2 commits
git show 15bfa | ydiff -s   # view a given git commit, side by side
svn diff -r1234 | ydiff -s  # view svn diff comparing to given revision
diff -u file1 file2 | ydiff # view diff between two files (note the '-u')
diff -ur dir1 dir2 | ydiff  # view diff between two dirs
# View diff in a GitHub pull request, side by side
curl https://github.com/ymattw/ydiff/pull/11.diff | ydiff -s

# View a patch file in unified or context format, the latter depends on
# command `filterdiff` from package `patchutils` which is available in
# major Linux distros and MacPorts.
#
ydiff -s < foo.patch

将输出重定向到另一个修补程序文件是安全的:

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

注释

ydiff有以下已知问题:

  • 不识别normaldiff,取决于filterdiff(patchutils) 阅读上下文
  • 并排模式对宽字符有对齐问题
  • 终端可能遇到了一个混乱的异常(键入reset可以修复它)

非常欢迎拉取请求,请确保您的更改可以通过单元 运行make test(必需的工具coverage可以进行测试和回归测试 与pip install coverage一起安装。还要小心travis build 推完之后,确保它也通过了。

另见

我有另一个工具coderev,它为代码生成并排的diff页面 从两个给定的文件或目录中查看,我发现扩展到 支持git的发明。ANSI颜色标记的概念也来自 项目colordiff

更改日志

版本1.1(2018-06-05)

  • Rename from ^{tt21}$ to ^{tt8}$ to avoid binary name conflict on major distributions, ^{tt23}$ still works but will be deprepated soon
  • New option ^{tt24}$ to wrap long lines in side-by-side view

版本1.0(2016-12-31)

  • Use environment variable ^{tt23}$ to hold default options

版本0.9.8(2016-01-16)

  • More robust parser to tolerate evil unified diff

版本0.9.7(2015-04-24)

  • Fix unexpected side-by-side output for diff of diff
  • Better color to work with solarized color scheme

版本0.9.6(2014-06-20)

  • Fix TypeError exception in auto width logic

版本0.9.5(2014-06-19)

  • Option ^{tt26}$ now fits terminal size automatically
  • Enable smooth horizontal scrolling with less option ^{tt27}$

版本0.9.4(2014-06-04)

  • Respect the ^{tt28}$ environment variable
  • Support python 3.4
  • Fix curl options in document

版本0.9.3(2013-09-28)

  • Moved screenshots to ‘gh-pages’ branch
  • Handle all keyboard interrupts more completely
  • Explicitly set default encoding to utf-8
  • Fixed broken output diff when I/O with filterdiff in nonblocking mode

版本0.9.2(2013-06-21)

  • Enahanced option parser now pass unknown option to underneath revision control, user can use ^{tt29}$, ^{tt30}$ directly

版本0.9.1(2013-05-20)

  • Use ^{tt31}$ to disable GIT_EXTERNAL_DIFF and diff.external which might break cdiff output

版本0.9(2013-03-23)

  • Supports reading context diff via ^{tt17}$ (patchutils)
  • Fixed a diff parser bug which misread git commit message as common line
  • Lots of code refactor

版本0.8(2013-03-13)

  • Parser is now robust enough to handle dangling headers and short patch
  • PEP8 (with minor own flavors) and other code lint
  • Change ‘Development Status’ to stable

版本0.7.1(2013-02-25)

  • Handle ‘Binary files … differ’
  • Document update for known issues

版本0.7(2013-02-23)

  • Support reading diff or log for given files/dirs in workspace
  • Support diff generated from ^{tt33}$
  • Usage change: reading a patch and comparing two files need stdin redirect

版本0.6(2013-02-20)

  • A few performance tuning and code clean up
  • Add unit test cases with coverage 70%
  • Show merge history in svn log

版本0.5.1(2013-02-19)

  • Fixed incorrect yield on diff missing eof
  • Fixed a bug in diff format probe
  • Handle keyboard interrupt and large diffs in non-color mode
  • Code clean up

版本0.5(2013-02-18)

  • Support read output from ^{tt34}$ and ^{tt35}$
  • Streamline reading large patch set
  • New ^{tt36}$ option to read revision control diff log (thanks to Steven Myint)

版本0.4(2013-02-16)

  • New option -c WHEN (–color WHEN) to support auto test
  • Auto regression test now on Travis

版本0.3(2013-02-07)

  • Support compare two files (wrapper of diff)

版本0.2(2013-02-06)

  • Move cdiff.py to top dir for better meta info management

版本0.1(2013-02-05)

  • New –version option
  • setup.py now read version from source code

版本0.0.4(2013-02-04)

  • Add CHANGES for history track and better versioning

版本0.0.3(2013-02-04)

  • Publish on PyPI, supports read patch from file, pipe and diff output from revision tools (thanks to Steven Myint)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图形Java仿射变换以旋转通用路径   IntelliJ IDEA中的java代码标记为编译器错误,在Eclipse中可以正常工作   java ArrayList的containsAll返回了错误的值   如何在安卓中的片段活动中添加java代码   java通过使用netbeans调用jbutton,将带有行的jbutton添加到jtable中   java在更新arrayAdapter/listView之前更新最终列表   java如何在另一个项目中导入包含AspectJ方面和注释的项目   为什么我的java布尔测试总是失败?   Eclipse中的java自动激活   在Bluetooth for Java(更具体地说是Android)之上是否有TCP/IP协议栈实现?   java Android Studio通过intent传递ArrayList并填充ListView