1Commands and command line parameters(1f)svCsommands and command line parameters(1)
2
3
4
6 fsvs - fast versioning tool
7
9 fsvs command [options] [args]
10
11 The following commands are understood by fsvs:
12
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)