1Commands and command line parameters(1f)svCsommands and command line parameters(1)
2
3
4

NAME

6       fsvs - fast versioning tool
7

SYNOPSIS

9       fsvs command [options] [args]
10
11       The following commands are understood by fsvs:
12

Local configuration and information:

14       urls
15           Define working copy base directories by their URL(s)
16
17       status
18           Get a list of changed entries
19
20       info
21           Display detailed information about single entries
22
23       log
24           Fetch the log messages from the repository
25
26       diff
27           Get differences between files (local and remote)
28
29       copyfrom-detect
30           Ask fsvs about probably copied/moved/renamed entries; see cp
31

Defining which entries to take:

33       ignore
34           Define ignore patterns
35
36       unversion
37           Remove entries from versioning
38
39       add
40           Add entries that would be ignored
41
42       cp, mv
43           Tell fsvs that entries were copied.
44

Commands working with the repository:

46       commit
47           Send changed data to the repository
48
49       update
50           Get updates from the repository
51
52       checkout
53           Fetch some part of the repository, and register it as working copy
54
55       revert
56           Undo local changes
57
58       remote-status
59           Ask what an update would bring
60

Property handling

62       prop-set
63           Set user-defined properties
64
65       prop-get
66           Ask value of user-defined properties
67
68       prop-list
69           Get a list of user-defined properties
70

Additional commands used for recovery and debugging:

72       export
73           Fetch some part of the repository
74
75       sync-repos
76           Drop local information about the entries, and fetch the current
77           list from the repository.
78
79       Note:
80           Multi-url-operations are relatively new; there might be rough
81           edges.
82

Universal options

