Databricks Gitフォルダーを試してみた

# 背景・目的
DatabricksのGitフォルダーについて特徴を整理し、試してみます。

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:--|:--|
|Gitフォルダーとは|・DatabricksのビジュアルGitクライアント<BR>・API|
|Gitフォルダーでサポートする内容|・クローン<BR>・コミット<BR>・プッシュ<BR>・プル<BR>・ブランチ管理<BR>・コミット時の差分の視覚的比較|


# 概要
[Databricks Git フォルダーと Git の統合](https://docs.databricks.com/ja/repos/index.html)を基に整理します。

> Databricks Git フォルダーは、Databricks のビジュアル Git クライアントおよび API です。 リポジトリのクローン作成、コミットとプッシュ、プル、ブランチ管理、コミット時の差分の視覚的比較などの一般的な Git 操作をサポートします。

- Gitフォルダーとは、下記を指す
    - DatabricksのビジュアルGitクライアント
    - API
- 下記をサポートする
    - クローン
    - コミット
    - プッシュ
    - プル
    - ブランチ管理
    - コミット時の差分の視覚的比較

> Git フォルダー内では、ノートブックまたはその他のファイルでコードを開発し、バージョン管理、コラボレーション、CI/CD に Git を使用したデータサイエンスおよびエンジニアリング コード開発のベスト プラクティスに従うことができます。

- Gitフォルダー内は、ノートブックまたはその他のファイルでコード開発する
- バージョン管理、コラボレーション、CI/CDにGitを使用したデータサイエンスおよびエンジニアリングコード開発のベストプラクティスに従う事が可能

## Databricks Git フォルダーで何ができるでしょうか?
> Databricks Git フォルダーは、Git プロバイダーと統合することで、データおよび AI プロジェクトのソース管理を提供します。
Databricks Git フォルダーでは、Git 機能を使用して次のことを行うことができます。
> - リモートGitリポジトリのクローン作成、プッシュ、プルを行います。
> - マージ、リベース、競合の解決などの開発作業のためのブランチの作成と管理を行います。
> - ノートブック (IPYNB ノートブックを含む) を作成し、それらと他のファイルを編集します。
> - コミット時に相違点を視覚的に比較し、マージの競合を解決します。

- Gitプロバイダーと統合することで、データおよびAIプロジェクトのソース管理を提供する
    - リモートGitリポジトリのクローン作成、Push、Pull
    - Merge、rebase、競合の解決などの開発作業のためのブランチの作成と管理
    - ノートブックを作成し、それらと他のファイルを編集
    - コミット時に相違点を視覚的に比較し、マージの競合を解決する

## サポートされているGitプロバイダー
> Databricks Git フォルダーは、統合された Git リポジトリによってサポートされます。 リポジトリは、次のセクションにリストされているクラウドおよびエンタープライズ Git プロバイダーのいずれかでホストできます。

- Gitフォルダーは、統合されたGitリポジトリによりサポートされる

### クラウド Databricks がサポートする Git プロバイダー
- GitHub、GitHub AE、および GitHub Enterprise クラウド
- Atlassian Bitbucket クラウド
- GitLab と GitLab EE
- Microsoft Azure DevOps (Azure repo)
- AWS CodeCommit

### Databricks でサポートされているオンプレミスの Git プロバイダー
- GitHub エンタープライズ サーバー
- アトラシアン Bitbucket Server および Data Center
- GitLabセルフマネージド
- Microsoft Azure DevOps Server


## PAT の代わりに Databricks GitHub アプリを使用する理由
> Databricks Git フォルダーを使用すると、ホストされた GitHub アカウントを使用している場合、PAT の代わりにユーザー認証に Databricks GitHub アプリを選択できます。 GitHub アプリを使用すると、PAT に比べて次の利点があります。
> - ユーザー認証には OAuth 2.0 を使用します。 OAuth 2.0 repo トラフィックは、強力なセキュリティのために暗号化されています。
> - 統合が容易で(下記のステップを参照)、トークンを個別に追跡する必要がありません。
> - トークンの更新は自動的に処理されます。
> - 統合のスコープを特定のアタッチされた Git repoにすることができ、アクセスをよりきめ細かく制御できます。

- Gitフォルダーを使用すると、ホストされたGitHubアカウントを使用している場合、PATの代わりにユーザに認証にGitHubアプリを選択できる
- GitHubアプリの利点
    - ユーザ認証にOAtuth2.0
    - 統合が容易
    - トークンの更新は自動的に処理される
    - 統合のスコープを特定のアタッチされたGit repoにすることが可能。アクセス制御を細かくできる


# 実践
## Git 資格情報を構成し、リモート リポジトリを Databricksに接続する
[Git 資格情報を構成し、リモート リポジトリを Databricksに接続する](https://docs.databricks.com/ja/repos/get-access-tokens-from-git-provider.html)を元に試します。

### Databricks GitHub アプリを使用して GitHub アカウントをリンクする

1. Databricksにサインインします
1. 画面右上から、Settingsをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/03832a47-cab3-b0a2-d4b4-1c41b2c4b671.png)
1. 「Linked accounts」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1df5db78-42d5-b5ec-1764-5dfd1ae6b93e.png)
1.Git providerに、①「GitHub」、②「Link Git account」を選択し、　「Link」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/21a41780-cb5c-4d88-d8a6-7aa080e71ff1.png)

