Git manager feature (PRO PACK)
Git Manager allows users to create and host Git repositories on the DA server or sync with the remote repository. The feature can be reached via
Advanced Features ->
git is not present on your system: On Debian/Ubuntu, run:
apt-get -y install git
On CentOS/RHEL and other RedHat based distros:
yum -y install git
If you run CloudLinux, run this additionally:
cagefsctl --addrpm git cagefsctl --force-update
Create Repository in Git manager and then enter your data.
name is required but
keyfile are optional parameters.
Hosting a repository on DA server requires only the
name parameter while syncing with a remote repository requires
remote to be set and optionally
keyfile to SSH key if it's a private repo. Remote can be any of Git-supported protocols however only SSH is supported in a case of a private repo. Webhooks are supported for remotely synced repositories - triggering a webhook does automated fetch and deploy if both deploy branch and directory are set and valid.
Let's click on
Create Repository and enter just a name:
Then we click on Create Repository. In the main view we can see our newly created repository:
The right-hand side contains a tooltip available to execute commands quickly without entering into the repository view:
Clicking on the repository name is going to open its view. There we can see more information about the repository such as all branches available, deployment branch, deploy directory and other details:
Let's clone the repository assuming we have access to the server via an SSH password if that's allowed or a key:
> git clone firstname.lastname@example.org:domains/example.com/your-repo-name.git Cloning into 'your-repo-name'... email@example.com's password: warning: You appear to have cloned an empty repository. > echo hello world > readme > git add readme > git commit -m "Add readme" [master (root-commit) 030897a] Add readme 1 file changed, 1 insertion(+) create mode 100644 readme > git push firstname.lastname@example.org's password: Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 213 bytes | 213.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To directadmin.com:domains/example.com/your-repo-name.git * [new branch] master -> master
Now let's click on Modify, select
master branch, and enter the deploy directory. The deploy directory path must be already present and also relative to the user's home directory:
Let's hit Save and then Deploy. Upon confirming that the parameters were valid and deployment went well we can confirm that at the receiving end:
> john@directadmin:~$ ls -l relative/to/home/dir/ total 4 -rw-r--r-- 1 john john 12 Nov 4 08:54 readme > john@directadmin:~$ cat relative/to/home/dir/readme hello world
In order to view the history of the repository we click Logs:
Here we can see our commit message, date, and commit hash. Let's click on the commit:
Here we can see the diff of the commit against its parent, message, author, date.
Repositories are placed under the domain path as
name.git such as
Repositories are initialized and cloned as bare repositories meaning that deploy is simply just
git checking out the working tree. Metadata about the repositories is stored in a per-user SQLite at
Deploy directory and keyfile parameters must be provided as relative paths, the user's home path is used as a base.
Entering only a name is the same as
git init. Entering
remote parameter makes it operate as
git clone. If the repository is private then the keyfile must be provided. Keyfile is simply a path to the SSH key. If no keyfile is provided and the repository is private then
id_rsa is used automatically.
Each repository has a
post-update hook, such as:
/usr/local/directadmin/directadmin git-deploy --gitdir='/home/user/domains/domain.com/name.git' --branch='main' --deploydir='relative/path/to/home'
Triggering the hook above is going to deploy the repository at
USER is the current user executing the command. Root execution is not allowed.