84   -V -- show version
85       -V makes fsvs print the version and a copyright notice, and exit.
86
87   -d and -D -- debugging
88       If fsvs was compiled using --enable-debug you can enable printing of
89       debug messages (to STDOUT) with -d. Per default all messages are
90       printed; if you're only interested in a subset, you can use -D start-
91       of-function-name.
92
93             fsvs -d -D waa_ status
94
95
96        would call the status action, printing all debug messages of all WAA
97       functions - waa__init, waa__open, etc.
98
99       Furthermore you can specify the debug output destination with the
100       option debug_output. This can be a simple filename (which gets
101       truncated), or, if it starts with a |, a command that the output gets
102       piped into.
103
104       If the destination cannot be opened (or none is given), debug output
105       goes to STDOUT.
106
107       Note:
108           That string is taken only once - at the first debug output line. So
109           you have to use the correct order of parameters: -o
110           debug_output=... -d.
111
112       An example: writing the last 200 lines of debug output into a file.
113
114          fsvs -o debug_output='| tail -200 > /tmp/debug.log' -d ....
115
116
117   -N, -R -- recursion
118       The -N and -R switches in effect just decrement/increment a counter;
119       the behavious is chosen depending on that. So -N -N -N -R -R is
120       equivalent to -N.
121
122   -q, -v -- verbose/quiet
123       Like the options for recursive behaviour (-R and -N) -v and -q just
124       inc/decrement a counter. The higher the value, the more verbose.
125        Currently only the values -1 (quiet), 0 (normal), and +1 (verbose) are
126       used.
127
128   -C -- checksum
129       -C increments the checksum flag. Normally status tells that a file has
130       possible modification, if its mtime has changed but its size not. Using
131       -C you can tell the commands to be extra careful and always check for
132       modifications.
133
134       The values are 0 Normal operations 1 Check files for modifications if
135       possibly changed 2 Do an MD5 verification for all files, and check all
136       directories for new entries.
137
138       If a files size has changed, we can be sure that it's changed; a
139       directory is checked for changes if any of its meta-data has changed
140       (mtime, ctime, owner, group, size, mode).
141
142       Note:
143           commit and update set the checksum flag to at least 1, to avoid
144           missing changed files.
145
146   -f -- filter entries
147       This parameter allows to do a bit of filtering of entries, or, for some
148       operations, modification of the work done on given entries.
149
150       It requires a specification at the end, which can be any combination of
151       any, text, new, deleted, meta, mtime, group or owner.
152
153       By giving eg. the value text, with a status action only entries that
154       are new or changed are shown; with mtime,group only entries whose group
155       or modification time has changed are printed.
156
157       Note:
158           The list does not include possibly changed entries; see -C --
159           checksum -C.
160
161           If an entry gets replaced with an entry of a different type (eg. a
162           directory gets replaced by a file), that counts as deleted and new.
163
164       If you use -v, it's used as a any internally.
165
166       If you use the string none, it resets the bitmask to no entries shown;
167       then you can built a new mask. So owner,none,any,none,delete would show
168       deleted entries. If the value after all commandline parsing is none, it
169       is reset to the default.
170
171   -W warning=action -- set warnings
172       Here you can define the behaviour for certain situations that should
173       not normally happen, but which you might encounter.
174
175       The general format here is specification = action, where specification
176       is a string matching the start of at least one of the defined
177       situations, and action is one of these:
178
179       · once to print only a single warning,
180
181       · always to print a warning message every time,
182
183       · stop to abort the program,
184
185       · ignore to simply ignore this situation, or
186
187       · count to just count the number of occurrences.
188
189       If specification matches more than one situation, all of them are set;
190       eg. for meta=ignore all of meta-mtime, meta-user etc. are ignored.
191
192       If at least a single warning that is not ignored is encountered during
193       the program run, a list of warnings along with the number of messages
194       it would have printed with the setting always is displayed, to inform
195       the user of possible problems.
196
197       The following situations can be handled with this: meta-mtime, meta-
198       user, meta-group, meta-umask These warnings are issued if a meta-data
199       property that was fetched from the repository couldn't be parsed. This
200       can only happen if some other program or a user changes properties on
201       entries.
202        In this case you can use -Wmeta=always or -Wmeta=count, until the
203       repository is clean again.
204
205       no-urllist This warning is issued if a info action is executed, but no
206       URLs have been defined yet.
207
208       charset-invalid If the function nl_langinfo(3) couldn't return the name
209       of the current character encoding, a default of UTF-8 is used. You
210       might need that for a minimal system installation, eg. on recovery.
211
212       chmod-eperm, chown-eperm If you update a working copy as normal user,
213       and get to update a file which has another owner but you may modify,
214       you'll get errors because neither the user, group, nor mode can be set.
215
216       chmod-other, chown-other If you get another error than EPERM in the
217       situation above, you might find these useful.
218
219       overlayed-entries This is not yet used.
220
221       mixed-rev-wc If you specify some revision number on a revert, it will
222       complain that mixed-revision working copies are not allowed. By using
223       this specification you cannot enable mixed-revision working copies, of
224       course, but you can avoid getting told every time.
225
226       propname-reserved It is normally not allowed to set a property with the
227       prop-set action with a name matching some reserved prefixes.
228
229        ignpat-wcbase This warning is issued if an absolute ignore  pattern'
230       does not match the working copy base directory.
231
232       diff-status GNU diff has defined that it returns an exit code 2 in case
233       of an error; sadly it returns that also for binary files, so that a
234       simply fsvs diff some-binary-file text-file would abort without
235       printing the diff for the second file. So the exit status of diff is
236       per default ignored, but can be used by setting this option to eg.
237       stop.
238
239       Also an environment variable FSVS_WARNINGS is used and parsed; it is
240       simply a whitespace-separated list of option specifications.
241
242   -u URLname[@revision] -- select URLs
243       Some commands' operations can be reduced to a subset of defined URLs;
244       the update command is the best example.
245
246       If you have more than a single URL in use for your working copy, and
247       update updates all entries from all URLs. By using this parameter you
248       can tell FSVS to update only a single URL.
249
250       The parameter can be used repeatedly; the value can have multiple URLs,
251       separated by whitespace or one of ',;'.
252
253          fsvs up -u base_install,boot@32 -u gcc
254
255        This would get HEAD of base_install and gcc, and set the target
256       revision of the boot URL at 32.
257
258   -o [name[=value]] -- other options
259       This is used for setting some seldom used option, for which default can
260       be set in a configuration file (to be implemented, currently only
261       command-line).
262
263       For a list of these please see Further options for FSVS..
264

