Working collaboratively

Milestone 1

Project
Important

You must attend this lab in person and participate in the merge conflict activity to be eligible for the points for this milestone. Team members who are not in lab in person for this activity will not be eligible for these points, regardless of their contribution throughout the rest of the project.

Data science is a collaborative discipline. Pretty much no data scientist works alone, so neither should you! In this course you’ll collaborate with teammates on the project.

The first milestone of the project, today’s activity, will introduce you to the technical aspects of collaborating on a reproducible data science project that is version controlled by Git and hosted on GitHub in a repository shared by all teammates.

Yes, this means you and all of your teammates will be pushing to the same repository! Sometimes things will go swimmingly, and sometimes you’ll run into merge conflicts.

Note

The word “conflict” has a negative connotation. And, indeed, merge conflicts can be frustrating. But they serve to make sure no team member inadvertently writes another team member’s work. All changes that are in “conflict” with each other need to get resolved explicitly, with a commit message, which helps avoid haphazard overwriting.

Goals

The goals of this milestone are as follows:

  • Pick a team name
  • Collaborate on GitHub with your teammates and resolve merge conflicts when they inevitably occur
  • Discuss and write up your team contract
  • Start thinking about your project proposal

Teams

Name Team
Alex Brady 1_A
Daphne Gomez 1_A
Isabel Lehrman 1_A
Julian Orrego 1_A
Ashi Jain 1_B
Gabrielle Douglas 1_B
Meghna Bukkapatnam 1_B
Paola Abad 1_B
Alex Naper 1_C
Chuying Huo 1_C
Lauren Vandivier 1_C
Vincent Fowler 1_C
Chloe Miccolis 1_D
Emily Walsh 1_D
Sahil Choudhri 1_D
Sahith Kudaravalli 1_D
Alex Precourt 1_E
Connor Barritt 1_E
Krisha Patel 1_E
Siddarth Rama 1_E
Teal Uahwatanasakul 1_E
Alexa Mohajer 1_F
Jill Roberts 1_F
Naomi Holtzman 1_F
Sophia Fratta 1_F
Katherine Li 1_G
Larkin Woodard 1_G
Myra Han 1_G
Supta Das 1_G
Tsvetelina Milkova 1_G
Name Team
Campbell Raney 2_A
Lauren Blake 2_A
Lucy Herrick 2_A
Sahng-Won Lee 2_A
Bianca Dominguez 2_B
Jayden Kim 2_B
Maddie Goldner 2_B
Sam Karsch 2_B
Cat Gamard 2_C
Gabriela Zanforlin Mautner 2_C
Isabella Antonio 2_C
Katie Brandler 2_C
Devin Mulcrone 2_D
Elle Piper 2_D
Reagan Henderlite 2_D
Julia Simon 2_E
Nadine Fanous 2_E
Neha Jatla 2_E
Olivia Ares 2_E
Alexis Golart 2_F
Ashley Wilson 2_F
Lhamo Dixey 2_F
Mia Taubenblat 2_F
Rizban Worota 2_F
Gabrielle Nicoleau 2_G
Martina Yu 2_G
Melina Marjani 2_G
Oyinkansola Oduba 2_G
Tanya Wan 2_G
Name Team
Ava Strohmeyer 3_A
Esther Park 3_A
Fiona Xiao 3_A
Katie Maddock 3_A
Zijian Li 3_B
Jack Yi 3_C
Margaret Berei 3_C
Runzi Ma 3_C
Ryan Hamner 3_C
Owen Platt 3_D
Rebecca Fan 3_D
Reed Schoenfeld 3_D
Saira Nagda 3_D
Jessica Alvarez 3_E
Khang Huynh 3_E
Yeddailin Gonzalez 3_E
Zach Powery 3_E
Dhruv Rungta 3_F
Divya Subramanian 3_F
Issac Jung 3_F
Kellan Hepditch 3_F
Nyteeh Camara 3_F
Beren Berber 3_G
Holly Wilcox 3_G
Muskaan Amin 3_G
Shlok Banshal 3_G
Bria Maddox 3_H
Dadou Sabrina Thea Ikirezi 3_H
Elle Commerce 3_H
Sabina DiPietro 3_H
Charlie Chen 3_I
Elizabeth Farmer 3_I
Keith Buenrostro Brown 3_I
Patricia Perez Utra 3_I
Yinuo Tong 3_I
Isabella Lopez 3_J
Jayden Neidell 3_J
Rani Teddy 3_J
Shreya Karumuri 3_J
Name Team
Ezequiel Baltierra 4_A
Gema Granado 4_A
Julia Zheng 4_A
Nidhi Kolluri 4_A
Selin Bildirici 4_A
Allison Lulov 4_B
Cole Bonawitz 4_B
Fiona Loughran 4_B
Richard Zhou 4_B
kenzy paul 4_B
Akash Mishra 4_C
Ava Betanco-Born 4_C
Christian Linen 4_C
Jack McMahon 4_C
Aisha Ovando Fernandez 4_D
Jessica Brown 4_D
McKenna Adams 4_D
Micah Rodman 4_D
Hana Hafeez 4_E
Hanna Lavi 4_E
Luisa Mantilla 4_E
Thea Lapham 4_E
Avi Wagner 4_F
Hao Li 4_F
Sophia Shen 4_F
Vanessa Lin 4_F
Alyssa Guardado 4_G
Ananya Kamath 4_G
Aubrey Behling 4_G
Isha Saravanan 4_G
Name Team
Adrian Schmeichler Martinez 5_A
Bruce Cao 5_A
Jules Gates 5_A
Olivia Prusky 5_A
Tyler Drangula 5_A
Angel Sajous 5_B
Fiza Khan 5_B
Meera Khare 5_B
Shwe Win 5_B
Kate Westlake 5_C
Mia Wells 5_C
Nathan Vail 5_C
Nathaniel George 5_C
Samantha Lefkowitz 5_C
Kiki Henry 5_D
Sidd Amirneni 5_D
Swarajh Mehta 5_D
Vanessa Dare 5_D
Andrew Li 5_E
Cabot Boling 5_E
Rhea Chelar 5_E
Sam Bodensteiner 5_E
Aadesh Anchaliya 5_F
Isabel Ottensoser 5_F
Nathan Gaviser 5_F
Stella Stojanov 5_F
Alyssa Yang 5_G
Emerson Wiseman 5_G
Lily Samuels 5_G
Sandy Wu 5_G
Hyeonsu An 5_H
JP Gasparian 5_H
Lauren Keaney 5_H
Vicky Gorman 5_H
Ellie Armstrong 5_I
Emma Chua 5_I
Nikki Caparrelli 5_I
Stephanie Sensel 5_I
Name Team
Catalina Giraldo 6_A
George Fenimore 6_A
Maria Junaid 6_A
Robert Silzer 6_A
Xuerui He 6_A
Charlotte Roberts 6_B
Ian Opel 6_B
Leo Goldberg 6_B
Sarah Diaz 6_B
Clara Sun 6_C
Eileen Ma 6_C
Kinsey Allen 6_C
Skylar Altman 6_C
Carrington Jones 6_D
Hannah Graham 6_D
Kyle McCutchen 6_D
Vincent Hovsepian 6_D
Abhinav Meduri 6_E
Carolina Deus 6_E
Kate MacDonald 6_E
Lucas Sher 6_E
Sophie Brooks 6_E
Kelly Yin 6_F
Ruo Shi Yang 6_F
Sarah Hernandez 6_F
Violet Weber 6_F
Cassatt Boatwright 6_G
Emily Fleck 6_G
Jane Curry 6_G
Macy McPeters 6_G
Name Team
Breanna Garner 7_A
Dylan Patterson 7_A
Kyra Kozey 7_A
Rafael Mautner 7_A
Sharon Zlatnik 7_A
Abbie Lambert 7_B
Alexxandra Hoffmann 7_B
Caroline Felker 7_B
Youngwon Yoon 7_B
Ashley Park 7_C
Harrison Walley 7_C
Ivan Herrera 7_C
Sophie Brynes 7_C
Carmen Pastrana 7_D
Michael Baravarian 7_D
Riley Palmer 7_D
Tim Le 7_D
Brielle Widelo 7_E
Dan Jellinek 7_E
Kevin Edmonds 7_E
Mackenzie Sheehy 7_E
Mia DePaolo 7_E
Abby Perry 7_F
Dylan Kessler 7_F
Sofia Mukamal 7_F
Will Mayo 7_F
Bomin Kim 7_G
Emma Pophal 7_G
Phillips Moore 7_G
Selin Kumru 7_G
Alexis Ashley 7_H
Anya Deng 7_H
Celia Lawlor 7_H
Jessica Lawal 7_H
Avery Braithwaite 7_I
Brooke Li 7_I
Chelsea Nguyen 7_I
Gabriella Lozano 7_I
Sanjana Kalagara 7_I
Name Team
Clement Liu 8_A
Elly Ronald 8_A
Luciana Wei 8_A
Renzo Larrea 8_A
Ana Ramirez 8_B
Angela Chen 8_B
Ashley Gutierrez-Torres 8_B
Mia Rothschild 8_B
Michael Shirin-Stroh 8_B
Anna Karius 8_C
Aria Dwoskin 8_C
Christina Liu 8_C
Trisha Iyer 8_C
Ben Wu 8_D
James Li 8_D
Lucy Glynn 8_D
Maya Hoteit 8_D
Ben Kahne 8_E
Clare Lee 8_E
Marissa Rodriguez 8_E
Michael Li 8_E
Eliza Sirovich 8_F
Maddie Tsang 8_F
Mayah Ding 8_F
Rylee Lent 8_F
Akshara Krishna 8_G
Leena Rotondo 8_G
Nawra Roya 8_G
Seung Hyun Jin 8_G
Name Team
Anurag Anugu 9_A
Govind Gurnani 9_A
Millie Mak 9_A
Samantha Cohen 9_A
Leidi Salcedo-Urena 9_B
Luna Abadia 9_B
Mia Paz 9_B
Owen Thomas 9_B
Ryan Zaaiett 9_B
Alexandra Himmel 9_C
John Dong 9_C
Trevor Darr 9_C
Victoria Pulliam 9_C
Alisha Mittal 9_D
Isabella Fauber 9_D
Lauren Ingram 9_D
Sarah Pusser 9_D
Zishen Li 9_D
Aditi Ramesh Iyer 9_E
Ishaan Narsinghani 9_E
Jaden Riera 9_E
Sophie Pentz 9_E
Julia Williams 9_F
Raymond Adams 9_F
Sarah Fong 9_F
Suraj Chatoth 9_F
Aditya Baliga 9_G
Jay Shin 9_G
Leah Yu 9_G
Maria Hernandez San Vicente 9_G
Nya Williams 9_G
Clark Raustiala 9_H
Eric Chen 9_H
Gigi Enrico 9_H
Taylor Williams 9_H
Aissah Pierre Louis 9_I
Avery Hamlin 9_I
Javan Mayrand 9_I
Steven Duan 9_I
Name Team
Aidan Shen 10_A
Anthony Metayer 10_A
Ella Kirksey 10_A
Maddie Weiler 10_A
Christopher Tarro 10_B
Morgan Thompson 10_B
Thomas Hines 10_B
Zeynep Kosebalaban 10_B
Darren Li 10_C
Ella Andonov 10_C
Emma Xiong 10_C
Leigh Wooster 10_C
Cielo Medina 10_D
Drew Frank 10_D
Julia Ecker 10_D
Owen Ebner 10_D
Zoe Foose 10_D
Ashley Chaionn 10_E
Daelyn Edge 10_E
Jennifer Hu 10_E
Nayeli Reyes Rivera 10_E
Aissatou Diallo 10_F
Aretha Gao 10_F
Connor Leathe 10_F
Henry Belin 10_F
Samuel Kodish 10_F
Christiana Haynes 10_G
Major Richmond 10_G
Thomas Billings 10_G
Veronika Fragoso 10_G

