Subversionのステータス「S」


80

ある時点で、作業コピー内のすべてのファイルに、以下に示すように「S」記号が付けられました。

$ svn st
M    S   AclController.php
     S   InstallationController.php
     S   CustomerController.php
     S   RedirController.php
     S   IndexController.php
     S   LoginController.php
     S   OrderController.php
     S   ProductController.php
     S   SelfInstallController.php
     S   SelfcareController.php

興味深いことに、これはこの特定の作業コピーでのみ発生します。プロジェクトを新しいディレクトリにチェックアウトすると、「S」マークが表示されません。

この迷惑な「S」記号を取り除く方法は?WCステータスの明確さが大幅に低下します。

更新:標準のsvn switch構文を使用して時々切り替えます。最近まで、この「S」記号が表示されることはありませんでした。切り替えに使用されたコマンドは次のとおりです。

svn switch svn+ssh://xxxxxx/subversion/xxxxxxx/releases/1.0.16 .

「S」フラグをクリアする方法はありますか?


7
によると、ステータスSは「切り替え済み」を意味しsvn h stます。しかし、それが意味するのか…
me_and 2009

1
@me_and:作業コピーの切り替え:svnbook.red-bean.com/en/1.0/ch04s05.html
Chris J

1
念のために言っておきますが、これは私がオンラインで見つけた最も近い問題であるため、ブランチをトランクにマージしようとしたときにSフラグの問題が発生していました。それは私たちが外部を使用していたという事実と関係がありました。それらはブランチで削除されましたが、トランクはそれらを参照し続けたため、マージに失敗しました。解決策は、トランク内のブランチで削除した外部ソースを削除し、トランクをコミットして、再度統合することでした。それが途中で誰かを助けることを願っています:)乾杯!
ダリオハビエルクラベロ2012年

回答:


76

これは、ファイルが、それらを含むディレクトリとは異なるSubversionリポジトリ内の場所にあることを意味します。解決策は、作業コピー全体を同じ場所に切り替えることです。参照してください2つの セクションのコマンドを起動する方法の詳細については、subversionの本の中で。


35
これは、「svn switch」コマンドが、コミットされていないローカルファイルのリポジトリバージョンを持つように切り替えているブランチなど、ある種の競合によって中断された場合にも発生することを確認しました。svnから飛び出して修正すると、作業コピー全体が不完全に切り替わります。問題を解決してからswitchコマンドを再実行するとうまくいきます。
Michael H.

4
エラーの後にこれが発生しました-E210002:ネットワーク接続が予期せず閉じられました。switchコマンドを再実行すると問題が解決したようで、「S」ステータスはなくなりました。
ケビンサドラー

1
svnスイッチ中の中断がこれを引き起こしています。注意してください。
SandorRacz 2015

2
Kevin Sadlerは、問題を説明するだけでなく、実際に解決策を提供します。+1
ahnbizcad 2016

11

ディレクトリ自体とその中のファイル(の1つ)で「svninfo」を呼び出すと、2つの異なるURLが取得されます。

ファイル/ディレクトリのURLが親のURLに続いてファイルの名前と一致しない場合は、「S」ステータスになります。

親ノードと子ノードの1つのURLを投稿できますか?(必要に応じてURLを匿名化します)


答えではありませんが、この「答え」は、何が起こっているかについていくつかの手がかりを与えるのに非常に役立ちます。
FlipMcF 2016年

これは答えではありません。
ahnbizcad 2016年

8

トランク(r100)からブランチ(r50)に切り替えているときに、「S」ステータスになりました。エラーが発生しました:

svn: Failed to add file 'web/.htaccess': an unversioned file of the same name already exists

すべてのweb /のサブディレクトリに「S」フラグが付けられました。

原因:svn:ignore it(r100)への.htaccessを削除してから、再度作成しました(バージョン管理されておらず、無視されています)。ブランチ(r50)にはまだリポジトリにweb /.htaccessがありました。

ソリューション :

mv web/.htaccess ../../
svn switch back to trunk
svn switch to branch again

すべて順調。


同様のエラーが発生しましたが、問題のあるバージョンの「web / .htaccess」を削除し(私にとっては複数のディレクトリだったため)、svn updateを実行してから、トランクから特定のタグに切り替えてトランクに戻しました(特定のタグは実際にはトランクのコピー...)そして、誤った「S」フラグが消えました。
カサポ2012年

6

