2014 Macadmins

2014 Macadmins

GIT FOR SYSTEM ADMINS JUSTIN ELLIOTT PENN STATE UNIVERSITY 1 WHAT IS VERSION CONTROL? • Management of changes to documents like source code, scripts, text files • Provides the ability to check documents in and out of a versioning system • Version Control System (VCS) • Source Code Management (SCM) 2 WHY SHOULD YOU USE IT? • Enables you to easily back out of mistakes • Removes the risk of updating your scripts and code • Excellent for collaboration with others • Greatly enhances your ability to be agile and move quickly with scripts and coding. 3 GIT VERSUS SUBVERSION • Lightning fast! Checkouts are MUCH faster • Clients have the full repo • Distributed versus centralized • No need for constant network access • Easier to ignore files and edit other properties • Git easily handles renaming and moving files • Branching and Merging is much easier in Git 4 GIT: A GREAT SCM TOOL • Extremely fast performance • Excellent data integrity • Git checksums everything (SHA-1) • Easy to learn and start small 5 GIT OVERVIEW • Git is distributed • All clients have the full repo • Changes are applied to local repo first • Backups are everywhere • Each member of your team has a local copy 6 GIT TERMINOLOGY • Repository • Working Directory • Staging Area • Remote 7 GIT FILE CLASSIFICATIONS • Tracked • Already in the repo, Git is watching it • Ignored • Can exist locally, not in repo and git ignores it • Untracked • What's not tracked or ignored 8 GIT FILE STATES • Modified • Is tracked, changed but not yet committed • Staged • Modified filed marked to go into next commit • Committed • Safely stored in the repo 9 BASIC GIT WORKFLOW Working Directory Staging Area Repository 10 HOW TO INSTALL GIT • Download from http://git-scm.com/ downloads • OS X: Terminal.app • Windows: Git Bash • Embedded with many Git GUI client apps 11 CONFIGURING GIT • $ git config • Contains items such as name, email, editor, diff tool 12 CONFIGURE LINE ENDINGS • End of line characters differ based on client OS • OS X and Linux use one invisible character • LF (Line Feed) • Windows uses two invisible characters • CR (Carriage Return) + LF (Line Feed) • Embrace the native line endings for each OS 13 LINE ENDING MODES • core.autocrlf true • Use for cross platform projects on Windows clients • core.autocrlf input • Use for cross platform projects on OS X clients • core.autocrlf false • Use only on single platform projects 14 LINE ENDINGS ON OS X Enable auto convert CRLF to LF: 15 LINE ENDINGS ON WINDOWS Enable auto convert to LF on Windows by using git config to set core.autocrlf to true: 16 CREATE A REPOSITORY • $ git init ProjectName.git • Initializes a new and clean repository in new directory • $ git clone <repoURL> <directory> • The process of copying an existing Git repository locally to your computer • Copies the entire repository history and file revisions 17 STATUS OF FILE CHANGES • How do I know what has changed? • $ git status • Status reports different states • Untracked • Modified • Staged 18 IGNORING FILES • Some files should never reside in the repo • The .gitignore file solves this • Specify file names, directory paths to ignore • Supports Wildcards *NotForRepo*, *.dmg 10.9.4-Lab-Image.dmg LargeDataFile-NotForRepo.db 19 ADDING FILES THE REPO • Adding files are “staged” • Why not just directly commit the changes? • git add -v <file/folder_name> • git add -v . • git add -A 20 UNSTAGING FILES • File not yet tracked but staged: • $ git rm --cached NewFile.txt • Files already tracked in repo, revert to previous • $ git reset HEAD FileName.txt 21 COMMITTING CHANGES • This process saves the revisions made to the repository • Commit often - You will thank yourself later! • Or else … Larger changes are much harder to pick apart and revert back to! • Each commit should encapsulate a single fix* • $ git commit -m <commit_message> 22 VIEWING DIFFS • Commits are all about what is different • Viewing the differences • $ git diff <FileName> • GUI Apps • Kaleidoscope, FileMerge, Changes.app, etc. 23 VIEWING COMMIT LOGS • $ git log • $ git log -p -2 • Lists changes in last two commit entries 24 BRANCHES • “master” is the default branch • Merging of branches is where Git excels • Help to separate lines of development • “Git Flow” is a popular branching model • Ex: Master, Hotfix, Development, Feature, Release 25 BRANCHES • $ git checkout master • Create and switch to new branch • $ git checkout -b <branch> • Delete branch • $ git branch -d <branch> 26 HEAD REFERENCE • HEAD is a reference to latest commit in branch OR a specific commit • What does "detached HEAD" mean, and why should I care? • Occurs when you check out a specific commit in a branch versus the latest commit of branch 27 COMMAND LINE DEMO • Create Repo • Review Logs • Create .gitignore • View Diffs • Add Files • Checkout commit • Commit Changes 28 REMOTE REPOS • Local repo on your client only • Remote is a Git host to push to • You clone from remotes 29 REMOTE REPOS • Network Based • SSH • HTTPS • Git Protocol (daemon) 30 SELF-HOSTED REPOS • SSH • Enable SSH, create “bare” repository on server • Atlassian Stash • Enterprise GitHub • GitLab 31 REMOTE REPOS • 3rd Party • GitHub, BitBucket, Google Code • CodeSpaces, SourceRepo • Assembla, Gitorious • git.psu.edu (For Penn Staters) • And possibly more, I’m sure… 32 CLONING A REPOSITORY • The process of copying an existing Git repository to your computer • A cloned repo includes the entire file history changes and commit messages • Git clone command example: • $ git clone https://server.edu/RepoName.git 33 PUSHING CHANGES • $ git push origin master • Push (upload) the ‘master’ branch to the ‘origin’ remote host 34 GUI CLIENTS • http://git-scm.com/downloads/guis • GitHub (OS X and Windows) • SourceTree (OS X and Windows) • Tower (OS X) 35 BASICS OF GITHUB DEMO • Create Repo • Commit • Create .gitignore • View Diffs • Add Files • Review Logs 36 SOURCETREE • Integrated support for Git hosting services • GitHub, BitBucket, Kiln, Stash • Helps to simplify more complex tasks • Decent UI 37 SOURCETREE DEMO • Create repo • Review Logs • Create .gitignore • View Diffs • Add files • Create Branch • Commit changes • Merge Branch 38 LESSONS LEARNED • Start small • Pick just one project to manage with Git • Use remotes when ready • GitHub, BitBucket, SSH host 39 LESSONS LEARNED • Take the time to write good commit messages • There will be a time when you need to search your commit messages and it will really help you out • Be nice to your future self • “Where / when / how did I fix that issue?” 40 GIT COMMAND LINE HELP • $ git help • $ git help <command> 41 RESOURCES AND TRAINING • Official Git Site • http://git-scm.com • Git Cheat Sheets • Git Pro Book 42 RESOURCES AND TRAINING • http://try.github.com • http://atlassian.com/git • O’Reilly • “McCullough and Berglund on Mastering Git” 43 Q & A Justin Elliott jelliott [at] psu.edu ! @justindelliott 44 THANK YOU. Justin Elliott jelliott [at] psu.edu ! @justindelliott 45.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    45 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us