Untitled - MYY web server
Transcription
Untitled - MYY web server
Outline Who is behind Deveo? Introduction to Version Control Systems Basics of Git Demo Exercises Who is behind Deveo? Eficode in brief Founded in 2005, privately owned 80 employees Offices in Helsinki, Beijing, and Copenhagen ISO 9001:2008 certified management system AAA-credit rating How to manage source code? Why Version Control (VCS)? VCS manages changes to documents, source code, etc. – time machine VCS allows a group of people to simultaneously collaborate on the same files - feedback VCS may act as a disaster recovery strategy - backup Centralized VS Distributed Central repository on a server Send/receive changes from the central server Single point of failure Every developer has own mirror of repository Send/receive changes to own repository Continue working offline and share changes later Git is a Distributed VCS with an emphasis on speed - fast Speed Simple design Network independent Strong support for non-linear development Fully distributed Efficiently handles large projects Open source Git VS “other systems” Version 1 file A Version 2 1 file B Version 3 2 1 Snapshots – not Differences Version 1 Version 2 Version 3 file A file A2 file A3 file B file B file B1 snapshot Nearly every Git operation is local Git guarantees data integrity 74262eab53b5f3ee4d578e484436e1ca72c57625 working directory staging area git repository The three local states of Git checkout the sources stage files commit Installing and configuring Git http://progit.org/book/ch1-4.html $ git config --global user.name "Tair Assimov" $ git config --global user.email "tair.assimov@eficode.com" Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Initializing $ git init $ touch README $ git add README $ git commit -m 'initial project version' Basic Workflow: Cloning $ git clone https://emea.deveo.com/eficode/git/project $ git clone deveo@emea.deveo.com:eficode/git/project $ git clone /var/db/eficode/git/project Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Modify $ mate hello_git.rb $ echo "A Hello Git program" >> README #!/usr/bin/env ruby class HelloGit def initialize(git = '/usr/bin/git') @git = git end def to_s "Hello, from #{%x[#{@git} --version]}!" end end hello = HelloGit.new puts hello.to_s working directory staging area git repository Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Browse $ git status # On branch master # Changes not staged for commit: # # modified: README # # Untracked files: # # hello_git.rb no changes added to commit (use "git add" and/or "git commit -a") Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Stage $ git add hello_git.rb working directory # On branch master # Changes to be committed: # # new file: hello_git.rb # # Changes not staged for commit: # # modified: README staging area git repository Basic Workflow: Stage $ git add . working directory $ git status # On branch master # Changes to be committed: <- STAGED # # modified: README # new file: hello_git.rb staging area git repository Basic Workflow: Unstage $ touch temp.swp working directory $ git add . $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: temp.swp $ git reset HEAD temp.swp staging area git repository Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Save $ git commit working directory staging area git repository [master 1bfac9e] Descriptive summary of a commit 2 files changed, 17 insertions(+), 0 deletions(-) create mode 100755 hello_git.rb Hold on, what was that number? [master 1bfac9e] 1bfac9eacb671e7916b64c5680c37264e1413ac0 $ git log commit 1bfac9eacb671e7916b64c5680c37264e1413ac0 Author: Tair Assimov <tair.assimov@eficode.com> Date: Mon Apr 23 19:22:01 2012 +0300 Descriptive summary of a commit... Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Modify and Browse $ mate README $ git diff diff --git a/README b/README index 5710088..830c0c7 100644 --- a/README +++ b/README @@ -1 +1,2 @@ -A Hello Git program +A Hello Git program to print out version +of the Git binary. working directory staging area git repository Browse status log diff Create init clone Modify vim mate Basic workflow Save commit Stage add reset Sync push pull Basic Workflow: Stage and Commit $ git status # # # # On branch master Changes not staged for commit: modified: README $ git commit -a -m "Update README" [master 2b1e925] Update README 1 files changed, 2 insertions(+), 1 deletions(-) working directory staging area git repository More Git goodies… Ignoring files Ignoring files == Not tracking with Git Ignore temporary files, sensitive files Create .gitignore file in the root of the project Standard blob patterns work Ignoring files $ cat .gitignore # this is a comment *~ # ignore all files that end with tilde *.swp # ignore all files with .swp extension !t.swp # but track t.swp /tmp # ignore /tmp file or directory doc/*.txt # ignore doc/notes.txt, but not doc/server/arch.txt Removing files without Git $ rm README $ git status # Changes not staged for commit: # # deleted: README $ git add -u $ git status # Changes to be committed: # # deleted: README Removing files with Git $ git rm README $ git status # On branch master # Changes to be committed: # # deleted: README Removing files / Untracking $ git rm --cached README $ git status # On branch master # Changes to be committed: # # deleted: README # # Untracked files: # # README Moving files without Git $ mv README README.txt $ git status # On branch master # Changes to be committed: # # deleted: README # # Untracked files: # # README Moving files with Git $ git mv README README.txt $ git status # On branch master # Changes to be committed: # # renamed: README -> README.txt Viewing Commit History $ git log -p $ git log -stat $ git log --pretty=oneline $ git log --since=1.day $ git log --pretty=oneline --author=Tair --since=1.week Undoing things - Amending $ git commit -m 'initial commit’ $ git add forgotten_file $ git commit --amend Undoing things - Unmodifying $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: hello_git.rb $ git checkout -- hello_git.rb Browse status log diff Create init clone Modify vim mate Git remotes Save commit Stage add reset Sync push pull VCS allows a group of people to simultaneously collaborate on the same files - feedback Online project hosting Hosting tools streamline collaborative development Find, publish, and contribute to Open Source software Reliable, robust and backed up Deveo is a software development platform, which collects information into one, easily accessible place Version control Task management Continuous Integration Executive Documentation Project Manager Testing Communication Developers Demo Cloning existing repository $ git clone https://emea.deveo.com/.../git/repo Cloning into repo... remote: Counting objects: 10, done. remote: Compressing objects: 100% (7/7), done. remote: Total 10 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (10/10), done. Showing remotes $ git remote origin $ git remote –v originhttps://emea.deveo.com/.../git/repo (fetch) originhttps://emea.deveo.com/.../git/repo (push) another deveo@emea.deveo.com:eficode/.../git/repo Adding remote $ git remote add origin https://emea.deveo.com/.../git/repo $ git remote add upstream https://emea.deveo.com/.../git/repo Fetching and Pulling from remotes $ git fetch another From https://emea.deveo.com/.../git/repo * [new branch] $ git pull master -> another/master Pushing changes to remote $ git push origin master Removing and renaming remotes $ git remote rename another another_origin $ git remote another_origin origin $ git remote rm another_origin $ git remote origin Branching and Merging What is a Branch? Branch in Git is a lightweight movable pointer to one of the commits master commit 1 commit 2 commit 3 What if you create a new Branch? $ git branch feature master commit 1 commit 2 commit 3 feature Where are you now? HEAD master commit 1 commit 2 commit 3 feature Switch to a branch $ git checkout feature $ git checkout -b feature # creates a branch and switches to it master commit 1 commit 2 commit 3 feature HEAD Commit to feature branch $ git commit -a -m "New feature. Initial commit" master commit 1 commit 2 commit 3 commit 4 feature HEAD Checkout master $ git checkout master HEAD commit 1 commit 2 master commit 3 commit 4 feature Commit to master $ git commit -a -m "Master diverged" HEAD commit 1 commit 2 commit 3 master commit 5 commit 4 feature Getting Help http://progit.org support@deveo.com