1. Databricks Githubアプリの認証ページが開くので、承認します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ca5c6b78-176b-273a-82bf-55ed995d3b46.png)

1. リンクされました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/dbf8a4b6-06fa-0f89-edc4-c2347b29a089.png)

### Databricks GitHub アプリをインストールして構成し、リポジトリへのアクセスを許可する
> Databricks Git フォルダーからアクセスする GitHub リポジトリに Databricks GitHub アプリをインストールして構成できます。 アプリのインストールの詳細については、 GitHub ドキュメントを参照してください。

- GitフォルダーからアクセスするGitHubリポジトリにDatabricks GitHubアプリをインストールし、操作ができる

1. [Databricks GitHub アプリのインストール ページ](https://github.com/apps/databricks/installations/new)を開きます
1. リポジトリを選択し、「Install」をクリックします
    - インストールすることで、コードへの読み書きアクセスが許可されます
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a53d0552-c0cd-9e48-45a8-569f8d598461.png" width=400 />

## Databricks Git フォルダーで Git 操作を実行する ( Repos )
[Databricks Git フォルダーで Git 操作を実行する ( Repos )](https://docs.databricks.com/ja/repos/git-operations-with-repos.html)を基に試します。

### リモート Git リポジトリに接続されたリポジトリのクローンを作成する
1. ナビゲーションペインで、「Workspace」をクリックします
1. 画面右上で「Create」をクリックし、「Git folder」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a39ce70b-6651-779d-b507-c1ae6b68b9b2.png)
1. 下記を入力し、「Create Git folder」をクリックします
    - Git repository URL
    - Git provider
    - Git folder name
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/06fc8ee1-1988-5665-1b06-061789a0af4f.png)

1. できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d7a0e6f2-f4fe-b6b6-1fa0-713b8a709c4e.png)

## 新しいブランチを作成する
1. 「Git」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e73f842c-80fc-6927-4ea1-938be2d24eaa.png)
1. Gitダイアログが開きます
1. 「Create Branch」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0b73224d-b0fb-5a8d-3e1c-4edcd013c696.png)
1. ブランチ名を入力し、「Create」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b4497d00-5740-73e3-bc1c-f76a33ab0465.png)

## コミット〜プッシュ
1. Create>「Notebook」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6d8f1d59-8479-5a31-92e5-442d2672d518.png)
1. 適当にコードを書いてみます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/bdbb5d18-2965-9916-657b-5978c77f1e3d.png)
1. Gitダイアログで、「Commit & Push」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8ffefe11-d06d-8337-fbb2-1fb7f09f5859.png)

1. Git Hubでも確認できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b1f01fea-65ec-8036-c164-9a56520d72fb.png)


# 考察
今回、DatabricksのGit統合を試してみました。Notebookでコードを書いて共有する場合は、コード管理する場合に有用そうです。

# 参考

https://docs.databricks.com/ja/repos/index.html

https://docs.databricks.com/ja/repos/get-access-tokens-from-git-provider.html#

https://docs.github.com/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations#about-installing-github-apps

https://docs.databricks.com/ja/repos/git-operations-with-repos.html