From 27a0eeacad06ffc9507389af9ddb5d42ce675168 Mon Sep 17 00:00:00 2001 From: MACHIN Date: Thu, 29 Feb 2024 07:27:17 +0000 Subject: [PATCH] added info on advanced git functions, sparse checkout and cone patterns --- ADA/git_databricks.qmd | 45 +++++++++++++++++++++++++--------- images/reset-local-branch.png | Bin 0 -> 41024 bytes 2 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 images/reset-local-branch.png diff --git a/ADA/git_databricks.qmd b/ADA/git_databricks.qmd index 910f35b..30fa6aa 100644 --- a/ADA/git_databricks.qmd +++ b/ADA/git_databricks.qmd @@ -14,7 +14,7 @@ Guidance for analysts on how to connect Databricks to Github and Azure DevOps ------------------------------------------------------------------------ -#### Easier collaboration +### Easier collaboration ------------------------------------------------------------------------ @@ -25,7 +25,7 @@ When you're working on notebooks in Databricks without a git connection, they te ------------------------------------------------------------------------ -#### Version control +### Version control ------------------------------------------------------------------------ @@ -59,7 +59,7 @@ Additionally, when you commit and push notebooks through the Databricks interfac ------------------------------------------------------------------------ -### Prerequisites +## Prerequisites - An Azure DevOps account and access to the repo you need to connect to @@ -69,10 +69,10 @@ Additionally, when you commit and push notebooks through the Databricks interfac ------------------------------------------------------------------------ -### Getting set up +## Getting set up -#### Access Tokens +### Access Tokens Access tokens are long strings of numbers and letters that act like a password between two services. They identify the user and their permissions from one service to another. @@ -102,7 +102,7 @@ A "Success!" window will open containing your new access token. **You must copy ------------------------------------------------------------------------ -#### Connecting to Databricks +### Connecting to Databricks Now that you have your access token, you should go straight to Databricks. In the top right corner of the Databricks window, click your username and then "User Settings": @@ -124,8 +124,7 @@ You can then click Save at the bottom of the page, and now your connection betwe ------------------------------------------------------------------------ -#### Connecting to repos - +### Connecting to repos and cloning Just like any other way that you've worked with git before, the first step is going to be to clone your repo inside Databricks. @@ -147,6 +146,19 @@ You can then click "Create Repo". When the repo is created, you will be able to ![](../images/databricks-view-repo.PNG) +#### Sparse checkout and Cone Patterns + +Databricks cannot clone very large repos. It is best practice not to have a repo of this size, but if you attempt to clone a large repo, you will receive an error message. In this instance, you will need to perform a sparse checkout. This only clones a selection of items in your repo. To do this, select the "Advanced" option when in the "Add repo" menu, and tick the "Sparse checkout mode" option. You can tell Databricks which elements of the repo you would like it to clone, and you can do this by specifying something called Cone Patterns. If you do not specify any Cone Patterns, then the Databricks default is to clone only files in the root folder, but none from any subdirectories. To specify your own Cone Patterns, enter them in the box provided. You can enter multiple patterns but if the folders that they refer to contain more than 800MB of data then your clone will continue to fail. + +You might define your Cone Patterns as something like: + +`folder_a` +`folder_b/subfolder_c` + +The second example will only clone subfolder_c and not the rest of the contents of folder_b. + +Please note: You cannot currently disable sparse checkout mode once it is enabled, but you can modify Cone Patterns. If you create a new folder, you must add it to your Cone Pattern list before you can commit and push. You can find more information on sparse checkout and Cone Patterns on the [Databricks website](https://docs.databricks.com/en/repos/git-operations-with-repos.html). + \ @@ -156,7 +168,7 @@ You can then click "Create Repo". When the repo is created, you will be able to ------------------------------------------------------------------------ -### Folders in Databricks +## Folders in Databricks To be able to add your notebooks to a repo, you need to make sure that you save them in the correct place. @@ -170,10 +182,10 @@ You can think of your User folder as being a bit like "My Documents" on your lap ------------------------------------------------------------------------ -### Git pull, commit, and push in Databricks +## Git pull, commit, and push in Databricks -#### Git pull +### Git pull You can access the menu to pull, commit and push from several places within Databricks. This interface is the same whether you're working with a DevOps repo or a Github repo. @@ -196,7 +208,7 @@ From here, you can perform git pull by clicking the pull icon in the top right. ------------------------------------------------------------------------ -#### Git commit and push +### Git commit and push When you have made changes to a notebook, it will appear in the Changes section of the git interface. You can also see the actual changes that have been made in the right hand box to make sure that you're committing the correct file: @@ -205,6 +217,15 @@ When you have made changes to a notebook, it will appear in the Changes section In Databricks, you commit and push as one action, rather than as two separate ones. Enter your commit message into the "Commit message" box (you can ignore the Description box) and click the "Commit & Push" button. +------------------------------------------------------------------------ + +### Additional git commands in the Databricks interface + +You can access additional git features such as merge, rebase and reset directly within the Databricks interface by clicking the 3 dots in the menu as shown in the image below: + +![](../images/reset-local-branch.PNG) +When merging, you are also able to resolve merge conflicts inside Databricks itself. +There is additional guidance on each of these advanced features in the [Databricks manual](https://docs.databricks.com/en/repos/git-operations-with-repos.html). Please use git reset with caution as you can easily lose recent changes when performing this action. diff --git a/images/reset-local-branch.png b/images/reset-local-branch.png new file mode 100644 index 0000000000000000000000000000000000000000..22d2a23091b30b8767f0b07238472bd0f620ac44 GIT binary patch literal 41024 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