2008-10-17 3 views
21

При выполнении cvs update, вы получите хороший обзор состояния хранилища, например:Есть ли способ получить короткий статус CVS из командной строки?

M src/file1.txt 
M src/file2.txt 
C src/file3.txt 
A src/file4.txt 
? src/file5.txt 

Есть ли способ, чтобы получить это без фактического обновления? Я знаю, что есть cvs status, но это путь к многословным:

=================================================================== 
File: file6.txt  Status: Up-to-date 

Working revision: 1.2 
Repository revision: 1.2  /var/cvs/cvsroot/file6.txt,v 
Sticky Tag:   (none) 
Sticky Date:   (none) 
Sticky Options:  (none) 

Я мог бы, конечно, сделать скрипт, чтобы сделать переход от последнего к первому, но это кажется пустой тратой времени, так как резюме, очевидно, может производить бывший.

ответ

35

Вы можете использовать флаг -n для получения вывода обновления без фактического обновления файлов. Вы также можете добавить -q (quiet) для подавления любых сообщений сервера.

cvs -q -n update 
+0

"cvs -n update" это отличное решение для предварительного просмотра обновления CVS (спасибо), но, похоже, не работает с тегами. Например, «cvs -n update -dP -r DRUPAL-5-15» дает «cvs [update aborted]: нет такого тега` DRUPAL-5-13 », но тег определенно действителен, так как« cvs update - dP -r DRUPAL-5-15 «отлично работает. – 2009-01-16 18:38:29

+0

Это очень полезно. Я хнычу с git-takel немного меньше после добавления `alias cvs-st =" cvs -q -n update "` – mwcz 2013-06-25 14:49:38

4

@jmcnamara: Хороший совет!

И все это время я использую этот Баш скрипт:

cvs -q status "[email protected]" | grep '^[?F]' | grep -v 'Up-to-date' 
2

Если вы используете CVSNT вы также можете просто сделать cvs status -q, который также будет производить много выхода сжатого, чем обычная команда состояния (также всего одна строка на файл). В более поздних версиях вы даже можете сделать cvs status -qq, который будет пропускать обновленные файлы.

4

У меня есть несколько псевдонимов, которые могут быть полезны для кого-то:

alias cvsstatus_command='cvs -q status | grep "^[?F]" | grep -v "Up-to-date" | \ 
    grep -v "\.so" | grep -v "\.[c]*project"' 

alias cvsstatus_color='nawk '"'"'BEGIN \ 
    { \ 
     arr["Needs Merge"] = "0;31"; \ 
     arr["Needs Patch"] = "1;31"; \ 
     arr["conflicts"] = "1;33"; \ 
     arr["Locally Modified"] = "0;33"; \ 
     arr["Locally Added"] = "0;32" \ 
    } \ 
    { \ 
     l = $0; \ 
     for (pattern in arr) { \ 
      gsub(".*" pattern ".*", "\033[" arr[pattern] "m&\033[0m", l); \ 
     } \ 
     print l; \ 
    }'"'" 

alias cvsstatus='cvsstatus_command | cvsstatus_color' 

Это будет отображать только имена файлов и их статус, игнорирует все уточненные файлы, удалить все файлы проект Eclipse и общие объекты и будет также печатать строки в разных цветах, в зависимости от статуса (например, у меня оранжевый цвет для локальных изменений, красный для файлов, нуждающихся в слиянии, зеленый для локального добавления и т. д.)

Смежные вопросы