27

执行 a 时cvs update,您会得到一个很好的存储库状态摘要,例如:

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)

我当然可以编写一个脚本来完成从后者到前者的转换,但这似乎是在浪费时间,因为 cvs 显然可以生成前者。

4

4 回答 4

40

您可以使用 -n 标志来获取更新输出,而无需实际更新文件。您还可以添加 -q(安静)来禁止任何服务器消息。

cvs -q -n update
于 2008-10-17T11:40:44.977 回答
4

@jmcnamara:好提示!

一直以来,我一直在使用这个 bash 脚本:

cvs -q status "$@" | grep '^[?F]' | grep -v 'Up-to-date'
于 2008-10-17T12:17:35.200 回答
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 项目文件和共享对象,并且还将根据状态以不同颜色打印行(例如,我在本地使用橙色已修改;红色表示文件,需要合并;绿色表示本地添加等)

于 2013-11-21T13:20:42.150 回答
2

如果您使用的是 CVSNT,您也可以这样做cvs status -q,这也将产生比常规状态命令更简短的输出(每个文件也只有一行)。使用更新的版本,您甚至cvs status -qq可以跳过最新文件。

于 2008-11-06T23:25:37.967 回答