Automated Version Control


  • Version control is like an unlimited ‘undo’.
  • Version control also allows many people to work in parallel.

Setting Up Git


  • Use git config with the --global option to configure a user name, email address, editor, and other preferences once per machine.

Creating a Repository


  • git init initializes a repository.
  • Git stores all of its repository data in the .git directory.

Tracking Changes


  • git status shows the status of a repository.
  • Files can be stored in a project’s working directory (which users see), the staging area (where the next commit is being built up) and the local repository (where commits are permanently recorded).
  • git add puts files in the staging area.
  • git commit saves the staged content as a new commit in the local repository.
  • Write a commit message that accurately describes your changes.

Exploring History


  • git diff displays differences between commits.
  • git checkout recovers old versions of files.

Ignoring Things


  • The .gitignore file tells Git what files to ignore.

Remotes in GitHub


  • A local Git repository can be connected to one or more remote repositories.
  • Use OAuth via GitHub CLI or the SSH protocol to connect to remote repositories.
  • git push copies changes from a local repository to a remote repository.
  • git pull copies changes from a remote repository to a local repository.

Collaborating


  • git clone copies a remote repository to create a local repository with a remote called origin automatically set up.

Conflicts


  • Conflicts occur when two or more people change the same lines of the same file.
  • The version control system does not allow people to overwrite each other’s changes blindly, but highlights conflicts so that they can be resolved.

Open Science


  • Open scientific work is more useful and more highly cited than closed.

Licensing


  • The LICENSE, LICENSE.md, or LICENSE.txt file is often used in a repository to indicate how the contents of the repo may be used by others.
  • People who incorporate General Public License (GPL’d) software into their own software must make their software also open under the GPL license; most other open licenses do not require this.
  • The Creative Commons family of licenses allow people to mix and match requirements and restrictions on attribution, creation of derivative works, further sharing, and commercialization.
  • People who are not lawyers should not try to write licenses from scratch.

Citation


  • Add a CITATION file to a repository to explain how you want your work cited.

Hosting


  • Projects can be hosted on university servers, on personal domains, or on a public hosting service.
  • Rules regarding intellectual property and storage of sensitive information apply no matter where code and data are hosted.

Supplemental: Using Git from RStudio


  • Using RStudio’s Git integration allows you to version control a project over time.

Setting up a Python ProjectStructuring a ProjectAdding Pre-commit checksLicensing complianceGitHub CI: unit tests and linting


  • While there is often variation, most Python projects follow a similar structure for their code
  • Doing so is beneficial because it allows components of your code to be reused more easily by yourself and others
  • Testing can be ‘automatic’ rather than manual. This catches many issues before they become a problem - this is continuous integration
  • The concepts here can be used for all programming languages - not just Python - and are pretty much universally used by professional software developers

Collaborating - Branching and Pull RequestsForking a repositoryCreating a new branch with changesPushing a new branchAdd branch protection rules (requirements) in the base repositoryPull (Merge) RequestsKeeping up with upstream changes


  • git checkout -b branchname creates a branch that you can work on a set of changes
  • git checkout branchname switches between branches
  • Creating pull requests is the way most people work with Git and is good practice
  • Before pull requests can be merged, there must be no merge conflicts