add

266        fsvs add PATH [PATH...]
267
268       With this command you can explicitly define entries to be versioned,
269       even if they have a matching ignore pattern. They will be sent to the
270       repository on the next commit, just like other new entries, and will
271       therefore be reported as New .
272
273   Example
274       Say, you're versioning your home directory, and gave an ignore pattern
275       of ./.* to ignore all .* entries in your home-directory. Now you want
276       .bashrc, .ssh/config, and your complete .kde3-tree saved, just like
277       other data.
278
279       So you tell fsvs to not ignore these entries:
280
281           fsvs add .bashrc .ssh/config .kde3
282
283
284        Now the entries below .kde3 would match your earlier ./.* pattern (as
285       a match at the beginning is sufficient), so you have to insert a
286       negative ignore pattern (a take pattern):
287
288           fsvs ignore --insert t./.kde3
289
290
291        Now a fsvs st would show your entries as New , and the next commit
292       will send them to the repository.
293
294       Note:
295           This loads the wc data, writes the given paths with some flags to
296           it, and saves the wc data again.
297

unversion

299        fsvs unversion PATH [PATH...]
300
301       This command flags the given paths locally as removed. On the next
302       commit they will be deleted in the repository, and the local
303       information of them will be removed, but not the entries themselves. So
304       they will show up as New again, and you get another chance at ignoring
305       them.
306
307   Example
308       Say, you're versioning your home directory, and found that you no
309       longer want .bash_history and .sh_history versioned. So you do
310
311           fsvs unversion .bash_history .sh_history
312
313
314        and these files will be reported as d (will be deleted, but only in
315       the repository).
316
317       Then you do a
318
319           fsvs commit
320
321
322       Now fsvs would report these files as New , as it does no longer know
323       anything about them; but that can be cured by
324
325           fsvs ignore './.*sh_history'
326
327
328        Now these two files won't be shown as New , either.
329
330       The example also shows why the given paths are not just entered as
331       separate ignore patterns - they are just single cases of a (probably)
332       much broader pattern.
333
334       Note:
335           If you didn't use some kind of escaping for the pattern, the shell
336           would expand it to the actual filenames, which is (normally) not
337           what you want.
338

_build_new_list

340       This is used mainly for debugging. It traverses the filesystem and
341       build a new entries file. In production it should not be used - as the
342       revision of the entries is unknown, we can only use 0 - and loose
343       information this way!
344

checkout

346        fsvs checkout [path] URL [URLs...]
347
348       Sets one or more URLs for the current working directory (or the
349       directory path), and does an checkout of these URLs.
350
351       Example:
352
353        fsvs checkout . http://svn/repos/installation/machine-1/trunk
354
355
356       The distinction whether a directory is given or not is done based on
357       the result of URL-parsing -- if it looks like an URL, it is used as an
358       URL.
359        Please mind that at most a single path is allowed; as soon as two non-
360       URLs are found an error message is printed.
361
362       If no directory is given, . is used; this differs from the usual
363       subversion usage, but might be better suited for usage as a recovery
364       tool (where versioning / is common). Opinions welcome.
365
366       The given path must exist, and should be empty -- fsvs will abort on
367       conflicts, ie. if files that should be created already exist.
368        If there's a need to create that directory, please say so; patches for
369       some parameter like -p are welcome.
370
371       For a format definition of the URLs please see the chapter Format of
372       URLs and the urls and update commands.
373
374       Furthermore you might be interested in Using an alternate root
375       directory and Recovery for a non-booting system.
376

commit

378        fsvs commit [-m 'message'|-F filename] [-v] [-C [-C]] [PATH [PATH ...]]
379
380       Commits the current state into the repository. It is possible to commit
381       only parts of a working copy into the repository.
382
383       Your working copy is /etc , and you've set it up and committed already.
384       Now you've changed /etc/hosts , and /etc/inittab . Since these are non-
385       related changes, you'd like them to be in separate commits.
386
387       So you simply run these commands:
388
389        fsvs commit -m 'Added some host' /etc/hosts
390        fsvs commit -m 'Tweaked default runlevel' /etc/inittab
391
392
393       If you're currently in /etc , you can even drop the /etc/ in front, and
394       just use the filenames.
395
396       This extended path handling on the commandline is not yet available for
397       every command. Most of them still expect you to be in the working copy
398       root.
399
400       Please see status for explanations on -v and -C . For advanced backup
401       usage see also FSVS_PROP_COMMIT_PIPE.
402

