Gibt es eine Möglichkeit, nur eine Liste bestimmter Dateien festzuschreiben (eq nur eine der Listen der Dateien, die SVN festschreiben möchte).
Ich arbeite an MAC OS X unter Terminal ohne Benutzeroberfläche.
Gibt es eine Möglichkeit, nur eine Liste bestimmter Dateien festzuschreiben (eq nur eine der Listen der Dateien, die SVN festschreiben möchte).
Ich arbeite an MAC OS X unter Terminal ohne Benutzeroberfläche.
Antworten:
Sicher. Listen Sie einfach die Dateien auf:
$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png
Mir ist keine Möglichkeit bekannt, eine bestimmte Gruppe von Dateien zu ignorieren. Wenn die Dateien, die Sie festschreiben möchten, von der Shell leicht aufgelistet werden können, können Sie Folgendes verwenden:
$ svn ci -m "No longer sets printer on fire" printer-driver/*.c
Sie können den Befehl svn auch die Liste der zu festschreibenden Dateien aus einer Datei lesen lassen:
$ svn ci -m "Now works" --targets fix4711.txt
svn add
wird verwendet, um Dateien zu Repositorys hinzuzufügen.
Verwenden Sie Änderungslisten. Der Vorteil gegenüber der Angabe von Dateien besteht darin, dass Sie vor dem Festschreiben alles visualisieren und bestätigen können, was Sie möchten.
$ svn changelist fix-issue-237 foo.c
Path 'foo.c' is now a member of changelist 'fix-issue-237'.
Nachdem dies erledigt ist, hält svn die Dinge jetzt für Sie getrennt. Dies ist hilfreich, wenn Sie mit mehreren Änderungen jonglieren
$ svn status
A bar.c
A baz.c
--- Changelist 'fix-issue-237':
A foo.c
Sagen Sie ihm schließlich, er soll festlegen, was geändert werden soll.
$ svn commit --changelist fix-issue-237 -m "Issue 237"
svn changelist fix-issue-237 --recursive path/to/directory
Grundsätzlich platzieren Sie die Dateien, die Sie festschreiben möchten, in der Befehlszeile
svn ci file1 file2 dir1/file3
Aufgrund meines Subversion-Zustands musste ich kreativ werden. svn st
zeigte M
, A
und ~
Zustände. Ich wollte nur M
und A
so ...
svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt
Dieser Befehl besagt, dass alle von svn st
diesem ausgegebenen Zeilen mit M
oder beginnen sollen A
, wobei ein Leerzeichen verwendet wird, und dann die Spalten 8 bis zum Ende abgerufen werden sollen. Legen Sie das in targets.txt ab und überschreiben Sie es.
Ändern Sie dann targets.txt, um die Dateiliste weiter zu bereinigen. Führen Sie dann die folgenden Schritte aus, um Folgendes festzuschreiben:
svn ci -m "My commit message" --targets targets.txt
Wahrscheinlich nicht der häufigste Anwendungsfall, aber hoffentlich hilft es jemandem.
grep -v '^~'
auf die schwarze Liste zu setzen, was Sie möchten.
Neben der expliziten Auflistung der Dateien wie durch Abwickeln gezeigt und Wienczny , Sie können Setup Änderungslisten und checkin diese. Mit diesen können Sie disjunkte Änderungssätze an derselben Arbeitskopie verwalten.
Sie können darüber in der Online-Version des ausgezeichneten SVN-Buches lesen .
versuchen Sie dieses Skript ..
#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`;
do LIST="${LIST} $f $NULL on";
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Ich erstelle einen (Unter-) Ordner mit dem Namen "hide" und verschiebe die Datei, die ich nicht habe Festschreibung möchte. Dann mache ich mein Commit und ignoriere die Beschwerde über die fehlende Datei. Verschieben Sie dann die ausgeblendete Datei von "Ausblenden" zurück nach ./
Ich kenne keinen Nachteil dieser Taktik.