> For the complete documentation index, see [llms.txt](https://code.thebaselab.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code.thebaselab.com/guides/version-control.md).

# Version Control

{% hint style="warning" %}
Command line git is unavailble because of a licensing issue. Use lg2 or the GUI instead.
{% endhint %}

### Set up your identities

Git uses name and email address identify the author of each commit. Before making a commit, you'll need to set up your identity.

To proceed, go `Settings > Version Control > Identity`.&#x20;

### Set up your credentials

If you are cloning a private repository or pushing changes to a remote, you'll need to set up credentials. To start, enter your credentials at `Settings > Version Control > Authentication`.

#### Password-based Authentication

The easiest way to authenticate in Git is to use password-based authentication. To start, obtain a personal access token from your Git hosting provider. To learn more:

{% embed url="<https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token>" %}
Creating a personal access token on GitHub
{% endembed %}

{% embed url="<https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html>" %}
Creating a personal access tokeno on GitLab
{% endembed %}

#### Key-based Authentication

SSH keys can also be used to authenicate in Git. To start, generate a SSH key pair and configure them in your Git hosting provider. To learn more:

{% embed url="<https://docs.github.com/en/authentication/connecting-to-github-with-ssh>" %}
Connecting to GitHub with SSH keys
{% endembed %}

{% embed url="<https://docs.gitlab.com/ee/user/ssh.html>" %}
Connecting to GitLab with SSH keys
{% endembed %}

#### Setting up multiple credentials

Code App supports multiple credentials. You can configure a unique credential for each hosting provider by specifying their hostnames during the setup process.

<figure><img src="/files/nb7mro7PDKdS4dWRTAn0" alt=""><figcaption><p>Hostname-based credentials</p></figcaption></figure>

### Cloning a repository

To clone a repository, tap the source control icon in the sidebar and enter its url in the clone repository section. Assign it as the workspace folder by tapping the open folder button.

{% hint style="info" %}
Workspace folder is the folder the editor currently loaded. To work with a git repository, it must be located at the root of the workspace folder. You can load a folder by holding a folder cell in explorer or by using the `code` command in the terminal.
{% endhint %}

<figure><img src="/files/hAm2GJB1xf9ew7Fhq1u0" alt=""><figcaption><p>Cloning a repository</p></figcaption></figure>

#### Community Templates

A list of community-maintained projects for Code App can be found and cloned under the community templates section.

### Committing files

Newly added / modified files must be added to the staging area before you can make a commit. To do this, press the plus icon next to the file name.

![Adding a file to staging area](/files/MSsjSl2wbFRqMG6BF9KU)

You can now enter a commit message in the textfield and press the commit button to commit. You can also use the `command`+`enter` shortcut.

### Pushing to remote

You can push your changes to your hosting provider like GitHub.

![Pushing changes to remote](/files/HCdbvUyi0zWDup5vzobW)

### Branches and tags

To checkout a branch or a tag, tap the branch icon located in the bottom left corner and select one.

![Checkout to a branch](/files/nVGsmoHWnfbhNQJKyfPQ)

### Pull and Fetch

You can also pull or fetch changes from remote. Pull immediately applies the upstream changes to your files. It does so by fast-forwarding the upstream commits if possible or attempting to merge otherwise. On the other hand, fetch does not write changes to your files.

<figure><img src="/files/clrzVNeYdOJ9AejsXHzP" alt=""><figcaption><p>Pull from a remote</p></figcaption></figure>

To learn more about git pull and fetch:

{% embed url="<https://git-scm.com/docs/git-pull>" %}

{% embed url="<https://git-scm.com/docs/git-fetch>" %}
