コマンドラインから短いCVSステータスを取得する方法はありますか?

StackOverflow https://stackoverflow.com/questions/211819

  •  03-07-2019
  •  | 
  •  

質問

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が前者を明らかに生成できるため、時間の無駄のようです。

役に立ちましたか?

解決

-nフラグを使用すると、実際にファイルを更新せずに更新出力を取得できます。 -q(quiet)を追加して、サーバーメッセージを抑制することもできます。

cvs -q -n update

他のヒント

@jmcnamara:良いヒントです!

そして、この間ずっとこのbashスクリプトを使用しています:

cvs -q status "$@" | grep '^[?F]' | grep -v 'Up-to-date'

エイリアスがあります。これは誰かに役立つかもしれません:

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 = <*>; \
        for (pattern in arr) { \
            gsub(".*" pattern ".*", "\033[" arr[pattern] "m&\033[0m", l); \
        } \
        print l; \
    }'"'"

alias cvsstatus='cvsstatus_command | cvsstatus_color'

これは、ファイル名とそのステータスのみを表示し、すべての最新ファイルを無視し、すべてのEclipseプロジェクトファイルと共有オブジェクトを削除し、ステータスに応じて行を異なる色で印刷します(たとえば、ローカルに変更されたオレンジ、ファイルに赤、マージが必要、ローカルに追加された緑など)

CVSNTを使用している場合は、 cvs status -q を実行することもできます。これは、通常のstatusコマンド(ファイルごとに1行だけ)よりもはるかに短い出力も生成します。より新しいバージョンでは、 cvs status -qq を実行して、最新のファイルをスキップすることもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top