Git : le memo

Bonjour, Dans cet article un mémento des commandes git les plus courantes, et quelques autres commandes bien utiles.

Commandes principales

Récupérer un dépot git
  • git clone <adresse_du_site>
Ou: initialiser un dépôt git à partie d'un répertoire local
  • git init

Note : il faudra ensuite ajouter le dépôt distant (voir commandes avancées).

Envoyer ses modifications
    1. Sélection des modifications a ajouter : git add <fichiers_à_ajouter>
      1. Ajouter toutes les modifications (y compris les nouveaux fichiers) :
        git add -A
      2. Mode interactif :
        git add -p.
        Dans ce mode, il vous est demandé pour chaque modification si vous voulez l'ajouter : répondre y pour oui, n pour non. D'autres options avancées sont possibles, notamment s pour séparer la proposition en plusieurs propositions (voir documentation).
    2. Créer un commit avec les modifications ajoutées précédemment :
      git commit -m "message du commit"
    3. Envoi du commit sur le dépôt distant :
      git push origin <branch_name>.
      Note : origin est le nom par défaut du dépôt sous git. Vous pouvez en ajouter de nouveaux ou changer son nom (voir commandes avancées). Remplacer <branch> par la branche active. Par défaut, c'est master.

Note : vous pouvez ajouter plusieurs séries de modifications et en faire des commits locaux avant d'envoyer le tout sur le serveur. Pratique notamment si on travaille hors connexion ou dans les moments où on risque de casser momentanément le code (ça évite d'embêter les copains !).

Récupérer les modifications depuis le dépôt distant
  • git pull <repo_name> <branch>. Remplacer <branch> par la branche active (par défaut : master) et <repo_name> par le nom du dépôt distant (par défaut : origin).
Statut

Pour connaître le statut des différents fichiers :
git status

S'afficher ainsi :

  • Les fichiers dans le stash (ajoutés via un git add mais non commitées) - en vert
  • Les modifications non ajoutées dans le stash (pas de git add)
  • Les fichiers non ajoutés au suivi
Les branches
  • Créer une nouvelle branche :
    git checkout -b <branch_name>
  • Basculer sur une branche déjà existante (localement ou sur le dépôt distant) : 
    git checkout <branch_name>.
    Si la branche est présente uniquement sur le dépôt distant, il peut être préalablement nécessaire de mettre à jour l'arbre local :
    git fetch <branch_name>.
  • Connaître la liste des branches locales et distantes :
    git branch -a
  • Connaître la liste des branches locales :
    git branch
  • Supprimer une branche localement :
    git branch -d <branch_name>
  • Supprimer une branche sur le dépôt distant :
    git push <repo_name> --delete <branch_name>
  • Fusionner 2 branches :
    1. Se placer dans la branche cible (voir ci-dessus)
    2. git merge <branch_name>
      Ou bien pour fusionner avec une branche distante :
      git merge <repo_name> <branch_name>

Commandes avancées

Les dépôts distants
  • Connaître la liste des dépôts distants :
    git remote -v
  • Modifier l'URL d'un dépôt distant :
    git remote set-url <repo_name> <new_url>
    Exemple : git remote set-url origin ssh://....
  • Ajouter un nouveau dépôt distant :
    git remote add <repo_name> <repo_url>
  • Supprimer un dépôt distant :
    git remote remove <repo_name>
    Note : ceci supprime la référence locale vers le dépôt, pas le dépôt lui-même.
Tags
  • Ajouter un tag :
    git tag <tag_name>
  • Pousser les tags sur le dépôt distant :
    git push <repo_name> --tags
  • Récupérer les tags depuis le dépôt distant :
    git fetch <repo_name> --tags
  • Supprimer un tag localement :
    git tag -d <tag_name>
  • Supprimer un tag sur le dépôt distant :
    git push <repo_name> <tag_name> --delete
  • Lister les tags :
    git tag
Ignorer des fichiers / dossiers

Il est possible d'ignorer certains fichiers ou dossiers. Pour cela, créer un fichier .gitignore et les mentionner à l'intérieur. Ce fichier peut être créer à la racine du dépôt ou dans n'importe quel sous-dossier.

Les fichiers et dossiers mentionnés utilisent le chemin relatif à partir du dossier dans lequel se situe le fichier .gitignore.

Il faut ensuite ajouter le fichier .gitignore au stash et le commiter.

Exceptions :

Il est parfois nécessaire d'indiquer des fichiers dans le gitignore à ne pas ignorer. Il faut précéder alors c'est fichiers d'un point d'exclamation. Par exemple, si on veut ignorer tous les fichiers d'un dossier sauf les fichiers qui portent l'extension ".py", on ajoutera ceci dans le fichier .gitignore :

