2013-06-04 4 views
9

開発者は、トランクから作成されたブランチのバグを修正します。それから、私は枝をテストし、幹に戻って再統合する。コマンドラインからのみコミットする方法は、プロパティの変更ではないコンテンツの変更ですか?

最近私はまたプロパティの変更をコミットしています。トランクに何度もコミットするファイルが3つあります。私はsvnを使ってリビジョン間のファイルの内容を比較した。一部のプロパティのみが変更されました。

Q1:はので、私はコマンドラインから、私はsvn stを行うだけで、最初の列にMを持つファイルのみをコミットしますどのような方法がありますか?

Q2:トランクを清掃する方法や、これらの3つのファイルを何度も何度もコミットする方法はありますか? stは

くれ

M  . 
M  controllers/database/udfs/searchForNameContSrch.sql 
M  controllers/eduMoodleInterface 
M  controllers/main 
M  controllers/teaching 
M  lib/utils/EduMail.php 
M  lib/views/learning/progress/reverse_template_converter.php 
M  pages/carer/carer_basepage.php 
M  pages/common/contact_list_detail_basepage.php 
M  pages/contact/contact_basepage.php 
M  pages/staff/staff_basepage.php 
M  pages/student/student_basepage.php 
を与える現在のソリューションのsvn

----編集 がコミットする前に2番目の列にMを持つファイルを元に戻すことです。それは動作しますが、時間がかかります。他のアイデア?

+0

これはおそらく、不正行為との答えであるには余りにも洗練され、しかし私はときどきviに必要なファイルをコピーして貼り付け、最初の文字列を削除してから、すべてのファイル名が同じ行になるまでshift-Jを押し続けてから、 "svn ci -mBlahBlah"をその行をシェルコマンドとして実行します。 –

+0

:-)それは私がコミットしたくないファイルを元に戻すようなものです。彼らはコミットすべきではありません、とにかくプロパティが変更された理由はわかりません。 – Radek

+0

Q1:Tortoiseを使ってそのような仕事をすることができます。チェックボックスで、コミットするファイルを選択します。 Q2:複数のファイルがある場合は、このツールを使用してクリーンアップすることができる同じツールで、Q1、Tortoiseがそのクリーンアップを行います。 –

答えて

7

私はプロパティで何が起こっているのか把握し、その問題を解決するのは、それらを無視するよりも傾きがちです。つまり、この回答の最後には、Linux上であれば、復帰プロセスを高速化する1つのライナーがあります。

この回答のために、1つのファイル(window.c)にプロパティを設定し、別のファイル(window.h)を変更しました。プロパティの使用をsvnを

svn status 
M  window.c 
M  window.h 

主なコマンドは、次のとおりです。

svn propset answer 42 window.c 
property 'answer' set on 'window.c' 

あなたはおそらくこれを使用することを希望していない42を評価するために、ファイルwindow.c上propety「答え」を設定します。

svn proplist window.c 
Properties on 'window.c': 
    svn:keywords 
    svn:eol-style 
    answer 

ファイルのすべてのプロパティ(値なし)を一覧表示します。

svn propget answer window.c 
42 

特定のプロパティの値を取得します。

svn propedit answer window.c 
Set new value for property 'answer' on 'window.c' 

私のマシン上ではすべてのものがナノです。このプロパティを編集して、指定したファイルに設定します。

svn propdel answer window.c 
property 'answer' deleted from 'window.c'. 

指定されたプロパティを削除します(これはおそらく問題は解決しません)。

あなたはまた異なっているプロパティを見つけるためにsvn diffを行うことができます。

svn diff window.c 
Index: window.c 
=================================================================== 
--- window.c (revision 35712) 
+++ window.c (working copy) 

Property changes on: window.c 
___________________________________________________________________ 
Added: answer 
## -0,0 +1 ## 
+42 
\ No newline at end of property 

この基本的にはここでの唯一の変更はプロパティ「答えは」の値42(なし改行で、追加されているであることを述べています)。

だから私はsvn diff スタートを行うと、変更内容を見つけるだろう:

svn diff controllers/database/udfs/searchForNameContSrch.sql 
svn diff controllers/main 

が変更されたプロパティのためのGoogleを持って、あなたがそれを設定しているもののツールを把握することができるかどうかを確認それをオフにします。

svn propdeleteを使用してプロパティを破棄することはできますが、それは役に立たないと思います。それに失敗

- 迅速な復帰スクリプトそうでない場合

、Linuxを使用している場合、この1つのライナーは、プロパティの変更を持つファイルではなく、コンテンツの変更を元に戻します。

これは、重要ではない最初の更新をテストしてください。ある

svn status | grep "^ M" | sed "s/^.\{8\}//" | while read rv; do svn revert $rv; done 

  • のsvnステータス

  • パイプをグレップと 'M'(そう、それは 'MM' を無視するで始まる行だけのためのフィルターを通して - 重要)。

  • sedでパイプして、最初の8文字(ファイル名の前にあるすべてのステータス列)を削除します。

  • パイプをループにして、指定されたファイル名を元に戻します。

ここではアクションである:

svn status 
M  window.c 
M  window.h 
svn status | grep "^ M" | sed "s/^.\{8\}//" | while read rv; do svn revert $rv; done 
Reverted 'window.c' 
svn status 
M  window.h 
+0

どのような不動産が変更されているのかを知ることができれば幸いです。興味深いですね。 –

1

あなたが戻ってトランクに再統合たときに、それらの性質が変化することを書いたので、私は変更プロパティがsvn:mergeinfoだと思いますが、あなたが必要とするだろうそれを確認する。

上記を前提とすると、mergeinfoが何であるか、実際になぜかを理解するために、以下の情報源を参照してください。は、変更をコミットします。また、これらのプロパティをクリーンアップし、より厳密なマージ処理を続けると、それらを再度表示させることはできません。つまり、常にトランク/ブランチルートディレクトリでマージを実行します。この方法でmergeinfoは、個々のファイルではなく、それらのディレクトリにのみ記録されます。これは、mergeinfoであなたのレポを汚染しないというメリットがありますし、あなたのコミットdiffsクリーナーも作成します。

出典:

関連する問題