When dealing with critical Excel workbooks, you want to have proper source control in place. This presentation is about the different challenges we face when using Git with Excel files and how we can solve them by using the right mix of settings, extensions and Git workflow.
2. Agenda (1/2)
2
1. But why??
2. Git refresher
3. So what’s the issue?
4. Four golden rules
3. Agenda (2/2)
3
5. Tools
A. Spreadsheet Compare
B. xltrail
C. Git XL
D. Git LFS
E. Git clients
6. Merge conflicts
A. Single branch workflow: File locking
B. Multi branch workflow
8. • Local Git extension that makes git diff
and git merge work with VBA code (only)
• Free & open-source
Git XL
8
9. xlwings CI
9
Continuous integration for Excel files
• Write unit tests for Excel files with xlwings
• Run them automatically on the server after
pushing changes to your Git repo
Example: Gitlab Pipeline
13. A few more reasons
13
• Excel files are code, so treat them as such
• Git is battle tested
• Collaboration
• Audit trail / Spreadsheet governance
• Peer review / Approval process
• Reduce errors
18. 2) GitHub doesn’t understand Excel
18
and GitLab/BitBucket/Azure DevOps are no better
19. 3) Heavy Excel files
19
• Git transfers the entire commit history of the
repository during the cloning process.
• As an example: Committing a 25 MB workbook
once per day during weekdays will lead to 7 GB
repo at the end of the year
20. 4) Merge conflicts
20
Compared to text files, merge
conflicts with Excel files:
• Happen way more often
• Are harder to resolve
24. 3) Add temp files to .gitignore
24
The .gitignore file prevents certain files to be accidentally
added/pushed to Git. To filter out temporary Excel files,
add this to your .gitignore file:
~$*.xl*
Otherwise you’ll end up
sooner or later like this:
25. 4) Release a version via “git tag”
25
Release
asset/artefact
(not part of
Git repo!!)
It’s OK to include version stamps in released files (this
can be automated via a continuous integration service
like the new GitHub actions).
28. Spreadsheet Compare
28
• Compares 2 Excel files
• Standalone desktop app (also integrated into
the Inquire Excel add-in)
• Part of Office Professional Plus and Office 365
ProPlus
• You can integrate it with Git:
https://www.xltrail.com/blog/git-diff-spreadsheetcompare
32. xltrail
32
• Free trial: https://www.xltrail.com
• xltrail syncs with any Git provider
• Alternatively, it works via Drag and Drop
and manages Git behind the scenes
• Allows comparisons across branches,
between any two versions
36. Git XL
36
• https://www.xltrail.com/git-xl
• Free & open-source local Git extension
• Created & maintained by us
• It is able to diff & merge (!) VBA code
• Windows only at the moment
41. Git LFS intro
41
• https://git-lfs.github.com
• Free & open-source local Git extension
• Large files are downloaded during “git checkout”
rather than during “git clone/git fetch”
• On the server side, you need to make sure that it
is supported & enabled
• git lfs track "*.xl*"
• Side note: Since Git 2.18 (June 2018), there’s an
“emerging feature” built into Git directly that is called
“partial clone”: https://git-scm.com/docs/partial-clone
42. Git LFS in action
42
• All standard Git commands like git pull/push work
automatically with LFS behind the scene
44. Git clients
44
Git offers various clients to interact with the remote:
• Command Line
• Desktop clients (e.g. GitHub Desktop, Sourcetree).
For an overview: https://git-scm.com/downloads/guis
• File explorer integration: https://tortoisegit.org
• Integration with IDE/Text Editor (e.g. VSCode)
• Drag and Drop directly on GitHub, GitLab, Azure
DevOps (but not Bitbucket)
46. Merge conflicts will bite you!
46
They also happen:
• with a single master branch
• with a single user
For example:
• You commit during the day at work. In the
evening, you continue at home and forget to
pull before you make a new commit.
47. How do merge conflicts happen
47
True
merges
always
cause a
merge
conflict
(with
Excel
Files)
Fast-forward
merges
never
cause a
merge
conflict
49. Informal file locking
49
• Similar to shared drives or SharePoint
• This prevents the merge conflict altogether
• Easy solution:
@team I am going to
update Model.xlsm
Let me know when you’re
done, I need it for 5 min.
All yours.
Thanks, let me pull.
50. Git LFS file locking
50
• Git LFS offers file locking (introduced
with v2.0)
• Meanwhile, all major providers support it
• A caveat of the file locking is that you
need to remember two things:
–Actually lock the file
–Start with a “git pull” before you edit the file
• git lfs track "*.xl*" --lockable
53. Merge two branches
53
• We want to merge ”mybranch” into
“master”
• We end up in a merge conflict:
54. git mergetool to the rescue
54
• A simple way to get the files from both
branches next to each other is via “git
mergetool” – then cancel with Ctrl-C.
• This will add 4 files:
master mybranch
55. Resolve the merge conflict
55
• Now compare “contact_list.xlsm” (master)
with “contact_list_REMOTE.xlsm” (mybranch)
• Spreadsheet Compare or xltrail will be helpful
with that
• Manually apply the changes you want from
mybranch in your master version
• Then resolve the merge conflict via “git add”
and “git commit”.