cp

404        fsvs cp [-r rev] SRC DEST
405        fsvs cp dump
406        fsvs cp load
407
408       This command marks DEST as a copy of SRC at revision rev, so that on
409       the next commit of DEST the corresponding source path is sent as copy
410       source.
411
412       The default value for rev is BASE, ie. the revision the SRC (locally)
413       is at.
414
415       Please note that this command works always on a directory structure -
416       if you say to copy a directory, the whole structure is marked as copy.
417       That means that if some entries below the copy are missing, they are
418       reported as removed from the copy on the next commit.
419        (Of course it is possible to mark files as copied, too; non-recursive
420       copies are not possible.)
421
422       Note:
423           Or TODO: There will be differences in the exact usage - copy will
424           try to run the cp command, whereas copied will just remember the
425           relation.
426
427       If this command are used without parameters, the currently defined
428       relations are printed; please keep in mind that the key is the
429       destination name, ie. the 2nd line of each pair!
430
431       The input format for load is newline-separated - first a SRC line,
432       followed by a DEST line, then an line with just a dot ('.') as
433       delimiter. If you've got filenames with newlines or other special
434       characters, you have to give the paths as arguments.
435
436       Internally the paths are stored relative to the working copy base
437       directory, and they're printed that way, too.
438
439       Later definitions are appended to the internal database; to undo
440       mistakes, use the revert action.
441
442       Note:
443           Important: User-defined properties like fsvs:commit-pipe are not
444           copied to the destinations, because of space/time issues
445           (traversing through entire subtrees, copying a lot of property-
446           files) and because it's not sure that this is really wanted. TODO:
447           option for copying properties?
448
449           As subversion currently treats a rename as copy+delete, the mv
450           command is an alias to cp.
451
452       If you have a need to give the filenames dump or load as first
453       parameter for copyfrom relations, give some path, too, as in ./dump.
454
455       Note:
456           The source is internally stored as URL with revision number,
457           because else an operation like
458
459              $ fsvs cp a b
460              $ rm a/1
461              $ fsvs ci a
462              $ fsvs ci b
463
464
465            would fail - FSVS would send the wrong (too recent!) revision
466           number as source, and so the local filelist would get inconsistent
467           with the repository.
468            But it is not implementd to give an URL as copyfrom source
469           directly - we'd have to fetch a list (and possibly the data!) from
470           the repository.
471

copyfrom-detect

473        fsvs copyfrom-detect [paths...]
474
475       This command tells fsvs to look through the new entries, and see
476       whether it can find some that seem to be copied from others already
477       known.
478        It will output a list with source and destination path and why it
479       could match.
480
481       This is just for information purposes and doesn't change any FSVS
482       state, unless some option/parameter is set. (TODO)
483
484       The list format is on purpose incompatible with the load syntax, as the
485       best match normally has to be taken manually.
486
487       If verbose is used, an additional value giving the percentage of
488       matching blocks, and the count of possibly copied entries is printed.
489
490       Example:
491
492          $ fsvs copyfrom-list -v
493          newfile1
494            md5:oldfileA
495          newfile2
496            md5:oldfileB
497            md5:oldfileC
498            md5:oldfileD
499          newfile3
500            inode:oldfileI
501            manber=82.6:oldfileF
502            manber=74.2:oldfileG
503            manber=53.3:oldfileH
504            ...
505          3 copyfrom relations found.
506
507
508       The abbreviations are: md5 The MD5 of the new file is identical to that
509       of one or more already committed files; there is no percentage.
510
511       inode The device/inode number is identical to the given known entry;
512       this could mean that the old entry has been renamed or hardlinked.
513       Note: Not all filesystems have persistent inode numbers (eg. NFS) - so
514       depending on your filesystems this might not be a good indicator!
515
516       name The entry has the same name as another entry.
517
518       manber Analysing files of similar size shows some percentage of
519       (variable-sized) common blocks (ignoring the order of the blocks).
520
521       dirlist The new directory has similar files to the old directory.
522        The percentage is (number_of_common_entries)/(files_in_dir1 +
523       files_in_dir2 - number_of_common_entries).
524
525       Note:
526           Only md5, name and inode matching currently done.
527
528           If too many possible matches are found, not all may be printed;
529           only the indicator ... is shown at the end.
530

