svnバージョン番号を取得し、AndroidManifestに置き換えます.xml


最近では、友盟におけるエラー解析を具体的なソースコードに位置づけるため、コードが修正されるため、どのバージョンのファイルなのか追跡することができず、svnバージョン番号を取得してAndroidManifestに出力しようとする.xmlのversionNameの中にあります.いろいろ考えたあげく、数回の試みと失敗を経て、やっと終わった.
プロジェクトはwindows環境で、gitクライアントをインストールしたのでgit bashでgrep、sed、xargsなどのコマンドを実行できます.そこで、以下のスクリプトを書いて、svnバージョン番号を自動的に取得します.このうち2行目と4行目は出力のためだけで、削除できます.
svnv=`svnversion |sed 's/^.*://' |sed 's/[A-Z]*$//'`
echo $svnv
sed -i s/versionName="\(.*build-\)[0-9]*"/versionName="\1$svnv"/ AndroidManifest.xml
cat AndroidManifest.xml |grep versionName

何時の状況を説明しますか.
1.svn infoではなくsvnversionでバージョン番号を取得する理由
正直、svn infoで取得すれば、昨夜は解決できます.しかし、私がファイルをコミットするとき、サブディレクトリをコミットすることがあるため、一部のサブディレクトリのバージョンはプロジェクトのbase dirディレクトリのバージョンが高い可能性があります.svn infoで取得したのはすべてのファイルの最新バージョンではありません.
では、なぜsvn infoの前にsvn upで更新しないのですか?
私のここのsvnサーバーは学校の中にあるので、対外帯域幅はとても小さくて、svn upは比較的に長いことができて、私にとって、私はただ急速にバージョン番号を取得したいだけです
2.どうして何行の命令がこんなに長く書いたのですか.
まずsedコマンドに慣れていないので、テキストをどのように置き換えるか、正規表現を使うか、引用符を使うかどうか、単引用符を使うか二重引用符を使うか、パラメータを加えるかなどいろいろな問題が困っています.
次に、このコマンドの使用が少なく、grepコマンドに慣れていないことです.svnversionで取得したバージョン番号は、「2001」のような数字(コミット後にsvnupがあった場合)、または「1998:2001 M」(1998バージョン後にコミットされたがbase dirでsvnupしていない場合)である可能性があります.だから、最初はこの結果から最後の数字をどのように抽出するかを考えていました.grepで「:」があるかどうかを判断したいと思っていました.コロンがあれば2番目のバージョン番号を取得します.そうしないと、直接結果全体を取得しても、もちろん成功しませんでした.
最後に、前の文字列を置き換えるためのsedコマンドを見て、コロンと前の文字列を置き換えてから、後ろの文字列を置き換えることができることを思い出しました.
3.このコマンドを使用するとAndroidManifest.xmlが読み取り専用になりますか?
このコマンドを使った後、AndroidManifestを見つけました.xmlは読み取り専用になります.なぜか、私にもわかりません.知っていることを伝言して教えてほしいです.