SVNに正常にコミットしたディレクトリでこの問題が発生しました。私にとっての解決策は、ローカルで消去してから更新することでした。違いは見られませんでしたが、何らかの理由で.svnファイルが修正されました(Sはなくなりました)。


新しいブランチに更新した後、svnexternalでこれが発生しました。外部全体を手動で削除してからsvnupdateを実行すると、修正されました。+1!
Stephen Fuhry 2011

5

これは通常、ブランチを切り替えるときの中断が原因で発生します。

別のブランチに切り替えてから、本当に必要なブランチに切り替えます。

svn switch some_other_branch_url

svn switch desired_branch_url


4

ただの注意:リポジトリ内の同じ場所から削除されたディレクトリをチェックアウトしたときに同じS記号を取得しましたが、異なるURLを使用しました。つまり、 'svn checkout svn + ssh:// user @scmのように異なるプロトコルを使用してチェックアウトしました。 .gforge ... '対' svn checkout --username user https://scm.gforge .... '。最初のチェックアウトで使用したのと同じURLを使用して、もう一度チェックアウトすることで解決しました。


同じURIで再チェックアウトすると解決しました。ありがとうございました。
sepehr 2014年

4

誰かが答えを探して遅れて来る場合(これは上に正しく述べられています)、この状況の考えられる原因は、失敗する親ディレクトリの「svnスイッチ」であると思います(ローカルのコミットされていないファイルの場合のように)同じ名前で、-forceオプションはありません)、失敗後のすべてのファイルを「切り替えなし」のままにします。

そのため(元の問題が後で修正されたと仮定して)、同じ親ディレクトリで再び「svn switch」を実行すると、切り替えられていない残りのファイルが実際に新しいリポジトリパスに切り替えられます。


3

これは、ある作業コピーから別の作業コピーに切り替えたことを意味します。たとえば、作業コピーをチェックアウトし、それを交換してコードブランチと比較しました。これを元に戻す方法の詳細については、SVNブックを参照してください。


1
リンクは古いバージョンのSVNブックへのリンクであることに注意してください。こちらをお試しください:svnbook.red-bean.com/en/1.5
Andrew Aylett

良い場所。グーグルはまた私を失敗させます。
me_and 2009

3

このステータスを達成する別の方法があります-うまくいけば、誰かがそれを追跡する時間を節約できます。

外部ライブラリをSVNルートに解凍しましたが、サードパーティの作成者が誤って自分の.svnフォルダーをフォルダーの1つに含めてしまったことがわかりました。もちろん、これは私たち自身の正しいSubversionフォルダーを上書きし、このページの他の場所で説明されているのと同じ効果があります。フォルダーが予期せず別のブランチに切り替わったように見えます。


1
はい、私はこれを持っていました。ディレクトリを削除せずに、あるプロジェクトから別のプロジェクトにアイコンのディレクトリをコピーしました.svn。使用するクリーンなディレクトリをエクスポートするか、コピー後に.svnディレクトリを調べて削除すると、svn add予想どおりに削除されます。
エリック


0

私の場合、これは「svn switch」コマンドが中断されたときに発生し、TortoriseSVNで解決するには、ファイルを右クリックして[ switch back toparent]を選択します


0

発行時に「S」を取り除くための簡単な解決策

svn status

'S'でマークされたディレクトリに移動し、非表示の.svnディレクトリを削除するだけです。

rm -rf .svn

その後、ソースは「?」でマークされて表示されます そして、あなたはそれらを新たに簡単に追加することができます:

svn add path / to / resource


私の場合、同じサーバー上の別のリポジトリから追加したリソースの横に「S」が表示されたため、上記で説明した解決策は明らかでした。
Torsten Barthel 2018年

0

私の場合、ブランチ内の2つのサブディレクトリがトランクから削除されました。トップレベルディレクトリからブランチをトランクから切り替えてからトランクに戻り、これらのサブディレクトリのステータスが現在の状態になっているという問題が発生しましたS

@ahnbizcadの回答をガイドラインとして使用しました。サブディレクトリの親ディレクトリ(それ自体が最上位ディレクトリの下にあります)から:

svn sw <branch_url>

svn sw <trunk_url>


-6

公式ヘルプを読んでみることをお勧めします。

svn st --help

または

svn st --help | grep S

'S' the item has a Switched URL relative to the parent

4
RTFMは、そのステータスを取り除く方法に関する質問には答えません。
マドック2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.