Practice with branches, fetches, merges, and pushes
code/01_make_output1.R
- generates random numbers
- saves numbers as a
.rdsobject inoutput/folder
code/02_render_report.R
- renders
report.Rmd
report.Rmd
- reads random numbers generated by
code/01_make_output1.R - makes three histograms
Assign one partner to be User A and one partner to be User B.
User A should download and unzip the project files. If needed, move the files/directory to a desired location on User A's computer either using the command line or a file browser.
Once the files are in the desired location, confirm that User A can build the report by executing make.
- If the report does not build, correct code until it builds correctly
User B does not need to download and unzip the project folder because they will download it in a later step from User A's GitHub.
User A should initialize a local git repository.
- Use
git initto initialize a git repository in your project directory folder - Appropriately use
git status,git add, andgit committo create your first commit. The commit should include:- all contents of the
codedirectory report.RmdREADME.mdMakefile.gitignore- the
outputdirectory (i.e., theoutput/.gitkeepfile)
- all contents of the
User A should create a GitHub repository using the following steps.
- Log in to GitHub and create an empty GitHub repository.
- be sure to select the option not to add a README nor a license.
- choose any name for the repository you like
- User A uses
git remote add origin git@github.com:<user_a_github_name>/<user_a_repo_name>to add User A's GitHub repository as a remote of User A's local repository namedorigin.
- replace
<user_a_github_name>and<user_a_repo_name>with User A's GitHub user name and GitHub repository name, repsectively - be sure to use the "ssh" style syntax for adding a remote and not "https". I.e., your command should be
git remote add origin git@github.com:...and notgit remote add origin https://github.com/.... - You can confirm what web address was used to add the remote by executing
git remote -v. - If the output ofgit remote -vshows thatoriginpoints tohttps://github.com/<user_a_github_name>/<user_a_repo_name>, then User A should remove the originremoteusinggit remote remove origintry Step 2 again.
- Use
git push origin <your_branch_name>to push User A's local repository to GitHub.
<your_branch_name>is probablymain, but it may bemasterfor some of you
- Refresh the web page for User A's GitHub repository's to confirm that the push was successful.
User B should now fork and clone User A's repository on GitHub using the following steps.
- User B should navigate to
https://github.com/<user_a_name>/<user_a_repo>and click "Fork" to create a fork of User A's repository.
- replace
<user_a_name>with User A's GitHub user name - replace
<user_a_repo>with User A's GitHub repository name - Recall that this creates a copy of User A's GitHub repository on User B's GitHub.
- User B should use
cdin their terminal to navigate to a directory where they wish to download User A's repository. - User B should execute
git clone git@github.com:<user_b_name>/<user_b_repo>to clone the repository.
- be sure to use the
git@github.com:<user_b_name>/<user_b_repo>syntax and nothttps://github.com/<user_b_name>/<user_b_repo>syntax.
- The
git clonecommand will download a folder called<user_b_repo>into your current working directory. User B should confirm that a folder called<user_b_repo>was added to the current working directory of their terminal.
- E.g., use
lsto view the contents of your current working directory. You should see a directory called<user_b_repo>
- Use
cd <user_b_repo>to change your working directory to this directory. - Use
git remote -vto confirm that the remote was set up properly.
User B will now make a new branch and make updates to User A's repo on that branch. User B should complete the following steps:
- Create and checkout a new branch called
binomialby executinggit checkout -b binomial.
- recall that this simultaneously creates and checks out a new branch called
binomial - confirm that User B has switched to the new branch by executing
git branch- you should see a star next to
binomial
- you should see a star next to
- Add the following lines to
code/01_make_output.R(ignore the lines with back ticks):
set.seed(4)
random_numbers4 <- rbinom(100, 1, 0.25)- Add additional lines of code to save
random_numbers4object into theoutputfolder. - Confirm that
random_numbers4gets created and saved properly (e.g., by runningmake random_numbers). - Add a few lines of code to
report.Rmdto read inrandom_numbers4.rdsand then add a new section toreport.Rmdcalled "Random numbers 4"
- the contents of the section should be exactly the same as the other sections
- e.g., User B can copy/paste the "Random numbers 3" section and appropriately modify its contents
- Confirm that User B can build the report (e.g., by executing
make report.html) - Once User B is confident that
report.htmlis building properly, they should appropriately usegit addandgit committo make a new commit along thebinomialbranch that includes updates to bothcode/01_make_output.Randreport.Rmd
- include a meaningful commit message
- Push the
binomialbranch to GitHub.
git push origin binomial
- Submit a pull request to User A's repository.
- the pull request should request that User B's
binomialbranch be merged into User A'smainbranch.
User A will now fetch the code submitted by User B, test it out, and eventually merge it into their main branch, thereby closing the pull request.
- User A should add User B's repository as a remote.
git remote add <user_b_remote_name> https://github.com/<user_b_name>/<user_b_repo>- in this case, it's OK to use the
https://syntax, because User A does not need to push to User B's repository. - "ssh"-style syntax would also be fine here
- in this case, it's OK to use the
- replace
<user_b_remote_name>with whatever you would like to call this remote - replace
<user_b_name>with User B's GitHub user name - replace
<user_b_repo>with User B's GitHub repository name
- User A should
fetchfrom User B's repository.
git fetch <user_b_remote_name>- Recall that this command downloads the contents of User B's repository, but does not yet put them on any of User A's local branches.
- User A should create and checkout a new branch named
binomialfrom the<user_b_remote_name>/binomialbranch.
git checkout -b binomial <user_b_remote_name>/binomial- Recall that this creates a new branch in User A's repository called
binomialthat looks exactly like the branchfetch'ed from User B's remote.
- User A should test out the code on the
binomialbranch.
- E.g., confirm that the report builds properly when you execute
make - If the code does not work, User A should make corrections to the code and commit those changes to their
binomialbranch.
- When User A is satisfied that the code works as expected, they should merge the
binomialbranch intomain.
git checkout maingit merge binomial
- User A should push the updated
mainbranch to GitHub.
git push origin main- Both users should now see User B's pull request as "merged" on GitHub.
- User A should create and checkout a new branch called
geometric.
git checkout -b geometric- Recall that this simultaneously creates and checks out a new branch called
geometricin User A's local repository.
- Add the following lines to
code/01_make_output.R(ignore the lines with back ticks):
set.seed(5)
random_numbers5 <- rgeom(100, 0.25)- Add additional lines of code to save
random_numbers5object into theoutputfolder. - Confirm that
random_numbers5gets created and saved properly (e.g., by runningmake random_numbers). - Add a few lines of code to load
random_numbers5.rdsinreport.Rmdand add a new section toreport.Rmdcalled "Random numbers 5"
- the contents of the section should be exactly the same as the other sections
- e.g., User A can copy/paste the "Random numbers 3" section and appropriately modify its contents
- Confirm that User A can build the report (e.g., by executing
make report.html) - Once User A is confident that
report.htmlis building properly, they should appropriately usegit addandgit committo make a new commit along thegeometricbranch that includes updates to bothcode/01_make_output.Randreport.Rmd
- include a meaningful commit message
- User A should merge the
geometricbranch intomain.
git checkout maingit merge geometric
- User A should push both the
geometricandmainbranches to GitHub
git push origin geometricgit push origin main
- User B should add a remote called
upstreamthat points to User A's GitHub repository.
git remote add upstream https://github.com/<user_a_name>/<user_a_repo>- in this case, it's OK to use the
https://syntax, because User B does not need to push to User A's repository. - "ssh"-style syntax would also be fine here
- in this case, it's OK to use the
- User B should
fetchfrom theupstreamremote and mergeupstream/mainintomain
git fetch upstream- Recall that this downloads the contents of User A's repository (i.e., the
upstreamremote) to User B's computer; however, it does not add User A's commits/branches to User B's local branches.
- Recall that this downloads the contents of User A's repository (i.e., the
git checkout main- User B needs to be on their
mainbranch to merge in changes from User A's GitHub repository.
- User B needs to be on their
git merge upstream/main- Recall that this will update User B's local files on the
mainbranch to look like User A's files from GitHub. - To confirm, User B could look in
report.Rmdand locate therandom_numbers5-associated code.
- Recall that this will update User B's local files on the
- User B should
pushtheirmainbranch toorigin.
git push origin main
You should submit a text entry that contains a link to User A and User B's GitHub repositories. Example:
User A: https://github.com/userA/repo
User B: https://github.com/userB/repo
If you have time, reverse roles of User A and B and repeat the exercise. However, you should not delete the GitHub repository associated with the first run through of the exercise, as you will be graded based on that repository. Make a new repository that has a different name than the one you submitted to Canvas.