1 / 137

Git Training

Git Training. Ilkka Turunen. Agenda for today. Who I am Who are you ? History and Basic concepts of Git Basic git commands and workflow Branching Advanced techniques Example workflows Submodules Subtree merge Archiving Authentication management and central repos Gitolite

keiki
Download Presentation

Git Training

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Git Training Ilkka Turunen

  2. Agenda for today • Who I am • Whoareyou? • History and Basic concepts of Git • Basic gitcommands and workflow • Branching • Advanced techniques • Exampleworkflows • Submodules • Subtreemerge • Archiving • Authentication management and centralrepos Gitolite Gitorious • Problem management • Questions & answers

  3. The history of GIT • Or how Linus made some magic • Session 1 - Background

  4. Linux kernel • Linux kernel was developed using BitKeeper • 2005 marked a change, BitKeeper revoked their free-usage license. • Linus Torvalds started developing a viable alternative

  5. Design principles Speed Simple design Strong support for non-linear development (thousands of parallel branches) (= Good support for branching and merging) Fully distributed (Committing code does not require access to a central server) Able to handle large projects like the Linux kernel efficiently (speed and data size) (13,5 million lines of code) • Distributed version control system (DVCS) • Nowadays maintained by Junio Hamano

  6. Git is notjust a hammer to bangnails with. It’s the wholetoolbox and garage. ” Quipfrom the FreeNEST Bug repository

  7. Traditionalcentralized VC model (CVS, Subversion) Central Repository Checkouts & Updates Commits & Adds

  8. Distributed version control system (git, hg) Local Local Remote repository Local Local Pulls & Clones Pushes Commits & Adds

  9. Advantages ”Repo server is down” Server’sdead

  10. Advantages continued • Changing branches can be done offline • Other revisions of a file can be obtained • Changes can be commited offline • Merging and Diff can be done offline

  11. Advantages • Git saves commits as snapshots, not as deltas => FAST reverts => History is alwaysstored with localrepository => diffcanbeperformedlocally

  12. Session 1 – Basic terminology and concepts Git training

  13. Git terminology ( 1/4 ) • Git Directory The .git directory that holds all information in the repository Hidden from view • Workingdirectory The directory in which .git resides Contains a "snapshot" of the repository Will be changed constantly eg. when reverting or branching Your changes will be made to this directory • Index Changes have to be added to the index from the working directory in order to be saved into a commit Could be thought of as a “loading bay” for commits

  14. Git terminology ( 2/4 ) • Branch An alternateline of development • Working copy The branchyouare in nowthatyoumakeyourchanges in • Master The defaultbranch of the repository

  15. Git terminology ( 3/4 ) • Commit Aset of changes that have been saved to the repository Can be reverted and even modified to some extent Identified by a hash of the changes it contains • Tag A certain commit that has been marked as special for some reason For example used to mark release-ready versions

  16. Git terminology ( 4/4 ) • HEAD The latest revision of the currentbranch Canbeused to referenceolderrevisions with operants HEAD^^2 == 2 revisionsbeforelatest HEAD^ == 1 revision beforelatest HEAD~3 == 3 latestrevisions HEAD^^2..HEAD == 2 revisionsbefore the latest to the latest • Origin Defaultname for a remoterepositorywhencloning an existingrepository

  17. Git object model – The SHA hash • Allgitobjectsarerepresented in the history of a project with a 40 characterhash Example: 678ce96d260a869eb54aef96c482958257e7d17d • The hash is a SHA1 hash of the contents of the object => Allhashesareunique => Identifycommits => Areused to checkif the filesarevalid => Identicalobjectscanbeidentifiedbecausetheywillhaveidenticalhashes

  18. Git object model - The objects • Everyobject in the historyconsists of threethingsorproperties Type Size Content • Git is builtaroundmanipulatingdifferenttypes of objects. Itcouldbethought of as it’sownfilesystem in yourcomputer’sfilesystem

  19. Git object model - Types • Blob A file • Tree A directoryorsub-directories and filesassociated with them • Commit A pointerthatmarks a single tree to what the projectlooked at a certainpoint in time. Contains author, timestamp, a pointer to the previous commit • Tag A way to mark a certaincommitspecial in someway. Usuallyused to mark

  20. Basic operations Git Training

  21. Basic operations • Initializing a repository • Basic workflow Commands: add commit revert reset remote push & pull & fetch

  22. Initializing a repository • Initializing an emptyrepository Go to wanteddirectory Write $ gitinit • Cloningfromexistingrepository Go to wanteddirectory $ gitclone URL • Remember to set yourusername and options gitconfig –globaluser.name ”my name” gitconfig –globaluser.emailmy@email.com

  23. Visualization of basicworkflow

  24. Basic Workflow with Git • EditFiles • Addthem to beversioned (stagingcommits) • Reviewchanges • Commitchanges to the repository Edit Stage Review Commit

  25. Basic Workflow with Git • EditFiles • Addthem to beversioned(stagingcommits) • Reviewchanges • Commitchanges to the repository Edit Stage Review Commit

  26. Statingcommits (gitadd) • Adds your files to the index so that they are ready to be committed • Only added files can be committed • You can add individual files or all $ git add . $git add filename $ git add part/filename

  27. Assigment 1: Let’screate a file • Create a file that has your first name in it. Call it 'name' or whatever you want • Make Git track your file (stage the change)

  28. Basic Workflow with Git • EditFiles • Addthem to beversioned (stagingcommits) • Reviewchanges • Commitchanges to the repository Edit Stage Review Commit

  29. Git status • Showsthe branchyouare on • Showsstagedcommits (filesadded to the index) • Filescanstillberemovedfrom the index • Usage: $ git status • Ifthereareanyfilesthatneedremovingfrom the index $ gitreset HEAD <filename> Unstagesfilefromcurrent HEAD

  30. Basic Workflow with Git • EditFiles • Addthem to beversioned (stagingcommits) • Reviewchanges • Commitchanges to the repository Edit Stage Review Commit

  31. Commit • Adds your changes to your local repository Only changes added to the index will be notified => Only added files will be versioned • Opens a dialog where you can insert a commit message • Commit messages consists of two parts: One short line describing the commit in general Longer more detailed description about the commit • Short and long description are separated by a newline • Only the short description is required • Empty commit message will cancel the commit • Lines beginning with # are regarded as commits • You can view the commits in a repository by using:$ git log

  32. Git gui in windows

  33. Usage • $ gitcommit Opensup a texteditor for you to change the commitmessage Good to reviewallchanges in thisstagetoo • When you have added all the files you want, you can commit them to the repository using • $ git commit -m "commit message“ Inserts a commit message straight away, does not open an editor

  34. Example of a commitmessage short description on first line more detailed description of your patch, which is likely to take up multiple lines. Separatedby a /n

  35. A1: Committingmorechanges • Commit your previously staged changes • Add your last name to the file. Add it to a new line Make Git store the updated file • Add your middle name to the file. Add it to a new line Make Git store the updated file • Verify that your commits have been stored

  36. Assignment 1: answer • $ gitinit<add your first name to the file> • $ gitadd name • $ gitcommit -m "Added first name"<add your last name to the file> • $ gitadd name • $ gitcommit -m "Added last name"<add your middle name to the file> • $ gitadd name • $ gitcommit -m "Added middle name“ • $ git log

  37. Comparingdifferencesbetweenfiles • Git makes heavy use of *NIX software calleddiff • Usage $ diff <file1> <file2> • Sometimesyouneed to knowaboutwhatchangeshaveoccured in a filebetweentworevisions $ gitdiff <startcommit>..<endcommit> -- file E.g. $ gitdiff HEAD^^..HEAD^ -- index.php

  38. Revert You can undo commits by using revert Revert undoes a single commit and leaves other commits intact This means that you can revert a change that broke something, but reverting it doesn't affect commits made after the "faulty commit" Adds a commit that undoes the given commit usage example:$ git revert <commit-id>  

  39. Revert

  40. Assigment 2: Differences • View the difference between your second and third commit in the last assignment. • Revert the second commit in your repository, so that you end up with a file that contains only your first and middle name. • Add your mother's maiden name to the file. DO NOT COMMIT. Realize that this is a mistake and restore the state of the file the last commit

  41. Assigment 2: Answers • $ gitdiff <id of the second commit> <id of the third commit> • $ gitrevert <id of the second commit> • $ gitadd name • $ git reset HEAD name

  42. Working with remotes Git training

  43. Remote • Remotes are remote git repositories • You can pull and push changes to remote repositories • You can also fetch branches from the remote repository • Remotes have to be added by using:$ git remote add <name> <url> • You can list all remotes with $ git remote • You can list details about a specific remote with $ git remote show <name>

  44. Creating a central repository • Whiletechnicallyanyrepositorycanbeused as a centralrepository, it is sometimesbetter to create a ”bare” repo to act as a centralunit Ifyouuse a fullgitrepository as a central repo, youwillgeterrors • Barerepositoriescontain just the contents of the .gitfolder, and no workingdirectory • Theycannotbelocallymodified Insteadallchangesmustbepushed to them • Creation of a bare repo: $ gitinit--bare

  45. Cloning remote repositories • Youcaneasilycloneremoterepositories with git • Everyclone is always a full copy of the remoterepository => Full backuptooifpushcomes to shove • Usage: $ gitclone <url> The remoterepository is automaticallycalledorigin To usesomethingelse as a name for the origin, use $ gitclone –o <name> <url>

  46. Assignment 3: Create a remoterepository & tworemotesthatuseit as origin • Create a new folder Create a headlessrepositorythere • Createanother new folderelsewhere Clone the firstrepository • Createanother new folderelsewhere Add the firstrepository as a remoterepository (= don’tcloneit)

  47. Assignment 3: Answers $ mkdirnewrepo $ cd newrepo $ gitinit--bare $ cd .. $ mkdir local1 $ cd local1/ $ gitclone ../newrepo $ cd .. $ mkdir local2 $ cd local2/ $ gitinit $ gitremoteaddremote ../newrepo

  48. Pushing changes Sends your changes from your current branch to a remote repository If the repository has changed since you last pulled from it you will be shown an error and you have to pull and merge the changes before you can push There might be conflicts! The error message usually is something like “no fast-forward commits” The changes will be taken from your current branch by default Usage: $ git push <remote name> <branch on remote> If you are in a cloned repo you need not specify remote names or branches unless encountered with an error If you are on a repo with an added remote you need to specify

  49. Pulling changes from remote Similiar to push, but the other way around Pulls changes from the remote to the current branch If any changes have been made locally to a file that has changed at the remote end, this causes a conflict Conflicts need to be resolved by editing the conflicted files After the conflicted file has been fixed, commit your changes and then push to the remote Git pull tries to merge conflicts automatically Usage $ git pull <remote-name> <remote-branch> If you are using a cloned repo, you don’t need to specify a remote name or branch If you use an added remote you need to remember to specify both

More Related