a5f1c79f28 2008-05-20 stephan: <h1>HOWTO: creating a new repository</h1> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <p> The [/doc/tip/www/quickstart.wiki|quickstart guide] explains how a5f1c79f28 2008-05-20 stephan: to get up and running with fossil. But once you're running, what can a5f1c79f28 2008-05-20 stephan: you do with it? This document will walk you through the process of a5f1c79f28 2008-05-20 stephan: creating a fossil repository, populating it with files, and then a5f1c79f28 2008-05-20 stephan: sharing it over the web.</p> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: The first thing we need to do is create a fossil repository file: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil$ fossil new demo.fossil a5f1c79f28 2008-05-20 stephan: project-id: 9d8ccff5671796ee04e60af6932aa7788f0a990a a5f1c79f28 2008-05-20 stephan: server-id: 145fe7d71e3b513ac37ac283979d73e12ca04bfe 904ee40b93 2009-01-23 drh: admin-user: stephan (initial password is ******) a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: The numbers it spits out are unimportant (they are version ab5ab46206 2008-05-23 stephan: numbers). a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: Now we have an empty repository file named <tt>demo.fossil</tt>. a5f1c79f28 2008-05-20 stephan: There is nothing magical about the extension <tt>.fossil</tt> - it's a5f1c79f28 2008-05-20 stephan: just a convention. You may name your files anything you like. ab5ab46206 2008-05-23 stephan: ab5ab46206 2008-05-23 stephan: The first thing we normally want to do is to run fossil as a local server so ab5ab46206 2008-05-23 stephan: that you can configure the access rights to the repo: ab5ab46206 2008-05-23 stephan: ab5ab46206 2008-05-23 stephan: <verbatim> ab5ab46206 2008-05-23 stephan: stephan@ludo:~/fossil$ fossil ui demo.fossil ab5ab46206 2008-05-23 stephan: </verbatim> ab5ab46206 2008-05-23 stephan: ab5ab46206 2008-05-23 stephan: The <tt>ui</tt> command starts up a server (with an optional <tt>-port ab5ab46206 2008-05-23 stephan: NUMBER</tt> argument) and launches a web browser pointing at the ab5ab46206 2008-05-23 stephan: fossil server. From there it takes just a few moments to configure the 766bec08ce 2009-01-25 drh: repo. Most importantly, go to the Admin menu, then the Users link, and ab5ab46206 2008-05-23 stephan: set your account name and password, and grant your account all access ab5ab46206 2008-05-23 stephan: priviledges. (I also like to grant Clone access to the anonymous user, ab5ab46206 2008-05-23 stephan: but that's personal preference.) ab5ab46206 2008-05-23 stephan: ab5ab46206 2008-05-23 stephan: Once you are done, kill the fossil server (with Ctrl-C or equivalent) ab5ab46206 2008-05-23 stephan: and close the browser window. ab5ab46206 2008-05-23 stephan: ab5ab46206 2008-05-23 stephan: <blockquote> ab5ab46206 2008-05-23 stephan: Tip: it is not strictly required to configure a repository ab5ab46206 2008-05-23 stephan: this way, but if you are going to share a repo over the net then it ab5ab46206 2008-05-23 stephan: is highly recommended. If you are only going to work with the repo ab5ab46206 2008-05-23 stephan: locally, you can skip the configuration step and do it later if ab5ab46206 2008-05-23 stephan: you decide you want to share your repo. ab5ab46206 2008-05-23 stephan: </blockquote> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: The next thing we need to do is <em>open</em> the repository. To do so a5f1c79f28 2008-05-20 stephan: we create a working directory and then <tt>cd</tt> to it: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil$ mkdir demo a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil$ cd demo a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ fossil open ../demo.fossil a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: That creates a file called <tt>_FOSSIL_</tt> in the current a5f1c79f28 2008-05-20 stephan: directory, and this file contains all kinds of fossil-related a5f1c79f28 2008-05-20 stephan: information about your local repository. You can ignore it a5f1c79f28 2008-05-20 stephan: for all purposes, but be sure not to accidentally remove it a5f1c79f28 2008-05-20 stephan: or otherwise damage it - it belongs to fossil, not you. a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: The next thing we need to do is add files to our repository. As it a5f1c79f28 2008-05-20 stephan: happens, we have a few C source files laying around, which we'll a5f1c79f28 2008-05-20 stephan: simply copy into our working directory. a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ cp ../csnip/*.{c,h} . a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ ls a5f1c79f28 2008-05-20 stephan: clob.c clob.h clobz.c _FOSSIL_ mkdep.c test-clob.c a5f1c79f28 2008-05-20 stephan: tokenize_path.c tokenize_path.h vappendf.c vappendf.h a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: Fossil doesn't know about those files yet. Telling fossil about a5f1c79f28 2008-05-20 stephan: a new file is a two-step process. First we <em>add</em> the file a5f1c79f28 2008-05-20 stephan: to the repo, then we <em>commit</em> the file. This is a familiar a5f1c79f28 2008-05-20 stephan: process for anyone who's worked with SCM systems before: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ fossil add *.{c,h} a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ fossil commit -m "egg" a5f1c79f28 2008-05-20 stephan: New_Version: d1296b4a08b9f8b943bb6c73698e51eed23f8f91 a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: We now have a working repository! The file <tt>demo.fossil</tt> a5f1c79f28 2008-05-20 stephan: is the central storage, and we can share it amongst an arbitrary a5f1c79f28 2008-05-20 stephan: number of trees. As a silly example: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo$ cd ~/fossil a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil$ mkdir demo2 a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil$ cd demo2 a5f1c79f28 2008-05-20 stephan: stephan@ludo:~/fossil/demo2$ fossil open ../demo.fossil a5f1c79f28 2008-05-20 stephan: ADD clob.c a5f1c79f28 2008-05-20 stephan: ADD clob.h a5f1c79f28 2008-05-20 stephan: ADD clobz.c a5f1c79f28 2008-05-20 stephan: ADD mkdep.c a5f1c79f28 2008-05-20 stephan: ADD test-clob.c a5f1c79f28 2008-05-20 stephan: ADD tokenize_path.c a5f1c79f28 2008-05-20 stephan: ADD tokenize_path.h a5f1c79f28 2008-05-20 stephan: ADD vappendf.c a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: You may modify the repository (e.g. add, remove, or commit files) from a5f1c79f28 2008-05-20 stephan: both working directories, and doing so might be useful when working on a5f1c79f28 2008-05-20 stephan: a branch or experimental code. a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: Making your repository available over the web is trivial to do. We a5f1c79f28 2008-05-20 stephan: assume you have some web space where you can store your fossil file a5f1c79f28 2008-05-20 stephan: and run a CGI script. If not, then this option is not for you. If a5f1c79f28 2008-05-20 stephan: you do, then here's how... a5f1c79f28 2008-05-20 stephan: ab5ab46206 2008-05-23 stephan: Copy copy the fossil repository file to your web server (it doesn't a5f1c79f28 2008-05-20 stephan: matter where, really). a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: In your <tt>cgi-bin</tt> (or equivalent) directory, create a file a5f1c79f28 2008-05-20 stephan: which looks like this: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: #!/path/to/fossil a5f1c79f28 2008-05-20 stephan: repository: /path/to/my_repo.fossil a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: Make that script executable, and you're all ready to go: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> a5f1c79f28 2008-05-20 stephan: ~/www/cgi-bin> chmod +x myrepo.cgi a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: Now simply point your browser to a5f1c79f28 2008-05-20 stephan: <tt>http://my.domain/cgi-bin/myrepo.cgi</tt> and you should a5f1c79f28 2008-05-20 stephan: be able to manage the repository from there. a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: To check out a copy of your remote repository, use the a5f1c79f28 2008-05-20 stephan: <em>clone</em> command: a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: <verbatim> ab5ab46206 2008-05-23 stephan: stephan@ludo:~/fossil$ fossil clone \ a5f1c79f28 2008-05-20 stephan: http://MyAccountName:MyAccountPassword@my.domain/cgi-bin/myrepo.cgi a5f1c79f28 2008-05-20 stephan: </verbatim> a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: Note that you should pass your fossil login name and password (as set ab5ab46206 2008-05-23 stephan: via local server mode) during the clone - that ensures that fossil a5f1c79f28 2008-05-20 stephan: won't ask you for it on each commit! a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: A clone is a local copy of a remote repository, and can be opened just a5f1c79f28 2008-05-20 stephan: like a local one (as shown above). It is treated identically to your a5f1c79f28 2008-05-20 stephan: local repository, with one very important difference. When you commit a5f1c79f28 2008-05-20 stephan: changes to a cloned remote repository, they will be pushed back to the a5f1c79f28 2008-05-20 stephan: remote repository. If you have <tt>autosync</tt> on then this sync a5f1c79f28 2008-05-20 stephan: happens automatically, otherwise you will need to use the a5f1c79f28 2008-05-20 stephan: <em>pull</em> command to get remote changes and the <em>push</em> a5f1c79f28 2008-05-20 stephan: command to push your local commits to the remote repository. You must a5f1c79f28 2008-05-20 stephan: of course have authorization to commit changes (access is configured 766bec08ce 2009-01-25 drh: via the Admin/Users page mentioned above). a5f1c79f28 2008-05-20 stephan: a5f1c79f28 2008-05-20 stephan: You may always use the <em>server</em> or <em>ui</em> commands to a5f1c79f28 2008-05-20 stephan: browse a cloned repository. You can even edit create or wiki entries, a5f1c79f28 2008-05-20 stephan: etc., and they will be pushed to the remote side the next time you a5f1c79f28 2008-05-20 stephan: push data to the the remote.