diff

532        fsvs diff [-v] [-r rev[:rev2]] [-R] PATH [PATH...]
533
534       This command gives you diffs between local and repository files.
535
536       With -v the meta-data is additionally printed, and changes shown.
537
538       If you don't give the revision arguments, you get a diff of the base
539       revision in the repository (the last commit) against your current local
540       file. With one revision, you diff this repository version against you
541       local file. With both revisions given, the difference between these
542       repository versions is calculated.
543
544       You'll need the diff program, as the files are simply passed as
545       parameters to it.
546
547       The default is to do non-recursive diffs; so fsvs diff . will output
548       the changes in all files in the current directory.
549
550       The output for non-files is not defined.
551
552       For entries marked as copy the diff against the (clean) source entry is
553       printed.
554
555       Please see also Options relating to the 'diff' action and Using
556       colordiff.
557

export

559        fsvs export REPOS_URL [-r rev]
560
561       If you want to export a directory from your repository without having
562       to have an WAA-area, you can use this command. This restores all meta-
563       data - owner, group, access mask and modification time. Its primary use
564       is for data recovery.
565
566       The data gets written (in the correct directory structure) below the
567       current working directory; if entries already exist, the export will
568       stop, so this should be an empty directory.
569

help

571        help [command]
572
573       This command shows general or specific help (for the given command). A
574       similar function is available by using -h or -? after a command.
575

ignore

577        fsvs ignore [prepend|append|at=n] pattern[s]
578        fsvs ignore dump|load
579
580       This command adds patterns to the end of the ignore list, or, with
581       prepend , puts them at the beginning of the list. With at=x the
582       patterns are inserted at the position x , counting from 0.
583
584       fsvs dump prints the patterns to STDOUT . If there are special
585       characters like CR or LF embedded in the pattern without encoding (like
586       \r or \n), the output will be garbled.
587
588       The patterns may include * and ? as wildcards in one directory level,
589       or ** for arbitrary strings.
590
591       These patterns are only matched against new files; entries that are
592       already versioned are not invalidated. If the given path matches a new
593       directory, entries below aren't found, either; but if this directory or
594       entries below are already versioned, the pattern doesn't work, as the
595       match is restricted to the directory.
596
597       So:
598
599            fsvs ignore ./tmp
600
601
602        ignores the directory tmp; but if it has already been committed,
603       existing entries would have to be unmarked with fsvs unversion.
604       Normally it's better to use
605
606            fsvs ignore ./tmp/§**
607
608
609        as that takes the directory itself (which might be needed after
610       restore as a mount point), but ignore all entries below.
611
612       Other special variants are available, see the documentation Using
613       ignore patterns .
614
615       Examples:
616
617            fsvs ignore ./proc
618            fsvs ignore ./dev/pts
619            fsvs ignore './var/log/§*-*'
620            fsvs ignore './§**~'
621            fsvs ignore './§**§/§*.bak'
622            fsvs ignore prepend 't./§**.txt'
623            fsvs ignore append 't./§**.svg'
624            fsvs ignore at=1 './§**.tmp'
625            fsvs ignore dump
626            fsvs ignore dump -v
627            echo './§**.doc' | fsvs ignore load
628
629
630       Note:
631           Please take care that your wildcard patterns are not expanded by
632           the shell!
633

info

