Collaborative git
Joel Ross
Winter 2021
INFO 201
Today's Objectives
By the end of class, you should be able to
- Use git branches to track different versions of your code
-
Merge changes between branches
- Resolve merge conflicts
- Use git to collaborate with a team of programmers
- Host web sites with GitHub Pages
Quick Q&A Poll (15min):
Code for Today
FORK and clone this repo!
Using GitHub
edit files
staging area
git add
git commit
starter repo
your copy
git clone
your machine
fork
git push
Commit History
"First"
git commit -m "First"
"Second"
"Third"
"Fourth"
git commit -m "Second"
git commit -m "Third"
git commit -m "Fourth"
Git history has been a linear sequence of commits.
HEAD
Why Non-Linear?
-
What if we want to try something new and crazy without breaking code that we've already written?
-
What if we want to work on two different features simultaneously?
-
What if we want multiple people to work on the same code without stepping on each other's toes?
Branches
Branches allow for non-linear commits.
main
main
main
main
experiment
bugfix
experiment
experiment
Branch Commands
git branch
List available branches
git branch [my_branch]
Create a new branch called "my_branch"
git checkout [my_branch]
Switch to branch "my_branch"
git checkout -b [my_branch]
Create and switch to branch "my_branch"
git branch -d [my_branch]
Delete branch "my_branch"
Branch Practice!
-
Open the README.md file (in Atom)
-
Create and
checkout
a new branch called experiment -
Add another item to the end of the list
-
Add and commit your change
-
checkout
the main branch -
Add yet another item to the beginning of the list
-
Commit your change
-
Switch between the experiment and main branches (clicking on Atom in between). See the file contents changing?
Branches
main
main
experiment
experiment
HEAD
HEAD
HEAD
HEAD
git branch experiment
git checkout experiment
git commit
git commit
git checkout main
git commit
git checkout experiment
HEAD
HEAD
experiment
HEAD
Merging
We can
merge
two branches back together, producing a commit that contains the combined changes from both branches
main
main
experiment
HEAD
HEAD
Merging
git merge [other_branch]
Merges changes from other_branch into the current branch.
A new commit is created on the current branch containing the merged content.
Merging Practice
-
Make sure you are on the main branch
(usegit branch
to check; the current branch has a*
) -
Use
git merge
to merge the experiment branch into main branch.-
If you get dropped into vi, hit
:wq
(colon then w then q) to accept the message.
-
-
Check in Atom that the file now contains both sets of changes!
Merging Practice II
-
You should be on the main branch.
-
Create and
checkout
a new branch called danger -
On the danger branch, change the word "kittens" to "puppies". Remember to
commit
your change. -
checkout
the main branch again. -
Change the word "kittens" to something else that is pleasant.
commit
your change. -
Use
git merge
to merge the danger branch into main branch
-
DON'T PANIC
Merge Conflicts
A merge conflict is when two commits from different branches include different changes to the same code.
Git does not know which version to keep, so makes you choose.
Merge conflicts must be resolved manually
Conflicts are expected!
Resolving Conflicts (Atom)
In order to
resolve a conflict, you need to edit the file (code) so that you pick which version to keep.
git will add "code" where you need to make a decision:
Resolving Conflicts (R Studio)
In order to
resolve a conflict, you need to edit the file (code) so that you pick which version to keep.
git will add "code" where you need to make a decision:
<<<<<<< HEAD
# This is the code from the "local" version (the branch you merged INTO)
# a.k.a the version from the HEAD commit
message <- "I am an original"
lyric <- "I've got no strings to hold me down"
# There can be multiple lines that conflict, including lines being deleted
=======
# This is the code from the "remote" version (the branch you merged FROM)
message <- "I think I'm a clone now..."
# The lines need not be related in content, they've just changed in a way
# that git can't figure out which to keep!
>>>>>>> f292a3332aedc8df3e8e8cf22ca3debc214c6460
the two versions to pick from
a divider between the versions
end conflict area
git add .
git commit -m "Merge branch 'other'"
Resolving Conflicts
- Use
git status
to see which files have merge conflicts. Note that files may have more than one!
- Delete the
<<<<<<<
and=======
and>>>>>>>
!!
- Once you're satisfied that the conflicts are all resolved,
add
andcommit
your changes (the code you "modified" to resolve the conflict):
GitHub and Branches
Because GitHub just hosts normal repositories, GitHub has branches as well! These can (but need not) correspond with the branches on your local machine.
Remote Branch Cmds
git branch -a
List all branches (including remote ones)
git pull [remote] [branch]
Shortcut for
git fetch
then
git merge
git fetch
Import remote branches into local repo
Are still listed as "remote" branches that need to be merged
Can cause conflicts!
git push [remote] [branch]
Remote Branch Cmds
Upload commits to remote
Essentially has the remote branch merge (rebase) your changes.
git push [remote] --all
Push all branches
Branching Questions?
Multiplayer Git
Collaboration
Multiple people's local repositories can be linked to the same remote repository, allowing them to push and pull to the same central location.
Collaboration Demo
-
Partner up with a partner ("Howdy pardn'r")
-
One person should add the other as a collaborator
-
The added person will then need to clone their partner's repo on their machine
-
Remember to do this in a different folder!
-
Collaboration Demo
-
Partner: edit the README.md file so it includes a message to your partner (be nice)
-
add and commit your change as usual.
-
-
Me: create a new script partner.R that prints a message to your partner (be nice)
-
add and commit as usual.
-
-
Partner: push their changes to Github
-
Then Me: push their changes to Github
-
What happened?!
-
Collaboration Demo
-
Me: pull to merge in Person 1's message
-
Both people should confirm the changes are local!
-
-
Partner: push your changes to Github
-
Me: pull in Person 2's message and merger
-
You both should now have up-to-date code!
-
Collaboration Demo II
-
Me: edit the partner.R file so that it prints a different message. Change the existing line of code.
-
add and commit your change as usual.
-
-
Partner: edit the partner.R file so that it prints a different message. Change the existing line of code.
-
add and commit as usual.
-
-
Partner: push their changes to Github
-
What happened?
-
-
Then Me: push their changes to Github.
But they need to pull first...
git add .
git commit -m "Merge branch 'other'"
Resolving Conflicts
- Use
git status
to see which files have merge conflicts. Note that files may have more than one!
- Delete the
<<<<<<<
and=======
and>>>>>>>
!!
- Once you're satisfied that the conflicts are all resolved,
add
andcommit
your changes (the code you "modified" to resolve the conflict):
Make sure both partners have all the changes!!
GitHub Pages
A GitHub service that
hosts web pages (
.html
files) found in a repository's
gh-pages
branch.
# Make sure you are on the `master` branch
git branch
# Checkout a new gh-pages branch from here. This branch will
# have the same commits as `main` to this point
git checkout -b gh-pages
# Upload web site to GitHub
git push -u origin gh-pages
Visit published page at:
Github Pages Practice
-
Make sure you are on the main branch
- Make sure your
index.html
file is in the _root_ of the repository, and you have committed all of your changes. -
checkout
a new gh-pages branch -
push
the gh-pages branch to GitHub. View the web page at https://USERNAME.github.io/git_branch_practice -
switch back to the main branch
-
Change the
index.Rmd
file in some way, then re-knit. Commit your changes. -
switch back to gh-pages and
merge
from main -
push
the new changes to GitHub
NEVER EDIT CODE ON THE gh-pages BRANCH!!
ALWAYS SWITCH TO main TO EDIT
Action Items!
-
A2: COVID due Monday
-
Read: Programming Skills Ch 15-16 (required)
-
Be comfortable with Ch 1-12 + 18, 20
-
-
Read: Data Feminism: Chapter 4
Next: data visualization w/ ggplot
info201wi21-git-collaboration
By Joel Ross
info201wi21-git-collaboration
- 730