変更されたファイルがRCSによって事前にロックされていない場合(Emacs VCモードを使用している場合)、どのようにコミットできますか?

変更されたファイルがRCSによって事前にロックされていない場合(Emacs VCモードを使用している場合)、どのようにコミットできますか?

時にはRCS制御下のファイルはロックされずに変更されます(=チェックアウトして変更されます)。

(この場合、実際にはそのような修正を防ぐためにRCSによって読み取り専用に設定されていますが、パッケージをアップグレードしている間は、変更された/ etc /の下の設定ファイルかもしれません。)

その後、通常、変更が適用される前に最後のリビジョンがチェックアウトされたかのように新しい変更をコミットしたいと思います。

それでは、どのように進むのが最善ですか?

私は主にEmacs VCを使用してC-x v vチェックアウト、チェックインを行います。ただし、最初にファイルをチェックアウトしないと、この操作は失敗します。 Emacs内でのみこれを行う方法はありますか?ただし、シェルコマンドを使用して応答することもできます。

答え1

実際にははるかに簡単です。rcs -lロックして再度チェックインを試みることができます。

私はあなたがこの質問を次のように尋ねると仮定します。

$ echo v1 >foo
$ ci -u -t-"Test file." foo
$ chmod u+w foo
$ echo v2 >foo

この時点でと両方が失敗ciしますco

$ co -l foo
foo,v  -->  foo
revision 1.1 (locked)
writable foo exists; remove it? [ny](n): 

$ ci -u foo
foo,v  <--  foo
ci: foo,v: no lock set by username

以下を使用してファイルをロックし、変更をコミットできます。

$ rcs -l foo
RCS file: foo,v
1.1 locked
done
$ ci -u -m"Second revision." foo
foo,v  <--  foo
new revision: 1.2; previous revision: 1.1
done

答え2

Emacsマニュアル(情報)のVCセクションでは、次の問題を解決するためのオプションとして特別なRCS動作モードについて説明します。

32.1.12.2 RCSおよびSCCSオプション

デフォルトでは、RCSはロックを使用して複数のユーザーのアクティビティを調整しますが、最初にファイルをロックせずに変更をチェックインできる「非厳密ロック」というモードがあります。使用rcs -U非厳格なロックに切り替える特定のファイルのrcs 詳細については、マニュアルページを参照してください。

しかし、もちろん、非厳格モードに切り替えたくないかもしれません。

答え3

この目標を達成するために、デフォルトのUnixコマンドを使用できます。だから実際には別のことではありません。

  1. RCSモード(またはcp FILE FILE.newEmacs mv FILE FILE.new)で変更されたファイルのコピー/移動C-x C-w FILE.new
  2. co -l FILERCS(またはEmacsで:C-x C-f FILE- もう一度開いた後C-x v v)で最新バージョンを確認してロックします。
  3. 新しい修正で上書きされます。
  4. 送信してください(ci ...またはEmacsからC-x v v:)。

(この基本的なアプローチに加えて、目標を達成するための他の簡単な方法、つまりこの場合の特定のオプションを持つことも興味深いかもしれません。)

関連情報