635        fsvs info [-R [-R]] [PATH...]
636
637       Use this command to show information regarding one or more entries in
638       your working copy. Currently you must be at the working copy root; but
639       that will change. You can use -v to obtain slightly more information.
640
641       This may sometimes be helpful for locating bugs, or to obtain the URL
642       and revision a working copy is currently at.
643
644       Example:
645
646            $ fsvs info
647            URL: file:
648            ....       200  .
649                    Type:           directory
650                    Status:         0x0
651                    Flags:          0x100000
652                    Dev:            0
653                    Inode:          24521
654                    Mode:           040755
655                    UID/GID:        1000/1000
656                    MTime:          Thu Aug 17 16:34:24 2006
657                    CTime:          Thu Aug 17 16:34:24 2006
658                    Revision:       4
659                    Size:           200
660
661
662       The default is to print information about the given entry only. With a
663       single -R you'll get this data about all entries of a given directory;
664       with a second -R you'll get the whole (sub-)tree.
665

log

667        fsvs log [-v] [-r rev1[:rev2]] [path]
668
669       This command views the log information associated with the given path,
670       or, if none, the highest priority URL.
671
672       The optional rev1 and rev2 can be used to restrict the revisions that
673       are shown; if no values are given, the logs are given starting from
674       HEAD downwards.
675
676       If you use the -v -option, you get the files changed in each revision
677       printed, too.
678
679       Currently at most 100 log messages are shown.
680
681       There is an option controlling the output format; see 'fsvs log' output
682       format.
683
684       TODOs:
685
686       · --stop-on-copy
687
688       · Show revision for all URLs associated with a working copy? In which
689         order?
690
691       · A URL-parameter, to specify the log URL. (Name)
692
693       · Limit number of revisions shown?
694

prop-get

696        fsvs prop-get PROPERTY-NAME PATH...
697
698       You get the data of the property printed to STDOUT.
699
700       Note:
701           Be careful! This command will dump the property as it is, ie. with
702           any special characters! If there are escape sequences or binary
703           data in the property, your terminal might get messed up!
704            If you want a safe way to look at the properties, use prop-list
705           with the -v parameter.
706

prop-set

708        fsvs prop-set PROPERTY-NAME VALUE PATH...
709
710       This command sets an arbitrary property value for the given path(s).
711
712       Note:
713           Some property prefixes are reserved; currently everything starting
714           with svn: throws a (fatal) warning, and fsvs: is already used, too.
715           See Special property names.
716

prop-del

718        fsvs prop-del PROPERTY-NAME PATH...
719
720       This command removes property value for the given path(s).
721
722       See also prop-set
723

prop-list

725        fsvs prop-list [-v] PATH...
726
727       Lists the names of all properties for the given entry. With -v, the
728       value is printed as well; special characters will be translated, to not
729       mess with your terminal.
730
731       If you need raw output, post a patch for --raw, or loop with prop-get.
732

remote-status

734        fsvs remote-status PATH [-r rev]
735
736       This command looks into the repository and tells you which files would
737       get changed on an update - it's a dry-run for update .
738
739       Per default it compares to HEAD, but you can choose another revision
740       with the -r parameter.
741

resolve

743        fsvs resolve PATH [PATH...]
744
745       When FSVS tries to update local files which have been changed, a
746       conflict might occur. (For various ways of handling these please see
747       the conflict option.)
748
749       This command lets you mark such conflicts as resolved.
750

revert

