Datei mit Sharpsvn hinzufügen
Frage
Ich möchte alle unversionierten Dateien unter einem Verzeichnis mit SharpsVN zu SVN hinzufügen.
Ich habe zuerst reguläre SVN -Befehle in der Befehlszeile ausprobiert:
C:\temp\CheckoutDir> svn status -v
Ich sehe alle Subdirs, alle Dateien, die bereits eingecheckt sind, ein paar neue Dateien mit der Bezeichnung ""? ", Nichts mit der" L "-Schressanzeige
C:\temp\CheckoutDir> svn add . --force
Dies führt zu allen neuen Dateien in den Subdirs, die bereits unter der Versionskontrolle selbst hinzugefügt werden.
Ich würde gerne mit Sharpsvn das Gleiche tun. Ich kopiere ein paar zusätzliche Dateien in dasselbe Verzeichnis und führe diesen Code aus:
...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
SvnAddArgs saa = new SvnAddArgs();
saa.Force = true;
saa.Depth = SvnDepth.Infinity;
try
{
svn.Add(@"C:\temp\CheckoutDir\." , saa);
}
catch (SvnException exc)
{
Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
}
}
Aber eine SvNexception wird angehoben:
- SvNexception.message: Arbeitskopie 'C: temp Checkoutdir' gesperrt
- Svnexception.file: .. .. .. subversion libsvn_wc lock.c "
Keine andere SVNClient -Instanz ist in meinem Code, ich habe auch versucht, anzurufen
svn.cleanup()
Kurz vor dem Hinzufügen, aber ohne Erfolg.
Seit der Dokumentation ist ziemlich vage;), ich habe mich gefragt, ob hier jemand die Antwort kannte.
Danke im Voraus!
Jan
Lösung
Verwenden Sie dies mein Werkzeug http://svncompletesync.codeplex.com/ Oder nehmen Sie es als Probe. Es tut genau das, was Sie brauchen.
Andere Tipps
Ich habe Malcolms Tool ausprobiert, konnte es aber jetzt nicht zum Laufen bringen Eins in SVN:
string _localCheckoutPath = @"C:\temp\CheckoutDir\";
SvnClient client = new SvnClient();
Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus(_localCheckoutPath, out changedFiles);
//delete files from subversion that are not in filesystem
//add files to suversion , that are new in filesystem
foreach (SvnStatusEventArgs changedFile in changedFiles)
{
if (changedFile.LocalContentStatus == SvnStatus.Missing)
{
client.Delete(changedFile.Path);
}
if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
{
client.Add(changedFile.Path);
}
}
SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "Some message...";
client.Commit(_localCheckoutPath, ca);
Ich denke, du solltest den Weg nicht mit einem ',' satt. Versuchen:
svn.Add(@"C:\temp\CheckoutDir" , saa);
Bitte besprechen Sie dies weiter in der SharpsVN -Diskussions-/Mailingliste, da das Verhalten, das Sie sehen, möglicherweise ein Fehler ist.