
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 .svn
Verzeichnisse. Die Dateien in .svn
sind diejenigen, die zum Ausführen von svn diff
dagegen 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>