752        fsvs revert [-rRev] [-R] PATH [PATH...]
753
754       This command undoes local modifications:
755
756       · An entry that is marked to be unversioned gets this flag removed.
757
758       · For a already versioned entry (existing in the repository), the local
759         entry is replaced with its repository version, and its status and
760         flags are cleared.
761
762       · An entry that is a copy destination, but modified, gets reverted to
763         the copy source data.
764
765       · An unmodified direct copy destination entry, and other uncommitted
766         entries with special flags (manually added, or defined as copied),
767         are changed back to '<i>N</i>'ew -- the copy definition and the
768         special status is removed.
769          Please note that on implicitly copied entries (entries that are
770         marked as copied because some parent directory is the base of a copy)
771         cannot be un-copied; they can only be reverted to their original
772         (copied-from) data, or removed.
773
774       See also HOWTO: Understand the entries' statii.
775
776       If a directory is given on the command line all known entries in this
777       directory are reverted to the old state; this behaviour can be modified
778       with -R/-N, or see below.
779
780       The reverted entries are printed, along with the status they had before
781       the revert (because the new status is per definition unchanged).
782
783       If a revision is given, the entries' data is taken from this revision;
784       furthermore, the new status of that entry is shown.
785
786       Note:
787           Please note that mixed revision working copies are not possible;
788           the BASE revision is not changed, and a simple revert without a
789           revision arguments gives you that.
790
791   Difference to update
792       If you find that something doesn't work as it should, you can revert
793       entries until you are satisfied, and directly commit the new state.
794
795       In contrast, if you update to an older version, you
796
797       · cannot choose single entries (no mixed revision working copies),
798
799       · and you cannot commit the old version with changes, as later changes
800         will create conflicts in the repository.
801
802   Currently only known entries are handled.
803       If you need a switch (like --delete in rsync(1) ) to remove unknown
804       (new, not yet versioned) entries, to get the directory in the exact
805       state it is in the repository, say so.
806
807   If a path is specified whose parent is missing,
808       fsvs complains. We plan to provide a switch (probably -p), which would
809       create (a sparse) tree up to this entry.
810
811   Recursive behaviour
812       When the user specifies a non-directory entry (file, device, symlink),
813       this entry is reverted to the old state. This is the easy case.
814
815       If the user specifies a directory entry, see this table for the
816       restoration results: command line switchresult -N this directory only
817       (meta-data), none this directory, and direct children of the directory,
818       -R this directory, and the complete tree below.
819
820   Working with copied entries
821       If an entry is marked as copied from another entry (and not
822       committed!), a revert will undo the copy setting - which will make the
823       entry unknown again, and reported as new on the next invocations.
824
825       If a directory structure was copied, and the current entry is just a
826       implicitly copied entry, revert would take the copy source as
827       reference, and get the file data from there.
828
829       Summary: Only the base of a copy can be un-copied.
830

status

832        fsvs status [-C [-C]] [-v] [PATHs...]
833
834       This command shows the entries that have changed since the last commit.
835
836       The output is formatted as follows:
837
838       · A status columns of four (or, with -v , five) characters. There are
839         either flags or a '.' printed, so that it's easily parsed by scripts
840         -- the number of columns is only changed by -q, -v -- verbose/quiet.
841
842       · The size of the entry, in bytes, or 'dir' for a directory, or 'dev'
843         for a device.
844
845       · The path and name of the entry, formatted by the option Displaying
846         paths.
847
848       The status column can show the following flags:
849
850       · Normally only changed entries are printed; with -v all are printed.
851         The command line option -v additionally causes the 'm' -flag to be
852         split into two, see below.
853
854       · 'D' and 'N' are used for deleted and new entries.
855
856       · 'd' and 'n' are used for entries which are to be unversioned or added
857         on the next commit; the characters were chosen as little delete (only
858         in the repository, not removed locally) and little new (although
859         ignored). See add and unversion.
860          If such an entry does not exist, it is marked with an '!' -- because
861         it has been manually marked, and for both types removing the entry
862         makes no sense.
863
864       · A changed type (character device to symlink, file to directory etc.)
865         is given as 'R' (replaced), ie. as removed and newly added.
866
867       · If the entry has been modified, the change is shown as 'C'.
868          If the modification or status change timestamps (mtime, ctime) are
869         changed, but the size is still the same, the entry is marked as
870         possibly changed (a question mark '?' is printed). See opt_checksum.
871
872       · The meta-data flag 'm' shows meta-data changes like properties,
873         modification timestamp and/or the rights (owner, group, mode);
874         depending on the -v/-q command line parameters, it may be splitted
875         into 'P' (properties), 't' (time) and 'p' (permissions).
876          If 'P' is shown for the non-verbose case, it means only property
877         changes, ie. the entries filesystem meta-data is unchanged.
878
879       · A '+' is printed for files with a copy-from history; to see the URL
880         of the copyfrom source, use -v twice.
881
882       · A 'x' signifies a conflict.
883
884       Here's a table with the characters and their positions:
885
886        *   Without -v    With -v
887        *     ....         ......
888        *     NmC?         NtpPC?
889        *     DPx!         D   x!
890        *     R  +         R    +
891        *     d            d
892        *     n            n
893        *
894
895       Furthermore please take a look at Status output coloring.
896

