22 Git
22.3 Use SSH
Recently, GitHub deprecated basic passwords for authentication so my
recommendation is to use SSH throughout. See
Happy Git With R’s SSH keys
introduction. Then when
you grab links to clone, eg. the WEEL’s ewc project, use the format
git@gitlab.com:WEEL_grp/ewc.git
and not https://gitlab.com/WEEL_grp/ewc.git
22.4 .gitignore
22.4.1 Include one file in an ignored folder
Use a wildcard *
to exclude everything in a folder and include the file with !
. The wildcard should be specified exactly on the folder, not the larger directory. In the example below, we ignore everything in the data/derived-data
folder, not just the data/
folder.
Eg. in file .gitignore
:
.Rproj.user
.Rhistory
.RData
.Ruserdata
data/raw-data/
data/derived-data/*
!/data/derived-data/output.Rds
22.6 Blame and history
Git Blame and Git History can be used to get information about when files were changed and by who.
For example: head over to GitLab.com and browse to one of your files. Open it up and select “history”. You will all the times the file was changed, and selecting any of the commits will show you what it looked like at that point.
Alternatively, you can use select “blame” to show who changed each line in a file and at which commit.
22.7 Issues
Issues are a tool available on GitLab and GitHub for collaborating on projects, getting help and tracking decisions. They are used extensively in the FOSS world and are often the way R
package developers opt to receive bug reports and feature requests from their users.
Issues can be used for both personal and group projects. Some uses include:
- collaborating
- developing methods
- troubleshooting code
- tracking decisions or assumptions
- defining thresholds, variables
- reporting bugs
- requesting new features
Issues have a number of advantages over private email, in-person conversations or TODO
, NOTE
and other comments embedded in code because they:
- are easily searched
- can be grouped or categorized using labels
- can be assigned to individuals, groups or teams
- keep everyone in the loop
- are a resource for future users (including yourself!)
- allow for asynchronous communication
- keep track of the history of decisions, progress, etc.
22.7.1 Example issues
22.7.1.1 Bug or troubleshooting
I’m trying to do this and it isn’t working
# Some concise title
(One/two sentence description summarizing issue. )
## Steps to reproduce
(How one can reproduce the issue)
1.
2.
3.
## Observed behaviour
## Expected behaviour
## Sample of output tables, screenshots
## Possible fixes
## Session info
(if R related, paste the results of sessionInfo())
22.7.1.2 Method development
I’d like to try and do this
# Some concise title
(One/two sentence description summarizing the objective. )
## Description
(Include goals, use cases, benefits)
## Progress
(Where did you get?)
## Next steps
(How do you think we could solve it? Who can you assign
this issue to? Who can you mention to get their input?)
And once solved, post the code that actually solved it. This is one of the main ways that Issues can be useful to future users.
22.8 Tracking different file types
Git won’t be able to track changes in all data (eg. .Rds
and other binary file types) and output R Markdown file types.
For R Markdown, use simply:
or keep the .md
file along with your main output type. Either by rendering multiple output formats or using:
Generate figures as seperate PNGs and include them in the document using knitr::include_graphics()
. This way, the PNGs can be diffed by Git and easily viewed separate from the R Markdown output.