Team name

Pick a team name. It can be straightforward, or it can be cheeky, but it must be SFW. Let your TA know your team name asap. Once everyone’s team names are in, your project repos will be created (give your TA a couple of minutes), and then you can continue with the rest of your task.

Merge conflicts

When you and your teammates work on the lines of code within a document and both try to push your changes, you will run into issues. Merge conflicts happen when you merge branches that have competing changes, and Git needs your help to decide which changes to incorporate in the final merge.

Our first task today is to walk you through a merge conflict! First, a bit of Git review:

  • Pushing to a repo replaces the code on GitHub with the code you have on your computer.
  • If a collaborator has made a change to your repo on GitHub that you haven’t incorporated into your local work, GitHub will stop you from pushing to the repo because this could overwrite your collaborator’s work!
  • So you need to explicitly “merge” your collaborator’s work before you can push.
  • If your and your collaborator’s changes are in different files or in different parts of the same file, git merges the work for you automatically when you pull.
  • If you both changed the same part of a file, git will produce a merge conflict because it doesn’t know how which change you want to keep and which change you want to overwrite.

Git will put conflict markers in your code that look like:

<<<<<<< HEAD 

See also: [dplyr documentation](https://dplyr.tidyverse.org/)   

======= 

See also [ggplot2 documentation](https://ggplot2.tidyverse.org/)  

>>>>>>> some1alpha2numeric3string4

The ===s separate your changes (top) from their changes (bottom).

Note that on top you see the word HEAD, which indicates that these are your changes.

And at the bottom you see some1alpha2numeric3string4 (well, it probably looks more like 28e7b2ceb39972085a0860892062810fb812a08f).

This is the hash (a unique identifier) of the render your collaborator made with the conflicting change.

Your job is to reconcile the changes: edit the file so that it incorporates the best of both versions and delete the <<<, ===, and >>> lines. Then you can stage and render the result.

Activity

Setup

  • Clone the project repo and open the about.qmd file.
  • Assign the numbers 1, 2, 3, 4, and 5 to each of the team members. If your team has fewer than 5 people, some people will need to have multiple numbers.

Let’s cause a merge conflict!

Our goal is to see two different types of merges: first we’ll see a type of merge that git can’t figure out on its own how to do on its own (a merge conflict) and requires human intervention, then another type of where that git can figure out how to do without human intervention.

Doing this will require some tight choreography, so pay attention!

Take turns in completing the exercise, only one member at a time. Others should just watch, not doing anything on their own projects (this includes not even pulling changes!) until they are instructed to. If you feel like you won’t be able to resist the urge to touch your computer when it’s not your turn, we recommend putting your hands in your pockets or sitting on them!

Before starting

Everyone should have the repo cloned and know which role number(s) they are.

Role 1

  • Go to about.qmd in your project repo. Change the [team name] to your actual team name.
  • Render the project by clicking on Render in the Build tab, commit (all changed files), and push.
Important

Make sure the previous role has finished before moving on to the next step.

Role 2

  • Change the team name to some other word.

  • Render the project by clicking on Render in the Build tab, commit (all changed files), and push. You should get an error.

  • Pull. Take a look at the document (about.qmd) with the merge conflict.

  • Clear the merge conflict by editing the document to choose the correct/preferred change.

  • Render the project by clicking on Render in the Build tab.

  • Click the Stage checkbox for all files in your Git tab. Make sure they all have check marks, not filled-in boxes.

  • Commit and push.

Important

Make sure the previous role has finished before moving on to the next step.

Role 3

  • Change the name of the first team member.
  • Render the project by clicking on Render in the Build tab, commit, and push. You should get an error.
  • Pull. No merge conflicts should occur, but you should see a message about merging.
  • Now push.
Important

Make sure the previous role has finished before moving on to the next step.

Role 4

  • Change the name of the first team member to something other than what the previous team member did.
  • Render the project by clicking on Render in the Build tab, commit, and push. You should get an error.
  • Pull. Take a look at the document with the merge conflict. Clear the merge conflict by choosing the correct/preferred change. Render the project by clicking on Render in the Build tab, commit, and push.
Important

Make sure the previous role has finished before moving on to the next step.

Role 5

  • Change the name of the rest of the team members and add descriptions for each person with the help of your team members. Role 5 should be the only one typing; the others should help verbally.
  • Render the project by clicking on Render in the Build tab and commit. Discuss as a team what you expect to happen when you hit push. Should there be a merge conflict error or not?
  • If there is a merge conflict, fix it. If not, push your changes.

Everyone

Pull, and observe the changes in your project.

Tips for collaborating via GitHub

  • Always pull first before you start working.
  • Resolve a merge conflict (render and push) before continuing your work. Never do new work while resolving a merge conflict.
  • Render, commit, and push often to minimize merge conflicts and/or to make merge conflicts easier to resolve.
  • If you find yourself in a situation that is difficult to resolve, ask questions ASAP. Don’t let it linger and get bigger.

Team contract

Go to your project repository and open contract.qmd. As the instructions suggest, pick a teammate to be the scribe. Discuss the prompts and write up your answers. Once done, click Render in the build tab, commit, and push.

Grading

We will evaluate the first milestone of your project based on your participation in this activity. Each team member who participates in the activity in person during the lab session will earn 5 points towards their project.