\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename using-git.info @settitle using git @afourpaper @documentencoding UTF-8 @documentlanguage en @finalout @c %**end of header @dircategory Version Control @direntry * using git: (using git). Using the Git source control management @end direntry @copying Copyright @copyright{} 2013 Mattias Andrée @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @ifnottex @node Top @top Using Git @insertcopying @end ifnottex @titlepage @title Using Git @author by Mattias Andrée (maandree) @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @menu * Getting started:: * Introduction:: * GNU Free Documentation License:: @end menu @node Getting started @chapter Getting started @menu * Create a repository:: * Create an origin:: @end menu @node Create a repository @section Create a repository A repository is a directory under source control, normally your project you are working on. Create an empty directory and @command{cd} into it: @example mkdir MY_PROJECT cd MY_PROJECT @end example When you are inside the directory for the repository issus the git command to initialise the repository: @example git init @end example This command creates a directory namend @file{.git} inside the directory with all data git requires to operate on the repository. The next thing you want to do is to create a @file{.gitignore} file, it is used to keep track of with files that should be be included in the repository, unless overruled with a forced staging. A good base @file{.gitignore} content you probably always want to use is: @example _/ # It is a good idea to allow the directory _ to # contain temporary file you do not whant to stage. .* # Generally you probably do not want to include # hidden files. !.git* # But you do generally want to include files starting with .git, such as .gitignore. \#*\# *~ *.bak # And you do not want to include backup files. @end example Git parses @file{.gitignore} with wildcards, @code{#} for comments and @code{!} for inclusion rather than exclusion, latter entires override earlier entries. When you have create you @file{.gitignore} you are ready to stage it and make your first commit: @example git add .gitignore git commit -n 'first commit' @end example @node Create an origin @section Create an origin It is a good idea to create a backup repostory, so you do not lose your work on a disc failure, filesystem corruption accidental removal. You can such repostory for allowing collaboration with a command repository that the collaborators can all submit and fetch commits from. This repository is customarly called `origin'. And it is a bare repository, meaning that it only hold the data in the @file{.git} directory and cannot be used as the working directory. @example mkcd -p /srv/git/MY_REPOSITORY.git cd /srv/git/MY_REPOSITORY.git git init --bare cd - # Go back to your project respository git remote add origin file:///srv/git/MY_REPOSITORY.git git push -u orgin master # master is the bransh you are working in @end example It is standard to append @file{.git} to the end of the repository name when it is bare. To submit your changes to origin you can now use the command @command{git push}. To fetch updates others have made, use the command @command{git pull}. @node Introduction @chapter Introduction @menu * What is Git?:: @end menu @node What is Git? @section What is Git? Git is a version control system know for its lightning speed and being distributed. A version control system is a system for storing changes in a history tree and allow for multiple people to work on the same project without the risk of the code being too new to accept a submitted patch. When you are working it is important to keep track of changes so that you can find when edit step broke the system. But version control also lets you create branches, these are different versions of the same project being developed concurrently which lets your team implement features in parallel and merge them in into the mainline when stable. And other important feature of version control that can be used to tag releases of the code. If you have release a program and is sent a bug report you may want to test it one both the current version and the version the user used. @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texinfo @bye