sync-repos

898        fsvs sync-repos [-r rev] [working copy base]
899
900       This command loads the file list from the repository. A following
901       commit will send all differences and make the repository data identical
902       to the local.
903
904       This is normally not needed; the use cases are
905
906       · debugging and
907
908       · recovering from data loss in $FSVS_WAA (/var/spool/fsvs ).
909
910       It is (currently) important if you want to backup two similar machines.
911       Then you can commit one machine into a subdirectory of your repository,
912       make a copy of that directory for another machine, and sync this other
913       directory on the other machine.
914
915       A commit then will transfer only _changed_ files; so if the two
916       machines share 2GB of binaries (/usr , /bin , /lib , ...) then these
917       2GB are still shared in the repository, although over time they will
918       deviate (as both committing machines know nothing of the other path
919       with identical files).
920
921       This kind of backup could be substituted by several levels of
922       repository paths, which get 'overlayed' in a defined priority. So the
923       base directory, which all machines derive from, will be committed from
924       one machine, and it's no longer necessary for all machines to send
925       identical files into the repository.
926
927       The revision argument should only ever be used for debugging; if you
928       fetch a filelist for a revision, and then commit against later
929       revisions, problems are bound to occur.
930
931       Note:
932           There's an issue in subversion, to collapse identical files in the
933           repository into a single storage. That would ease the simple backup
934           example, in that there's not so much storage needed over time; but
935           the network transfers would still be much more than needed.
936

update

938        ## invalid ## fsvs update [-r rev] [working copy base]
939        fsvs update [-u url@rev ...] [working copy base]
940
941       This command does an update on all specified URLs for the current
942       working copy, or, if none is given via -u, all URLs.
943
944       It first reads all changes in the repositories, overlays them (so that
945       only the highest-priority entries are used), and fetches all necessary
946       changes.
947

urls

949        fsvs urls URL [URLs...]
950        fsvs urls dump
951        fsvs urls load
952
953       Initializes a working copy administrative area and connects the current
954       working directory to REPOS_URL. All commits and updates will be done to
955       this directory and against the given URL.
956
957       Example:
958
959        fsvs urls http://svn/repos/installation/machine-1/trunk
960
961
962       For a format definition of the URLs please see the chapter Format of
963       URLs.
964
965       Note:
966           If there are already URLs defined, and use that command later
967           again, please note that as of 1.0.18 the older URLs are not
968           overwritten as before, but that the new URLs are appended to the
969           given list! If you want to start afresh, use something like
970
971            echo '' | fsvs urls load
972
973
974   Loading URLs
975       You can load a list of URLs from STDIN; use the load subcommand for
976       that.
977
978       Example:
979
980        ( echo 'N:local,prio:10,http://svn/repos/install/machine-1/trunk' ;
981            echo 'P:50,name:common,http://svn/repos/install/common/trunk' ) |
982          fsvs urls load
983
984
985       Empty lines are ignored.
986
987   Dumping the defined URLs
988       To see which URLs are in use for the current WC, you can use dump.
989
990       As an optional parameter you can give a format statement; p , n , r, t
991       and u are substituted by the priority, name, current revision, target
992       revision and URL. Note: That's not a real printf()-format; only these
993       and a few \ sequences are recognized.
994
995       Example:
996
997        fsvs urls dump '  %u %n:%p\n'
998          http://svn/repos/installation/machine-1/trunk local:10
999          http://svn/repos/installation/common/trunk common:50
1000
1001
1002       The default format is 'N:%n,P:%p,D:%t,%u\\n'; for a more readable
1003       version you can use -v.
1004
1005Version trunk:2078                1 AprC2o0m0m8ands and command line parameters(1)
Impressum