diff --git a/slides/slides.qmd b/slides/slides.qmd index 1598cb895fd2947ba5cd879da975295bd669ea61..70a25bcdc22d683c4490b60a0bfe73ca77e940a4 100644 --- a/slides/slides.qmd +++ b/slides/slides.qmd @@ -1,5 +1,9 @@ --- title: "Git Borg Linker" +title-slide-attributes: + data-background-image: img/gblk.png + data-background-size: contain + data-background-opacity: "0.1" subtitle: "Incremental backup of your results folder with git and borg" author: "Nicolas Fontrodona" institute: "LBMC -- ENS<br>" @@ -28,12 +32,15 @@ format: In bioinformatics project: + - Code - Results (produced by this code) - Version control for code (git) + But what about *saving the version of our results ?* +:::: {.fragment .fade-in} ::: {.callout-note icon=false} ## Controlling the version of your results can help you to: @@ -45,24 +52,25 @@ But what about *saving the version of our results ?* ::: *Data versioning tools* can help you to achieve this. - +:::: ## Data Versioning tools +::: {.incremental} +---------------------+---------------------------+-----------------------------------------+ | Tools | Pros | Cons | +:===================:+:==========================+:========================================+ | { | - Git integration | - No deduplication | -| width=30%}<br>DVC | - Easy to use | - Can’t delete some version of a file | +| width=30%}<br>DVC | - Easy to use | - Can’t delete some versions of a file | +---------------------+---------------------------+-----------------------------------------+ | {width=30%} | | - Not easy to use | -| <br>LakeFS | | -Can’t easily delete objects | +| <br>LakeFS | | - Can’t easily delete objects | +---------------------+---------------------------+-----------------------------------------+ | { | - Git integration | - Can’t delete some version of a file | | width=30%}<br>gitlfs| - Easy to use | | +---------------------+---------------------------+-----------------------------------------+ - +::: ## Data Versioning Tools {.unnumbered .unlisted .center-text} @@ -79,6 +87,7 @@ versioning. Borgbackup (Borg): Eficient and secure backups. https://www.borgbackup.org/ +:::: {.fragment .fade-in} ::: {.callout-tip icon=false} ## Main advantages @@ -89,26 +98,29 @@ Borgbackup (Borg): Eficient and secure backups. https://www.borgbackup.org/ - Creates an archive folder (we can handle it like we want) - No restrictions in backups deletion ::: +:::: +:::: {.fragment .fade-in} ::: {.callout-important icon=false} ## Main drawback - No git integration to link the code with the results ::: +:::: -## Git Borg Linker (gblk) {.center-simple} +## Git Borg Linker (gblk) {.center-simple .big-margin} {height=10% width=20% fig-align="center"} -<p id="mycaption">Git borg linker (gblk)<p> - +::: {#mycaption} +Git borg linker (gblk) +::: Developed to integrate borg with git. -::: {.callout icon=false} -gblk handles data versioning by using git history and uses borg to do the + +Gblk handles data versioning by using git history and uses borg to do the backups: -- gblk: Borg advantages + git integration -::: +Gblk: *Borg advantages* + *git integration* ## Git Borg Linker {.unnumbered .unlisted} @@ -116,7 +128,7 @@ Available at: <p id="center-p">[https://gitbio.ens-lyon.fr/LBMC/hub/git_borg_linker](https://gitbio.ens-lyon.fr/LBMC/hub/git_borg_linker)</p> -::: {.callout-note icon=false} +::: {.callout-note} ## Prerequisites to use gblk @@ -173,15 +185,20 @@ This is this folder that will be tracked by gblk. Let's see how gblk works with an example: ```bash -$ mkdir test_gblk; cd test_gblk -$ mkdir results src -$ git init +mkdir test_gblk; cd test_gblk +mkdir results src +git init ``` -Initialize gblk to start using it: Done with `gblk init`. +. . . + +Initialize gblk to start using it: `gblk init`. This commands create a folder named `.borg` at the root of the project repository. This is where the *`results` folder backups will be stored*. +. . . + + ```bash gblk-init Initialize a borg repository inside a git project @@ -204,6 +221,8 @@ gblk can optionally create git hooks (with `gblk init` command or `create-hooks` ::: {.callout-note icon=false appearance="minimal"} +::: {.incremental} + - After a commit to automatically save you data (execute `gblk commit` automatically) - After a checkout to: 1. Revert the checkout @@ -211,6 +230,9 @@ gblk can optionally create git hooks (with `gblk init` command or `create-hooks` 3. Perform git checkout 4. Perform a gblk checkout (restore your `results` folder as it was at the destination commit). ::: +::: + +. . . The hooks created by those commands can be found in `.git/hooks` folder and are name `post-commit` and `post-checkout`. @@ -223,18 +245,24 @@ The command `gblk create-hooks` can be used to create hooks if gblk was initiali ## Git Borg Linker - init {.unnumbered .unlisted} -`gblk init --hooks` and `create-hooks` commands will also create 3 git aliases: +`gblk init --hooks` (and `create-hooks`) commands will also create 3 git aliases: ::: {.callout-note icon=false appearance="minimal"} +::: {.incremental} - `co`: for *checkout*. It allow to make the git checkout quiet (because it will be reverted) - `conh`: For *checkout*. It allow to make a checkout without using the hooks. It is useful to bypass the check of unsaved/missing data in the `results` folder. *You have to combine it with `gblk checkout ---mode hard`* to checkout your `results` folder to the new current commit. - `cnh`: For *commit*. It allows to make a simple git commit without saving your result repository (may lead to data loss) ::: +::: + +. . . ::: {.callout-note icon=true} Those aliases are valid only *for the current project*. They can be found in the file `.git/config` ::: +. . . + Finally, gblk init creates `.gitignore` and `results/.gitignore` files ::: {layout-ncol=2} @@ -271,9 +299,11 @@ Creates an empty `.borg` repository were the backups of the `results` folder wil Let's add a code that will produce a result file. ```bash -$ echo "echo 'result line' > results/result.txt" > src/script.sh # creates a script file -$ bash src/script.sh # creation of a results/result.txt -$ git add src/script.sh && git commit -m "src/script.sh: initial commit" # commit the change +echo "echo 'result line' > results/result.txt" > src/script.sh # creates a script file +bash src/script.sh # creation of a results/result.txt +git add src/script.sh && git commit -m "src/script.sh: initial commit" # commit the change +``` +```console Repository: /.../test_gblk/.borg Archive name: df0eb55ce43fa48b652340183b5f9cc69daa2350 Archive fingerprint: c9409d26c4a0e1e60c28b2db0dca17a82e802fc9f2dcb6ed0ffe9bfb69f62679 @@ -294,6 +324,7 @@ Chunk index: 4 4 1 file changed, 1 insertion(+) create mode 100644 src/script.sh ``` +<p><p> ## Git Borg Linker - commit {.unnumbered .unlisted} @@ -345,15 +376,17 @@ OPTIONS: ## Git Borg Linker - checkout -To go back to an old version of the `results` folder you can do a `gblk checkout` after a `git checkout DESTINATION_COMMIT`. This will *revert your `result` folder* as it was at the time of the commit ` DESTINATION_COMMIT` . +To *go back to an old version* of the `results` folder you can do a `gblk checkout` after a `git checkout DESTINATION_COMMIT`. This will *revert your `result` folder* as it was at the time of the commit ` DESTINATION_COMMIT` . ::: {.callout-warning icon=true} -Doing a checkout without hooks might be risky because any unsaved change in your `results` folder will be lost +Doing a checkout without hooks might be risky because any unsaved changes in your `results` folder will be lost ::: +. . . + To *avoid losing data* without hooks use the `gblk pre-co` command before the `git checkout` command The workflow is the following @@ -378,6 +411,7 @@ Will revert *both your code and your results* as they were. The workflow is the ::: {.callout-note icon=false appearance="minimal"} +::: {.incremental} 1. `git checkout DESTINATION_COMMIT` 2. Execution of the `.git/hook/post-checkout` script: - `git checkout SOURCE_COMMIT`: Going back to the state before the step 1 @@ -385,6 +419,7 @@ Will revert *both your code and your results* as they were. The workflow is the - `git checkout DESTINATION_COMMIT` - `gblk checkout --mode hard`: *hard* is the default mode used when hooks are created. With hard mode, the *results folder is completly deleted*, this action is skipped if with `--mode soft`. Then the backup of the first commit is extracted into the results folder. `--mode soft` can lead to have a `results` folder with *both old and new files*. It usage is **not recommended**. ::: +::: ## Git Borg Linker - checkout {.unnumbered .unlisted} @@ -394,30 +429,65 @@ Let's go back to our example project (in slide 11, 14, 15 and 17): In this project, we're using *hooks*: -```bash -$ echo "echo 'a newline' >> results/result.txt" >> src/script.sh # Add anew line into result.txt file -$ bash src/script.sh # Execute the script -$ cat results/result.txt # display the new content of the file +::: {.fragment .semi-fade-out fragment-index=1} +```sh +echo "echo 'a newline' >> results/result.txt" >> src/script.sh # Add anew line into result.txt file +sh src/script.sh # Execute the script +cat results/result.txt # display the new content of the file +``` +```console result line a newline +``` +::: -$ git add src/script.sh && git commit -m "src/script.sh: update" -... - -$ git co df0eb55ce43fa48b652340183b5f9cc69daa2350 # checkout to the first commit, gblk checkout is executed after that command +::: {.fragment .fade-in fragment-index=1} +::: {.fragment .semi-fade-out fragment-index=2} +```sh +git add src/script.sh && git commit -m "src/script.sh: update" +# checkout to the first commit, gblk checkout is executed after that command +git co df0eb55ce43fa48b652340183b5f9cc69daa2350 +``` +```console ... HEAD est maintenant sur df0eb55 src/script.sh: initial commit +``` +::: +::: -$ cat results/result.txt +::: {.fragment .fade-in fragment-index=2} +::: {.fragment .semi-fade-out fragment-index=3} +```sh +cat results/result.txt +``` +```console result line +``` +::: +::: -$ git co master +::: {.fragment .fade-in fragment-index=3} +::: {.fragment .semi-fade-out fragment-index=4} +```sh +git co master +``` +```console Basculement sur la branche 'master' +``` +::: +::: -$ cat results/result.txt +::: {.fragment .fade-in fragment-index=4} +```sh +cat results/result.txt +``` +```console result line a newline ``` +::: + +<p><p> ## Git Borg Linker - checkout {.unnumbered .unlisted} @@ -426,17 +496,22 @@ a newline Example with unsaved results in our results folder: ```bash -$ echo "test" >> results/result.txt -$ echo "new files" > results/new.txt -$ git co df0eb55ce43fa48b652340183b5f9cc69daa2350 +echo "test" >> results/result.txt +echo "new files" > results/new.txt +git co df0eb55ce43fa48b652340183b5f9cc69daa2350 +``` +. . . + +```console +27 B -22 B results/result.txt added 10 B results/new.txt - Your results folder contains unsaved changes! Please update your current commit with: gblk commit --update Or revert it back to it's previous state with gblk commit --revert ``` +. . . + Unsaved changes are detected, you can: - discard unsaved changes with `gblk commit --revert` @@ -457,12 +532,16 @@ Project └── results ``` +. . . + To ignore a given file named `file.txt` you can add to your `.borgignore` file the following content: ```sh - results/file.txt ``` +. . . + ::: {.callout-warning icon=true} 1. **you have to put a `results/` prefix in front of your files**. 2. To exclude a file, the line must begin by `- `. @@ -477,12 +556,18 @@ To ignore *every files named `file.txt` wherever they are*, use the following sy - /**/file.txt ``` <br> + +. . . + You can also ignore files with a given extention inside a folder (named `folder` here) with: ```sh - results/folder/*.txt ``` <br> + +. . . + To ignore all files with a given extention use: ```sh @@ -517,27 +602,60 @@ Every ignored file *won't block* the `gblk pre-co` command done after a `git che Ignored files *won't be removed* after a checkout ::: + +::: {.fragment .fade-in fragment-index=1} + Let's take back our example `slide 21` +::: {.fragment .semi-fade-out fragment-index=2} ```bash -$ gblk pre-co +gblk pre-co +``` +```console +27 B -22 B results/result.txt added 10 B results/new.txt -$ # remove the last line of result.txt -$ cat results/result.txt | grep -v $(tail -n 1 results/result.txt) > results/result.txt -$ gblk pre-co +``` +::: +::: + +::: {.fragment .fade-in fragment-index=2} +::: {.fragment .semi-fade-out fragment-index=3} +```bash +# remove the last line of result.txt +cat results/result.txt | grep -v $(tail -n 1 results/result.txt) > results/result.txt +gblk pre-co +``` +```console added 10 B results/new.txt -$ # creation of a .borgignore file containing - results/new.txt -$ echo '- results/new.txt' > .borgignore -$ gblk pre-co # Don't display anything, the results archive is up to date -$ ls results +``` +::: +::: +::: {.fragment .fade-in fragment-index=3} +::: {.fragment .semi-fade-out fragment-index=4} +```bash +# creation of a .borgignore file containing - results/new.txt +echo '- results/new.txt' > .borgignore +gblk pre-co # Don't display anything, the results archive is up to date +ls results +``` +```console .gitignore new.txt result.txt -$ # going back to the first commit where new.txt didn't exits -$ git co df0eb55ce43fa48b652340183b5f9cc69daa2350 -$ ls results -$ .gitignore new.txt result.txt -$ git co master ``` +::: +::: + +::: {.fragment .fade-in fragment-index=4} +```bash +# going back to the first commit where new.txt didn't exits +git co df0eb55ce43fa48b652340183b5f9cc69daa2350 +ls results +``` +```console +.gitignore new.txt result.txt +``` + +::: + <p><p> @@ -551,6 +669,8 @@ You can use `gblkt umount` to unmount those folder. This command is usefull to compare *results produced by an old version of the code* to the *results produced by the current version of the code*. ::: +. . . + ::: {.callout-important} When an archive is mounted, *borg is locked* ! If you call a borg command you can have the message: @@ -598,7 +718,7 @@ gblk mount This command creates a `.mount` containing all archives of the results folder: -```bash +```console .mount ├── 964fec75f58829c9642c9c2b675a4e1282d0d266 │ └── results @@ -610,12 +730,13 @@ This command creates a `.mount` containing all archives of the results folder: └── result.txt ``` +. . . ```bash gblk mount --versions # version view ``` -```bash +```console .mount └── results ├── .gitignore @@ -647,7 +768,7 @@ To customize the was delta display file differences you can visit: **Displaying changes between files (2/3):** -To display the changes of a results file named `result.txt` in our example between the tow last commits, we can enter +To mount the versions of a result file named `result.txt` corresponding to the two last commits, we can enter: ```bash $ gblk mount --last 2 -p results/result.txt # mounting the results/result.txt of the two last commits @@ -662,7 +783,7 @@ $ gblk mount --last 2 -p results/result.txt # mounting the results/result.txt o └── result.txt ``` -If two files are recovered this way, we can add the `--diff` option to the previous command: +If two files are recovered this way, we can add the `--diff` option to the previous command to display the changes between those files: ```bash $ gblk mount --last 2 -p results/result.txt --diff @@ -682,7 +803,7 @@ $ gblk mount --last 2 -p results/result.txt --diff **Displaying changes between files (3/3):** -To display the changes between one commit and the current results folder, only one target file must be recovered by the mount command: example with the `results/result.txt` file: +To display the changes between one commit and the current results folder, *only one target file must be recovered* by the mount command: example with the `results/result.txt` file: ```bash # mounting the results/result.txt of the commit starting with df0eb55ce @@ -796,6 +917,8 @@ Let's run the following command to create an image corresponding to the differen gblk mount --last 2 --path results/img.png --diff ``` +. . . + ::: {.callout-note} ## This command: @@ -803,6 +926,8 @@ gblk mount --last 2 --path results/img.png --diff 2. Creates an image inside the `.tmp` folder *corresponding to the differences between the two `results/img.png` images*. ::: +. . . + :::: {.columns} ::: {.column width="18%"}  @@ -844,7 +969,7 @@ gblk delete -h # -h for compact help, --help for a more exhaustive help The delete command has a lot of option: go to [borg's delete documentation](https://borgbackup.readthedocs.io/en/stable/usage/delete.html) to have more details on each of them ::: - +. . . To see what archive you are about to remove, run: @@ -862,17 +987,19 @@ gblk delete --list --dry-run [OTHER_OPTIONS] - The `prune` command is a wrapper of the `borg delete` command - Can be used to *keep archives created during a given period of time* and *remove others*. -::: {.callout-important icon=false} +::: {.callout-important} Note that this command *doesn't actually free disk space*. You have to use `gblk compact` afterwards to achieve this. ::: +. . . + To display the help of `gblk prune`, run the following command: ```sh gblk prune -h # -h for compact help, --help for a more exhaustive help ``` -::: {.callout-tip icon=false} +::: {.callout-tip} The delete command has a lot of option: go to [borg's prune documentation](https://borgbackup.readthedocs.io/en/stable/usage/prune.html) to have more details on each of them ::: @@ -889,6 +1016,8 @@ To see what archives you are about to remove, enter gblk prune --list --dry-run [OTHER_OPTIONS] ``` +. . . + To keep *1 end of day*, *1 additional end of week* archives run the following commands: ```console @@ -898,6 +1027,8 @@ Would prune: 964fec75... Mon, 2023-02-13 09:12:50 [f Keeping archive (rule: weekly #1): df0eb55c... Fri, 2023-02-10 16:15:56 [c9409d26...] ``` +. . . + To keep *all backups in the last 2 days* and *1 additional end of week* archives, ```console @@ -922,7 +1053,7 @@ You can run: gblk compact --verbose ``` -To compact you `.borg` folder +To compact your `.borg` folder ## gblk config files @@ -938,6 +1069,8 @@ config_type = "local" A global configuration file can also be defined by gblk automatically at `~/.gblkconfig`. +. . . + ::: {.callout-note} ## Those configuration files are used: @@ -947,7 +1080,7 @@ A global configuration file can also be defined by gblk automatically at `~/.gbl - The configurations for `remotes` and `prune` instructions are *prioritized* in the *local configuration file over the global configuration file*. ::: -## gblk configuration file - Pruning options +## gblk configuration file - Pruning options {auto-animate=true} To *add or update* settings for pruning in the local or global configuration file you can use the command: @@ -961,11 +1094,13 @@ Where: - `KEY` corresponds to a `prune` command argument. - `VALUE` corresponds to the value to associate with the key +. . . + Check [borg documentation](https://borgbackup.readthedocs.io/en/stable/usage/prune.html) to know what those arguments do. You can also run the command `gblk prune --help` to see a description of those arguments. **This command will *define options for an automatic pruning of the archives of the results folder*** -## gblk configuration file - Pruning options {.unnumbered .unlisted} +## gblk configuration file - Pruning options {.unnumbered .unlisted auto-animate=true} To *add or update* settings for pruning in the local or global configuration file you can use the command: @@ -991,19 +1126,23 @@ You can use the flag `--global` to set those options in the *global configuratio ## gblk configuration file - Pruning options {.unnumbered .unlisted} -To display the current list of *pruning options* of the gblk local or global configuration file, you can use the following command: +To display the current list of *pruning options* in the gblk local or global configuration file, you can use the following command: ```sh $ gblk config show # add --global to see setting the the global configuration file keep_within = '7d' ``` +. . . + To *remove options previouly defined* in the local or global configuration file, you can use the command: ```sh gblk config rm <KEY> [--global] ``` +. . . + For example, let's remove the setting `keep_within`: ```sh @@ -1024,6 +1163,8 @@ To prune your results archives using the options defined in the global or local gblk config prune [OPTION] ``` +. . . + ::: {.callout-important } If no options are defined, an error will be thrown: @@ -1033,6 +1174,7 @@ error: No global and local options defined for pruning! ``` ::: +. . . You can see what option you can add to your command with @@ -1050,6 +1192,7 @@ If both local and global pruning options are defined, only the *local settings a Example: +::: {.fragment .semi-fade-out fragment-index=1} ```bash gblk config add keep-within '2d' gblk config add keep-weekly 3 --global @@ -1060,6 +1203,9 @@ Keeping archive (rule: within #1): 248a2... Tue, 2023-02-14 09:39:10 [ef88 Keeping archive (rule: within #2): 964fe... Mon, 2023-02-13 09:12:50 [fef70...] Would prune: df0eb... Fri, 2023-02-10 16:15:56 [c9409...] ``` +::: + +::: {.fragment .fade-in fragment-index=1} ```bash gblk config rm keep-within gblk config prune --dry-run --list @@ -1069,6 +1215,7 @@ Keeping archive (rule: weekly #1): 248a2... Tue, 2023-02-14 09:39:10 [ef88 Would prune: 964fe... Mon, 2023-02-13 09:12:50 [fef70...] Keeping archive (rule: weekly #2): df0eb... Fri, 2023-02-10 16:15:56 [c9409...] ``` +::: <p><p> ## Sharing gblk repositories @@ -1080,6 +1227,8 @@ When you produce some results for a particular project, you may want to *share t The choice of sharing the complete archive folder `.borg` was made to always benefits from borg's deduplication ::: +. . . + ::: {.callout-warning} The way of *duplicating and storing an archive folder* is not the way *borg was intended to be used*. Indeed the replacement of a borg repository by an older one *is considered suspicious* and **borg blocks the executions of its commands for this archive**. See [this page](https://borgbackup.readthedocs.io/en/stable/faq.html?highlight=attack#this-is-either-an-attack-or-unsafe-warning) for details. ::: @@ -1093,6 +1242,8 @@ Remotes can be defined *globally* or *locally*: - *local* remotes are only defined for a given project - *global* remotes are available for any gblk projects. Useful if to store your gblk results on a same location. +. . . + ::: {.callout-note} If a *global* remote have the same name as a *local* remote, only the local remote can be used for this project. @@ -1104,12 +1255,14 @@ If a *global* remote have the same name as a *local* remote, only the local remo A remote is defined by a: +::: {.incremental} - A *name*: used to identify the remotes - A *path*: the path pointed by the remote - Can be defined as `[USER@]HOSTNAME:PATH` - - Host defined in `ssh config file` can be used + - Hosts defined in `ssh config file` can be used - The *path* must point to an existing directory +::: ## gblk configuration file - Remotes {.unnumbered .unlisted} @@ -1124,6 +1277,8 @@ gblk remote add KEY VALUE - `KEY`: The name of the remote - `VALUE`: The URL it points to. +. . . + To define a globally defined remote you can enter the following command: ```sh @@ -1143,6 +1298,8 @@ To remove a remote named `KEY` you can use this command gblk remote rm KEY ``` +. . . + You can add the flag `--global` at the end of the previous command to remove a globally defined remote. ```sh @@ -1161,10 +1318,12 @@ gblk remote show It will display *locally* and *globally* defined remotes. + ::: {.callout-note} Only unmasked `globally` remotes are displayed (e.g the global remotes that don't share a name with any local remotes). ::: +. . . ::: {.callout-tip} @@ -1194,7 +1353,9 @@ If a gblk archive folder is available for the project, then you can execute the ```sh gblk clone [HOSTNAME:]PATH [--compression] [--hooks] ``` -- [HOSTNAME:]: Optional, can be defined as `USER@HOSTNAME`. Hosts defined in `ssh config file` can be used +. . . + +- `[HOSTNAME:]`: Optional, can be defined as `USER@HOSTNAME`. Hosts defined in `ssh config file` can be used - `PATH`: path of a gblk archive folder. The `PATH` must point to a folder with this structure (corresponding to a borg remote archive): ```sh @@ -1204,6 +1365,9 @@ PATH ├── data └── README ``` + +. . . + ::: {.callout-important} clone must be used with a *path* and *not a remote name*. ::: @@ -1212,11 +1376,22 @@ clone must be used with a *path* and *not a remote name*. Here are the steps that the clone command execute: +:::: {.fragment .fade-in .small-margin} 1. Checks if `.borg` folder already exists. +:::: +:::: {.fragment .fade-in .small-margin} 2. Checks if the remote directory already exists and contains `data`, `config` and `archive_file` inside. +:::: +:::: {.fragment .fade-in .small-margin} 3. Copies with rsync the remote directory into `.borg` +:::: +:::: {.fragment .fade-in .small-margin} 4. Creates the local config file `.borg/.gblkconfig` using the name of the archive +:::: +:::: {.fragment .fade-in .small-margin} 5. Add a local remote called `origin` into the local config file +:::: +:::: {.fragment .fade-in} 6. Creates a `.gitignore` and a `results/.gitignore` :::: {.columns} @@ -1240,7 +1415,10 @@ Here are the steps that the clone command execute: ::: :::: +:::: +:::: {.fragment .fade-in} 7. Create hooks if needed +:::: ## gblk push @@ -1262,6 +1440,7 @@ The push command might deletes old archives inside the remote archive folder fol ::: {.callout layout="minimal"} Here are the steps that the push command execute: +::: {.incremental} 1. Checks if the *remote folder* (defined by the remote) exists 2. Checks if the *remote archive folder* (folder that will contains the archives) exits. It corresponds to the *path* of the remote and the name of the folder containing the `.borg` folder. 3. If it doesn't exists: @@ -1272,6 +1451,7 @@ Here are the steps that the push command execute: - Then it asks the user whether or not to continue the push. 5. Copies with rsync the content of the current `.borg` folder into the *remote archive folder* ::: +::: ## gblk pull @@ -1286,7 +1466,7 @@ gblk pull KEY Where `KEY` is the name of a *global* or *local* remote. **Path are not supported!**. ::: {.callout-note} -The pull commands saves the inital content of the `.borg` folder inside the `.tmp` directory. **Remember to delete it if the pull is sucessful +The pull commands saves the inital content of the `.borg` folder inside the `.tmp` directory. **Remember to delete it if the pull is sucessful** ::: @@ -1297,6 +1477,7 @@ The pull commands saves the inital content of the `.borg` folder inside the `.tm Here are the steps that the pull command execute: +::: {.incremental} 1. Checks if the *remote folder* (defined by the remote) exists 2. Checks if the *remote archive folder* (folder that will contains the archives) exits. If it doesn't, stops the pull. 3. Checks if the borg id is the same between the remote and the local borg archive folder. Stops the pull if not. @@ -1306,6 +1487,7 @@ Here are the steps that the pull command execute: 7. Copies with rsync the content of the *remote archive folder* into the current `.borg` folder. 8. Removes borg manifest timestamp and the cache associated to the current project archive folder. ::: +::: ## gblk restore diff --git a/slides/style.css b/slides/style.css index d54f11958159f0f8cb57813b06e84026f257f2e3..b56dda7fde3cecf7cc81bbe68719798024d6accf 100644 --- a/slides/style.css +++ b/slides/style.css @@ -14,6 +14,11 @@ background-color: white; } +.slide { + position: absolute; + top: 0; +} + .reveal section h2 { color: white; background-color: dodgerblue; @@ -103,4 +108,8 @@ columns: 2; -webkit-columns: 2; -moz-columns: 2; +} + +.small-margin { + margin-bottom: -0.8em; } \ No newline at end of file