This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

hg/svn color diff.

coool
Added by over 2 years ago  »  Votes: 2/2

Làm việc nhiều với svn diff hay hg diff thì thật mỏi mắt nếu cứ phải tìm các dấu cộng và trừ :) Có cái xanh xanh đỏ đỏ như cái hình ở bên thì thật là dễ dàng biết mấy :)

Nếu dùng mercurial thì có sẵn phần mở rộng (extension) hỗ trợ. Còn xài svn thì phải điều chỉnh bằng các tham số thích hợp. Ở trang web http://westhoffswelt.de/blog/svn_tweaks.html đã có sẵn vài cải tiến cho svn. Bạn chỉ việc chép nội dung vào tập tin ~/.bashr rồi nạp lại cấu hình cho Bash, thế là xong. Phần mã thêm vào sẽ định nghĩa một hàm svn trong Bash, và sẽ thêm vào các tham số tô màu, điều chỉnh thích hợp:

  1. diff: tô màu phần khác biệt
  2. update: in thêm ra các thay đổi cuối cùng đã thực hiện
  3. status: tô màu để phân biệt các sự thay đổi
  4. log: tô màu kết quả

Do phiên bản tác giả công bố có vài trục trặc với ký tự ^[[ để xác định mã màu, nên bạn có thể sử dụng nhân bản có chỉnh chút xíu ở FreeSoft: bạn có thể xem hoặc Tải về. Yêu cầu là trên hệ thống phải có cài đặt sẵn colordiff.

Lưu ý
  1. phần status không thực hiện đúng chức năng trên máy của mình (xài FreeBSD)
  2. việc xử lý tham số của hàm svn của Jakob Westhoff có thể mang lại nhiều rắc rối khi bạn sử dụng các tham số phức tạp cho lệnh svn

Nếu dùng mercurial thì bạn sẽ phải thêm các dòng ở bên dưới vào ~/.hgrc, và nhớ là sẽ phải dùng hg cd(iff) mới thấy màu mè (trong khi cải tiến ở trên cho svn sẽ có ngay tác dụng khi bạn dùng svn di).

Nếu bạn gặp trục trặc với cải tiến của Jakob Westhoff, hoặc bạn biết cách hay hơn, hoặc biết cách để có git colordiff thì hãy chia sẻ nhé. Cảm ơn bạn.

 1 [extensions]
 2 hgext.extdiff =
 3 
 4 [defaults]
 5 cdiff = -q
 6 
 7 [extdiff]
 8 cmd.cdiff = colordiff
 9 opts.cdiff = -uprN

Comments

Added by bronzeboyvn over 2 years ago

đúng thứ em đang cần luôn!

Added by hoangtran over 2 years ago

Cách work around với svn bằng cách viết một hàm svn là rất không hay. Về sau sẽ khó sử dụng cái svn binary gốc một cách linh hoạt.

Giải pháp đơn giản hơn cả là config các source version để cho nó sử dụng các diff command tốt. Colordiff là đủ tốt rồi. Vì thế với svn thì chỉnh file ~/.subversion/config, tìm dòng và sửa thành

# diff-cmd = diff_program (diff, gdiff, etc.)
diff-cmd=/usr/bin/colordiff

lúc này thì svn diff sẽ sử dụng colordiff thay vì /usr/bin/diff

Tương tự với git. Chắc mercurial cũng có cách config diff command như thế.

Added by hoangtran over 2 years ago

Cái dòng diff-cmd = diff_program (diff, gdiff, etc.) là comment out nhé.

SVN còn nhiều tip lắm :-D

Added by hoangtran over 2 years ago

git thì đơn giản lắm, trong file ~/.gitconfig, mục [color] có @diff = auto. Ví dụ

[color]
        branch = auto
        diff = auto
        status = auto

Thế là được rồi

Added by hoangtran over 2 years ago

man git

thay vì sử trực tiếp file gitconfig thì chạy lệnh

git config --global color.diff "auto" 

ngoài ra có thể sửa biến diff.external bằng colordiff (mấy cái này chưa test hehe)

git config --global diff.external "/usr/bin/colordiff" 

hoặc export GIT_EXTERNAL_DIFF="/usr/bin/colordiff"

Added by over 2 years ago

Aha... cảm ơn bác Hoàng Trần, có mấy cái tip hay quá. Mọi việc hóa ra đơn giản hơn mình nghĩ. Đúng là viết một hàm như Jakob Westhoff sẽ gây rắc rối thật sự với sed và cách xử lý tham số. Do đó, nếu sử dụng thì nên thay function svn() bởi function csvn().

Với cách dùng diff-cmd như bác HT chỉ thì nên dùng với less -R để tránh trường hợp bị tràn ra nhiều tran :)

$ svn diff | less -R

Added by hoangtran over 2 years ago

Đúng rồi đặc biệt khi mình muốn lấy kết quả của svn status rồi xử lý tiếp ... nói chung lằng nhằng khi dùng pipe kết hợp các lệnh với nhau.

Còn cách sử dụng less cũng hay lắm :-) Dùng less thay cho more ... nói chung là less rất hay :-D

Added by over 2 years ago

haha, nhắc tới less mới nhớ: trên Debian Lenny, không có sẵn less mà chỉ có sẵn more. Lúc nào mình cũng less nên rốt cuộc phải cài gói vào. Kỳ lạ thiệt.