SlideShare a Scribd company logo
1 of 34
Download to read offline
Интерактивное сравнение в git-е

           Максим Вуец

             Black Perl


              2011
Обычное сравнение
Обычное сравнение
       ↓
   Unified diff format
--- a/lib/Mojo/Cookie.pm
+++ b/lib/Mojo/Cookie.pm
@@ -21,7 +20,15 @@
    s*
  /x;
  my $SEPARATOR_RE = qr/^s*;s*/;
-my $VALUE_RE      = qr/^([^;,]+)s*/;
+my $VALUE_RE      = qr/
+ ^
+ (
+     "(?:|[^"])+"   # Quoted
+ |
+     [^;,]+             # Unquoted
+ )
+ s*
+/x;

 # "My Homer is not a communist.
 # He may be a liar, a pig, an idiot, a communist,
--- a/lib/Mojo/IOLoop.pm
+++ b/lib/Mojo/IOLoop.pm
@@ -452,75 +477,26 @@
     delete $self->{_listening};
 }

-sub _accepting {
+sub _activity {
     my ($self, $id) = @_;

      # Connection
-     my $c = $self->{_cs}->{$id};
-
[...]
-
-     # Add socket to poll
-     $self->not_writing($id);
-}
+     return unless my $c = $self->{_cs}->{$id};

-sub   _active {
-      my ($self, $id) = @_;
-      return $self->{_cs}->{$id}->{active} = time;
+      # Activity
+      return $c->{active} = time;
  }
Недостатки unidiff-а




    Сложно читать сложные изменения
Недостатки unidiff-а




    Сложно читать сложные изменения
    Нет возможности сразу вносить правки
Недостатки unidiff-а




    Сложно читать сложные изменения
    Нет возможности сразу вносить правки
    Далеко не все понимают его в принципе
Интерактивное сравнение
Интерактивное сравнение
           ↓
      Плечом к плечу
Редактирование здесь и сейчас
           ↑
Интерактивное сравнение
           ↓
        Плечом к плечу
Mercurial




            extdiff
Mercurial
~/.hgrc




   [extensions]
       hgext.extdiff =

   [extdiff]
       cmd.idiff = winmerge
       opts.idiff = -r
Mercurial




  $ hg idiff
git




      git-difftool
git
~/.gitconfig




    [diff]
        tool = winmerge

    [difftool "winmerge"]
        cmd = "winmerge -r "$LOCAL" "$REMOTE""
git




  $ git difftool
git




  $GIT_EXTERNAL_DIFF
git




  $GIT_EXTERNAL_DIFF path 
      old-file old-hex old-mode 
      new-file new-hex new-mode
git




      git-idiff
git




  mojo$ git-idiff 7b0d94^!
WinMerge
WinMerge
Beyond Compare
Beyond Compare
Araxis Merge
Araxis Merge
gvim + DirDiff
https://gist.github.com/228869
Спасибо!

--- a/blackperl2011/interactive-git-diff.talk
+++ b/blackperl2011/interactive-git-diff.talk
@@ -1,1 +1,1 @@
-$self->talk();
+$self->shut_up();




                    2011 Максим Вуец <http://maxim.vuets.name/>
              На условиях http://creativecommons.org/licenses/by-sa/3.0/

More Related Content

What's hot

Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном кодеKolya Korobochkin
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perlmayperl
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressRuslan Begaliev
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 

What's hot (7)

Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
Img 0001
Img 0001Img 0001
Img 0001
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
PHP basic
PHP basicPHP basic
PHP basic
 

Similar to Interactive git-diff

Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью GitКак удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Gitphpdevby
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git phpdevby
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающихIvan Evtukhovich
 
Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019
Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019
Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019Mail.ru Group
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Yandex
 
Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)Max Klymyshyn
 
WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномVladimir Samoletov
 
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WordCamp Kyiv
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
 
functional patterns - dotnetconf'11
functional patterns - dotnetconf'11functional patterns - dotnetconf'11
functional patterns - dotnetconf'110xffAA
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?yiiconf
 

Similar to Interactive git-diff (20)

Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью GitКак удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Приручаем Git
Приручаем GitПриручаем Git
Приручаем Git
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающих
 
DSLs в Perl
DSLs в PerlDSLs в Perl
DSLs в Perl
 
Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019
Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019
Swift + Kotlin = ❤, Станислав Таланов и Сергей Моляк. 8 июня, 2019
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"
 
Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)Изоморфный JavaScript (iForum 2015)
Изоморфный JavaScript (iForum 2015)
 
WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложном
 
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
WP Kitchen Meetup Spring 2015 - Владимир Самолетов: WordPress auto-install: п...
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
 
Приручаем linux-консоль
Приручаем linux-консольПриручаем linux-консоль
Приручаем linux-консоль
 
functional patterns - dotnetconf'11
functional patterns - dotnetconf'11functional patterns - dotnetconf'11
functional patterns - dotnetconf'11
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?
 

Interactive git-diff