sed && svn-Problem

sed && svn-Problem

ich habe eine SVN-Arbeitskopie, in der ich den folgenden Befehl ausgeführt habe

finde ./Quelle * -Typ f -exec sed "s/@version 0.5.3/@version 0.5.4/" -i {} \;

die Dateien sind alle aktualisiert, aber svn erkennt keine Änderung bei der Ausführung einer dieser

svn-Status ./Quelle

svn diff ./Quelle

svn commit ./quelle

ich habe auch versucht, ein Skript zu schreiben, das das $? von sed überprüft, und es ist in Ordnung, die Datei zu „berühren“, um ihr Datum zu aktualisieren, aber sed scheint immer 0 -.- zurückzugeben.

Was kann ich jetzt machen? -.-

Antwort1

Das Problem liegt in Ihrer Verwendung von find:

find dir1 -type f

Stimmt mit allen Dateien in der Verzeichnisstruktur überein, einschließlich der Dateien innerhalb der .svnVerzeichnisse. Die Dateien in .svnsind diejenigen, die zum Ausführen von svn diffdagegen verwendet werden. Im Wesentlichen haben Sie also alle Kopien der Dateien im Baum geändert, nicht nur die Arbeitskopien.

Versuchen Sie diese Syntax:

find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;

Antwort2

In meinem Fall stellte sich heraus, dass ich einen symbolischen Link zur echten Datei aktualisierte. Ich habe sed in-place update verwendet. Interessanterweise wird dadurch ein symbolischer Link zu einer normalen Datei. Dann war svn nicht glücklich, weil der „Objekt“-Typ natürlich geändert wurde.

So wird ein symbolischer Link in eine normale Datei geändert:

user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
lrwxrwxrwx 1 user user 7 Aug  5 11:07 txtln -> txtfile
user@host>sed -i "s/hello/mello/" txtln
user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
-rw-rw-r-- 1 user user 90 Aug  5 11:08 txtln
user@host>

verwandte Informationen