*
!*.py
Sous-modules
  • Ajouter un sous-module à un dépôt git :
    git submodule add <url-to-submodule> <local-directory>
    Note: local-directory n'est utile que si vous voulez changer le nom par défaut (nom du dépôt du sous-module)
  • Ajouter un sous-module à un dépôt git, en suivant une certaine branche du sous-module :
    git submodule add -b <branch_name> <url-to-submodule> <local-directory>
    Exemple : git submodule add -b master git://... lib
  • Penser ensuite à faire un commit puis un push pour envoyer ces modifications sur le serveur.
  • Cloner un dépôt git avec tous ses sous-modules :
    git clone --recursive <url>
  • Mettre à jour un dépôt parent pour récupérer ses sous-modules (si vous avez fait un git clone sans l'option --recursive par exemple) :
    git submodule update --remote --init
  • Mettre à jour tous les sous-modules d'un dépôt (équivalent à faire un git pull pour chaque sous-module, mais en 1 seule commande) :
    git submodule update --recursive --remote

Note : dans le dépôt parent, le sous-module peut apparaître dans les modifications non validées avec la mention "contenu non suivi". Ce n'est pas gênant, il faut l'ignorer.

Installer Nextcloud-client sur Ubuntu

Bonjour !

Aujourd'hui, je vais vous parler du package nextcloud-client. Il s'agit du client permettant de synchroniser ses fichiers avec un serveur cloud propulsé par Nextcloud.

Nextcloud est un serveur de cloud que vous pouvez installer sur votre propre serveur et ainsi avoir le contrôle total sur vos fichiers personnels (contrairement à Dropbox, Google Drive & compagnie), tout en y accédant toujours de n'importe où. Peut-être connaissez-vous Owncloud ? Et bien Nextcloud en est un fork qui est 100% open-source contrairement à Owncloud. C'est pourquoi j'ai opté lui.

Les mainteneurs de nextcloud ont fait le choix de ne pas packager eux-même le client pour les différentes distributions Linux. Vous devrez donc le compiler vous-même, ou bien utiliser le package fait par mes soins en le téléchargeant ici (pour Ubuntu 16.04 et dérivés) - ou ici (pour KDE Neon).

Si vous choisissez la compilation, commencez par installer les dépendances nécessaires :

Pour KDE Neon :

sudo apt install cmake git build-essential libssl-dev libsqlite3-dev libqt5webkit5-dev libqt5keychain1 qtdeclarative5-dev qt5keychain-dev

Pour Ubuntu 16.04 ou 16.10 :

sudo apt install cmake git build-essential libssl-dev libsqlite3-dev libqt5webkit5-dev libqt5keychain0 qtdeclarative5-dev qt5keychain-dev

Et si vous souhaitez l'intégration à Dolphin (KDE) - pour les deux :

sudo apt install libkf5config-dev libkf5declarative-dev extra-cmake-modules

Puis installez le paquet par compilation ainsi :

git clone https://github.com/nextcloud/client_theming.git nextcloud-client
cd nextcloud-client
git submodule update --init --recursive
mkdir build-linux cd build-linux cmake -D OEM_THEME_DIR=<nextcloud-client-directory>/nextcloudtheme ../client -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc/nextcloud-client make make install

En remplaçant <nextcloud-client-directory> par le chemin absolu du dossier dans lequel vous avez cloné nextcloud (exemple : /home/flo/builds/nextcloud-client).

Et voilà, votre paquet est installé 🙂

Nvidia : Résoudre les problèmes de « tearing »

Bonjour !

Alors voilà, depuis que j'ai fait l'acquisition de ma nouvelle carte graphique Nvidia Geforce GTX 750 ti (OC edition), j'avais un phénomène de "tearing" qui était très important lors du visionnage de vidéo, avec le pilote Nouveau (libre et installé par défaut). Sous Ubuntu (unity) j'avais résolu plus ou moins le problème en passant au pilote propriétaire en version 340.x (car le 360 semble incompatible avec cette carte).

Cependant, ce problème était toujours présent sur certaines vidéos et également à des jeux vidéos un peu gourmands comme Rocket League nouvellement disponible sous Linux. Et il était encore très présent partout sous KDE, sûrement dû au moteur de rendu graphique différent et probablement plus gourmand.

Ayant malgré tout envie de repasser sous KDE qui me plaît toujours mieux qu'Unity, et pour éventuellement pouvoir jouer à de vrais jeux vidéos sous Linux, j'ai cherché une solution à mon problème. Je l'ai trouvé et après 1 jour de tests en tout genre, je n'ai plus aucun phénomène de "tearing". Voici la solution !

Le diagnostic

Le tearing est un phénomène visiblement très courant avec les pilotes propriétaires NVIDIA sous Linux (je n'ai jamais eu de problème sous Windows de ce genre). In se caractérise par un déchirement de l'écran. Vous avez peut-être l'impression comme moi de voir des lignes transparentes à l'écran. Voici une image illustrant le bug (source Wikipedia) :

Illustration du tearingCe phénomène apparaît généralement lors du visionnage de vidéos ou lors de jeu vidéos. De manière générale, quand l'image bouge à l'écran, d'autant plus quand le mouvement est horizontal.

La solution

La première chose à faire est de générer le fichier de configuration du serveur X. Pour ceci, exécutez la commande suivante dans un terminal :

nvidia-xconfig

Ensuite, éditez le fichier suivant en tant que root (super-utilisateur) :

/etc/X11/xorg.conf

Allez dans la section Devices, et ajoutez à la fin les 2 lignes suivants :

Option         "RegistryDwords" "PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"
    Option         "TripleBuffer" "True"

Notez que ces options peuvent augmenter la consommation de la carte graphique. Cela peut donc être un problème pour les ordinateurs portables. Voir l'article source cité ci-dessous pour d'autres options.

Puis, allez dans la section Screen et ajoutez la ligne suivante :

Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

Si d'autres lignes commencent par Option "metamodes" dans cette section, commentez-les à l'aide d'un dièse (#) en début de ligne.

Enregistrez le fichier et quittez-le. Ouvrez maintenant le fichier suivant, toujours en tant que root :

/etc/profile.d/profile.sh

Chez moi ce fichier n'existant mais, je l'ai créé. Ajouter la ligne suivante :

export __GL_THREADED_OPTIMISATIONS=1

Enregistrez le fichier et quittez-le. Exécutez le programme nividia-settings en tant que root (sudo nvidia-settings). Dans la section OpenGL Settings, vérifiez que les cases Sync to VBlank et Allow flipping sont bien cochées. Dans la section X Server XVideo Settings, vérifiez que l'option Auto est sélectionnée, la sélectionner dans le cas contraire.

Enfin, aller dans la section X Server Display Configuration et cliquez sur le bouton Save to X Configuration File. Il se peut qu'il y ait un warning, validez-le. Ouvrez à nouveau le fichier /etc/X11/xorg.conf et vérifiez que les modifications effectuées précédemment sont toujours là. Si ce n'est pas le cas, refaites les modifications. Pour ma part, j'ai du refaire celle de la partie Screen, car elle avait été modifiée (j'ai commenté la ligne modifiée et remis la bonne en dessous).

La dernière étape utilise le programme compton. il faut donc l'installer :

sudo apt-get install compton

Il vous faut ensuite éditer le fichier suivant (qui sera vraissemblablement un nouveau fichier que vous devez créer) :

~/.config/compton.conf

Mettez le contenu suivant (remplacer le contenu préexistant le cas échéant) :

backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = "opengl-swc"; 

# These are important. The first one enables the opengl backend. The last one is the vsync method. Depending on the driver you might need to use a different method.
# The other options are smaller performance tweaks that work well in most cases. 
# You can find the rest of the options here: https://github.com/chjj/compton/wiki/perf-guide, and here: https://github.com/chjj/compton/wiki/vsync-guide

# Shadow
shadow = true;          # Enabled client-side shadows on windows.
no-dock-shadow = true;      # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true;       # Don't draw shadows on DND windows.
clear-shadow = true;        # Zero the part of the shadow's mask behind the window (experimental).
shadow-radius = 7;      # The blur radius for shadows. (default 12)
shadow-offset-x = -7;       # The left offset for shadows. (default -15)
shadow-offset-y = -7;       # The top offset for shadows. (default -15)
shadow-exclude = [
 "! name~=''",
 "n:e:Notification",
 "n:e:Plank",
 "n:e:Docky",
 "g:e:Synapse",
 "g:e:Kupfer",
 "g:e:Conky",
 "n:w:*Firefox*",
 "n:w:*Chrome*",
 "n:w:*Chromium*",
 "class_g ?= 'Notify-osd'",
 "class_g ?= 'Cairo-dock'",
 "class_g ?= 'Xfce4-notifyd'",
 "class_g ?= 'Xfce4-power-manager'"
];

# The shadow exclude options are helpful if you have shadows enabled. Due to the way compton draws its shadows, certain applications will have visual glitches 
# (most applications are fine, only apps that do weird things with xshapes or argb are affected). 
# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher.

# Fading
fading = true; # Fade windows during opacity changes.
fade-delta = 4; # The time between steps in a fade in milliseconds. (default 10).
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
#no-fading-openclose = true; # Fade windows in/out when opening/closing

detect-client-opacity = true; # This prevents opacity being ignored for some apps. For example without this enabled my xfce4-notifyd is 100% opacity no matter what.

# Window type settings
wintypes:
{
  tooltip = { fade = true; shadow = false; };
};

Enfin, lancez la commande suivante :

compton --config /home/yourusername/.config/compton.conf -b

en remplaçant yourusername par votre nom d'utilisateur. Notez que cette commande a fait chez moi un gros bug : je ne pouvais plus cliquer sur rien et j'ai du redémarrer. Mais plus de problème ensuite 😉

Voilà ! Après redémarrage, le tearing ne sera plus qu'un mauvais souvenir !

Source : http://gloriouseggroll.tv/2016-arch-linux-nvidia-get-rid-of-screen-tearing-and-stuttering/ (la solution proposée est pour Archlinux mais je l'ai moi testée sous Ubuntu 16.04 sans problème !).