fixed filenames returned by flist
[reposerve] / README.md
1 Reposerve
2 =========
3
4 About
5 -----
6 Reposerve is a way to serve code repositories, in a very simple and limited
7 push/pull fashion, to machines on which it's not possible (or not practical) to
8 run a full version control system.
9
10 The original reason for writing this, is to serve git repos from my GNU/Linux
11 computer, to my MS-DOS retro-pc.
12
13 The advantages of using reposerve instead of something more generic, such as ftp,
14 scp, rsync, or a distributed filesystem are:
15
16    - After initial setup, it syncs with a single `repo pull`/`repo push` command.
17    - It only transfers modified files, which is mainly useful to avoid triggering
18      full-rebuilds on every sync, but also reduces the transfer time over slow
19      links.
20    - It only handles files which are explicitly put under version control on the
21      server-side.
22    - It automatically handles full directory trees.
23    - It automatically handles DOS filesystem capitalization and filename
24      restrictions.
25
26 License
27 -------
28 Copyright (C) 2020 John Tsiombikas <nuclear@member.fsf.org>
29
30 This program is free software. Feel free to modify, and/or redistribute it under
31 the terms of the GNU General Public License version 3, or at your option any
32 later version published by the Free Software Foundation. See COPYING for
33 details.
34
35 Usage
36 -----
37 On the server side, assuming you wish to serve a git repository which resides in
38 `/tmp/foorepo`, just run `reposerve /tmp/foorepo`. Multiple instances of reposerve
39 can run at the same time, if you wish to serve multiple repositories at once.
40 Repositories are identified by the last part of the path, or by an arbitrary
41 name passed with the `-id` option.
42
43 On the client side, to clone a repository for the first time run: `repo clone
44 <server>:foorepo`. The `<server>` part can be an IP or hostname for TCP/IP
45 transport, or it can be a serial port (e.g. `ttyS0` or `COM1`). Files which
46 cannot be created on the client side (due to filename restrictions for instance)
47 will be renamed if possible, and a warning will be printed. Pushing
48 modifications of renamed files is handled correctly, using the original name.
49
50 To grab the latest changes for an existing repository, simply run `repo pull`.
51 And to push changes back to the server, run `repo push`.
52
53 Run with `-h` for a complete list of options.
54
55 Build
56 -----
57
58 ### Reposerve (server)
59 Dependencies:
60    - libgit2: https://libgit2.org
61
62 Install the dependencies and type `make` inside the `server` directory to build.
63
64 ### Repo client for DOS
65 Dependencies:
66    - Watt-32 TCP/IP implementation for DOS (optional): http://www.watt-32.net/
67
68 To build without TCP/IP support and avoid the dependency to Watt-32, add
69 `-DNOTCP` to the `Makefile`. Otherwise you'll need to install Watt-32, and make
70 sure the `watt32path` variable in the `Makefile` points to wherever you
71 installed it (default: `C:\watt`).
72
73 Make sure DJGPP is installed, and it's in the path, then simply type `make` from
74 the `client` directory.