Utiliser Git

De Wiki Amis SH
Aller à la navigation Aller à la recherche



Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack


Utiliser Git

Prérequis

Installer et configurer Git

Installer et configurer Git sur Linux.

Utilisation

add - Ajouter des fichiers dans le dépôt Git

# Porte les nouveaux fichiers à l'attention de Git pour les inclure dans les instantanés du dépôt Git.
# N'ajoute pas directement les nouveaux fichiers dans le dépôt, il faudra continuer avec la commande commit pour ajouter les fichiers dans le dépôt.
git add nom_du_fichier

branch

# Permet de consulter ou de construire une nouvelle branche.
git branch
git branch version_un_de_mon_projet

cat-file

# Afficher le type d'un fichier avec la commande git cat-file et la valeur SHA-1 du fichier.
git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4

checkout

# Se positionner sur une branche :
git checkout nom-de-la-branche
# Avec la version 2.23.0, nous pouvons également utiliser git switch pour créer et changer de branche.
git switch nom-de-la-branche
Source : https://www.it-swarm.dev/fr/git/comment-puis-je-changer-de-branche-dans-git/834828422/

clone - Récupérer un dépôt

# Si le dépôt se trouve sur un serveur distant :
git clone utilisateur@nom_ou_ip_serveur:/chemin/vers/dépôt
# Si le dépôt se trouve sur un serveur local :
git clone /chemin/vers/dépôt

commit - Prendre en compte ses modifications sur le dépôt

# Mettre à jour le dépôt local avec les modifications effectuées.
git commit -m "Le message de commit, celui qui apparaît dans git log."
# Ajouter un "#chiffre" à la fin du commit pour pousser le changement vers une issue ouverte et suivre les modifications liées à une problématique.
git commit -m "Le message de commit, celui qui apparaît dans git log de l'issue 1. #1"
# Envoyer uniquement certains fichiers en ajoutant la liste des fichiers à la suite du message de commit :
git commit -m "Le message de commit." fichier1 fichier2
# Normalement, il faut passer par "git add" pour chaque fichier modifié.
# Les nouveaux fichiers ne seront pas pris en compte avec l'option "-a" !
# L'option "-a" permet d'ajouter automatiquement tous les fichiers modifiés déjà suivis.
# Si l'option -m n'est pas renseignée lors de la commande git add, un éditeur par défaut s'ouvrira pour permettre l'ajout d'un message de commit.
git commit -am "Le message de commit."
# Modifier un commentaire.
git commit --amend -m "Le nouveau commentaire."
# Commiter sous une autre identité.
git commit --author "Prénom Nom <mail@addresse.com>"
# Antidater un commit.
GIT_AUTHOR_DATE="2019-11-25 10:30 +100" git commit -m "Un commit antidaté."
# Lors de l'utilisation de branches, bien faire attention vers quelle branche sont envoyés les modifications.
git branch
# À ce stade, les autres développeurs ne savent pas que vous avez fait des modifications.
# Il faut pousser les modifications vers le dépôt avec push.
# Compter le nombre de commits par utilisateur.
# Ajouter l'option -e pour afficher les adresses mails.
git shortlog -sn

diff - Différence entre les fichiers

# Pour énumérer tous les conflits actuels entre la copie de travail et la dernière révision distante de votre branche :
git diff
# La commande git diff permet de lister les conflits. Pour visualiser les conflits d'un fichier :
git diff --base <nom-fichier>
# La commande suivante est utilisée pour afficher les conflits entre les branches à fusionner avant de les fusionner :
git diff <branche-source> <branche-cible>

fetch

# La commande git fetch permet à un utilisateur d'extraire tous les fichiers du dépôt distant qui ne sont pas actuellement dans le répertoire de travail local.
git fetch origin

grep

# La commande git grep permet de rechercher dans les arbres de contenu des expressions ou des mots.
git grep "www.visionduweb.fr"

instaweb

# La commande git instaweb permet d’exécuter un serveur Web par interface avec le dépôt local.
git instaweb --httpd=webrick

merge - Fusionner une branche vers la branche principale

# Quand vous avez terminé de travailler sur une branche, vous pouvez fusionner vos modifications vers la branche principale master.
# La commande "git merge cats" prendrait en compte toutes les modifications effectuées sur la branche "cats" et les ajoutera à la branche master.
git merge

push - Publier ses modifications vers le dépôt

# Rendre vos modifications visibles dans le dépôt principale de Git en les poussant avec la commande push.
git push
git push origin master

pull - Récupérer les modifications effectuées sur le dépôt Git

# Permet de mettre à jour la version locale du dépôt depuis la version distante.
# Depuis votre ordinateur local, vous voulez la version la plus à jour du dépôt pour travailler dessus, on tire les modifications du dépôt distant vers le dépôt local avec la commande pull.
git pull

error: Vos modifications locales aux fichiers suivants seraient écrasées par la fusion

# Erreur lors de la mise à jour des fichiers depuis le serveur GIT vers la machine cliente :
git pull origin master
error: Vos modifications locales aux fichiers suivants seraient écrasées par la fusion :
       .htaccess
Veuillez valider ou remiser vos modifications avant la fusion.
Abandon
# Le fichier provenant du serveur GIT va remplacer le fichier .htaccess qui était présent sur la machine cliente :
git checkout --theirs .htaccess
git pull origin master

log - Afficher les modifications

# Génère le log d'une branche.
git log
# Si vous travaillez sur une branche de test et qu'un développeur modifie la branche master, vous ne serez pas affecter.
# Faire apparaître toutes les modifications.
git log --all
Documentation : https://www.git-scm.com/docs/git-log

ls-tree

# Afficher un fichier arborescent avec le nom et le mode de chaque élément, et la valeur SHA-1 du blob.
git ls-tree HEAD

rebase

# La commande git rebase est utilisée pour réappliquer des commits sur une autre branche.
git rebase master

request-pull - Créer un Pull Request en ligne de commande

# Créer un Pull Request en ligne de commande avec git request-pull.
git request-pull upstream master

remote - Se connecter à un dépôt distant

# La commande git remote permet à un utilisateur de se connecter à un dépôt distant.
# La commande suivante répertorie les dépôts distants actuellement configurés :
git remote --v

remote

remote - Connecter un dépôt local vers un dépôt distant

git remote add origin ip_du_serveur
git remote add origin https://github.com/user/repo.git
# Vérifier :
git remote -v
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)
# Après avoir git init un dépôt local, utiliser la commande suivante pour connecter le dépôt local à Github :
git remote add depot_distant git@github.com:utilisateur/depot_utilisateur.git
# Si le dépôt local est déjà connecté à GitHub, il est possible de modifier l'adresse du dépôt de Github :
git remote set-url depot_distant git@github.com:utilisateur2/depot_utilisateur2.git
Source : https://help.github.com/en/github/using-git/managing-remote-repositories

remote - Maintenir un dépôt ayant été forké depuis Github

# Étape 0 : Cloner un dépôt ayant été forké depuis Github :
git clone https://github.com/ZerooCool/denyhosts.git
# Étape 1 : Connecter le dépôt local provenant d'un fork, au projet d'origine officiel :
git remote add upstream https://github.com/denyhosts/denyhosts.git

# Supprimer le upstream en cas d'erreur d'adresse par exemple :
git remote rm upstream

# Vérifier que tout est correct avec la commande :
git remote -v
origin	https://github.com/ZerooCool/denyhosts.git (fetch)
origin	https://github.com/ZerooCool/denyhosts.git (push)
upstream	https://github.com/denyhosts/denyhosts.git (fetch)
upstream	https://github.com/denyhosts/denyhosts.git (push)
# Étape 2 : Récupérer toutes les branches et mises à jour en amont (maître) :
git fetch upstream

# S'assurer d'être sur la branche master :
git checkout master
# Étape 3 : Réécrire votre maître avec le maître en amont à l'aide de git rebase.
# N'utiliser rebase que si vous savez ce que vous faites et si vos modifications n'ont pas encore été envoyées sur un dépôt distant. Sinon, utiliser merge.
# Faire un merge (git merge upstream master) pour mettre à jour le fork laisserait une trace de la mise à jour.
# Cela ne serait pas très propre pour un futur pull request ou les commits de merge seraient affichés.
# Le but du rebase est d'avoir un historique plus propre.
# La solution est donc de faire un rebase !
git rebase upstream/master
# Note :
# La commande :
# git pull --rebase upstream master
# Serrait équivalente aux deux commandes :
# git fetch upstream && git rebase upstream/master
# Effectuer les modifications à mener sur le travail local.
git add .
git commit
# Vu que je suis passé en authentification à deux facteurs, je dois :
# Soit créer une clé SSH pour m'identifier ...
# Soit créer un token d'identification ...
# https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
# Depuis le menu utilisateur : Settings / Developer settings / Personal access tokens
# Cocher les droits pour "repo".
# Le Token remplacera le mot de passe lors de l'identification. Attention à ne pas rajouter un espace vide au début ou à la fin du token.
# Étape 4 : Pousser les modifications sur votre propre dépôt local, forké sur GitHub :
git push origin master
# Vous devrez peut-être forcer le push afin de pousser les modifications sur votre propre dépôt local, forké sur GitHub :
git push -f origin master
# Le repo de fork a bien été mis à jour.
# Informations complémentaires :
# Afficher toutes les branches disponibles :
git branch -a
# Affiche :
master
remotes/origin/HEAD -> origin/master
remotes/origin/Python2.6
remotes/origin/bug_128
remotes/origin/bug_64
...
# Lorsque d'une tentative de changement de branche avec git checkout origin/nom_de_la_branche, j'ai obtenu "HEAD détachée sur origin/nom_de_la_branche".
# Le changement de branche fonctionne malgré tout, les fichiers sont bien différents sur la nouvelle branche :
git checkout remotes/origin/nom_de_la_branche
git checkout origin/nom_de_la_branche
# Pour pouvoir changer de branche :
git remote update
git fetch 
# Problème rencontré, si je crée un fichier sous la branche master, il apparaît sur toutes les branches !
# Il est nécessaire de git add Fichier et git commit pour positionner le fichier sur sa bonne branche.
# Il n'apparaîtra plus sur les autres branches.
# Si on veut suivre les changements depuis la branche locale (Ce qui devrait suffire, puisqu'on a rebase) :
# La branche ainsi track pourra être appelée normalement : git checkout bug_128
git checkout --track origin/<BRANCH-NAME>
git checkout --track origin/bug_128

# Si on veut suivre les changements depuis la branche officielle (Pas sur que ce soit la bonne méthode) :
# La branche ainsi track pourra être appelée normalement : git checkout bug_128 (Attention car si on track une branche qui à le même nom ... fatal: Une branche nommée 'bug_128' existe déjà.
git checkout --track upstream/<BRANCH-NAME>
git checkout --track upstream/bug_128
# Si les droits de validation sur le référentiel en amont sont disponibles, on peut également créer une branche en locale et effectuer un travail qui ira en amont.
git checkout -b upstream upstream/master
# Mettre à jour son contenu :
git pull
Si une branche est créée localement sans la lier au dépôt en amont, on peut utiliser la ligne de commande suivante pour lier la branche au dépôt en amont :
git branch --set-upstream-to=upstream/master upstream_master

reset - Supprimer des fichiers dans le dépôt Git

# Annuler les modifications apportées depuis la dernière mise à jour avec l'option --hard. Attention cette manipulation est irréversible !
# Si index.php a été modifié par erreur et que l'on souhaite annuler ses modifications :
git reset --hard index.php
# Pour réinitialiser l’index et le répertoire de travail à l’état du dernier commit, la commande git reset est utilisée :
git reset --hard HEAD
# git reset soft mixed ou hard : https://davidzych.com/difference-between-git-reset-soft-mixed-and-hard/

rm - Arrêter ou retirer des fichiers de la copie locale

# Arrêter le suivi d'un fichier sans le supprimer de la copie locale.
# Utiliser l'option --cached conserve le fichier local mais arrête son suivi.
git rm --cached fichier_prive
# Retirer un fichier et le supprimer de la copie locale. Le statut du fichier sera 'deleted'.
git rm chemin_vers_le_fichier
# Faire réapparaître le fichier en cas de mauvaise manipulation :
git reset chemin_vers_le_fichier
# Autre exemple :
git rm --cached printcap # Modified by CUPS
echo printcap >> .gitignore
git commit -a -m "Don't track printcap"

show

# Afficher des informations sur tout fichier git avec la commande git show.
git show

stash - Commit temporaire

# La commande git stash aide à enregistrer les changements qui ne doivent pas être commit immédiatement. C’est un commit temporaire.
git stash

status - Vérifier le statut du dépôt

# Affiche la liste des fichiers modifiés et les fichiers qui doivent être validés pour être ajoutés ainsi que la branche du dépôt actuelle sur laquelle on travail.
git status

Abandonner le suivi pour certains fichiers

# Lors d'une phase de débogage, il est généralement peu utile de suivre les modifications de certains fichiers.
# La commande git update-index et son flag --assume-unchanged va permettre d'ignorer les changements du ou des fichiers précisés.
git update-index --assume-unchanged README.md
# Pour revenir à la normale, utiliser le flag --no-assume-unchanged :
git update-index --no-assume-unchanged README.md

Copier les fichiers inconnus de Git en dehors du répertoire de travail

# A revoir !
# Retirer l'option --exclude-standard si vous désirez exporter les fichiers ignorés par Git.
git ls-files --others --exclude-standard | cpio -pmd /chemin/de/destination

Supprimer les fichiers inconnus de Git

# A revoir !
# La commande git clean -n va lister les fichiers et répertoires concernés par le nettoyage du répertoire de travail.
git clean -n -d <path>
# Supprimer la liste des fichiers non suivis en enlevant le -n.
# Supprimer uniquement les fichiers et conserver les répertoires vides, enlever l'option -d.
# Le flag -x permet d'inclure les fichiers ignorés par Git depuis le fichier .gitignore. Pour ne supprimer que les fichiers ignorés, utiliser l'option -X.
# Tant que l'option clean.requireForce n'est pas définie à false dans votre fichier de configuration, Git contraindra git clean à ne fonctionner qu'avec les flags -n et -f.
# Soit on test avec -n soit on force l'action de nettoyage de l'arbre de travail.

archive - Exporter son projet dans une archive ZIP ou TAR.GZ

# Pour obtenir une archive d'une version de votre projet, utiliser git archive.
git archive --format=zip --prefix=mon_projet-1.0/ -9 1.0 > /chemin/de/destination/mon-projet-1.0.zip
# Connaître la liste des formats supportés :
git archive --list
# --format permet de spécifier le format de l'archive.
# --prefix va préfixer tous les noms de fichiers et dossiers. Ne pas oublier le slash terminal si vous souhaitez regrouper les documents dans un dossier.
# -9 est une option spécifique du format d'exportation ZIP. De 0 à 9, il détermine le niveau de compression.
# 1.0 est le nom du tag. Ici c'est la version 1.0 qui sera récupérée. Vous pouvez également exporter des branches, le HEAD et autres tree-ish.
# Pour finir on redirige le tout dans un fichier.
# Pour exporter les fichiers contenu dans le répertoire d'une branche donnée la commande devient :
git archive --format=zip --prefix=mon_projet-dev/ -9 dev:src/ > /chemin/de/destination/mon_projet-dev.zip
# L'export au format TAR.GZ se fait de la manière suivante :
git archive --format=tar --prefix=mon_projet-1.0/ 1.0 | gzip > /chemin/de/destination/mon-projet-1.0.tar.gz
# Exporter la branche master vers une archive au format tar.
git archive --format=tar master

Publier ses modifications vers plusieurs dépôts

Récupérer un correctif, un commit, sur toutes les branches, depuis la machine locale.
Ici, il est surtout question de récupérer le fichier README, pour conserver un README identique.
On utilise la branche de développement, par exemple, la branche phpsecinfo-zeroocool-v0.2.1 pour effectuer les modifications du README.
On pousse les correctifs comme d'habitude. On obtient un ID pour l'historique de la transaction depuis l'historique de Github :
https://github.com/ZerooCool/phpsecinfo/commit/ca82f1c0a9825afac5690619775bd2d59e8123fa#diff-04c6e90faac2675aa89e2176d2eec7d8
L'ID a utiliser est le suivant : ca82f1c0a9825afac5690619775bd2d59e8123fa
On se positionne sur la branche devant être modifiée, puis, on cherry-pick le commit déjà effectué sur la branche en développement, ce qui pousse le commit sur la branche sélectionnée, ici, phpsecinfo-v0.2.1
git checkout phpsecinfo-v0.2.1
git cherry-pick ca82f1c0a9825afac5690619775bd2d59e8123fa
Il semble que seul le commit soit poussé, ce qui permettrait de conserver un code différent sur les autres lignes du fichier de la branche de destination.
Le fichier sur la machine locale est maintenant à jour, et, identique à la version de la branche de développement.
Il faut encore pousser la branche locale vers la branche distante sur Github.
Inutile ici de faire un commit, on pousse directement.
git push origin phpsecinfo-v0.2.1
On répète cette étape pour chaque branche devant recevoir le correctif de README.

Annuler un commit - push

Source : http://blog.mathieu-leplatre.info/git-annuler-proprement-un-commit-apres-un-push-fr.html

Supprimer un tag du dépôt distant

# Le marquage est utilisé pour marquer des commits spécifiques avec des appels simples.
git tag 1.1.0 id_du_commit
# La commande git push --tags ne pousse pas les tags supprimés localement.
# Pour supprimer un tag sur le serveur distant, reprendre la syntaxe de suppression d'une branche :
git push origin :1.1.0
# Il est également possible d'utiliser la commande git tag et son flag -d :
git tag -d 1.1.0

Gérer des branches

# Travailler sur une branche locale qui sera liée à la branche distante avec la commande git branch.
# Le travail sera toujours effectué sur la branche locale et poussé vers la branche distante.

Créer une nouvelle branche

# Créer une nouvelle branche locale a partir de la révision actuelle et s'y rendre :
git checkout -b ma_super_branche
# Créer une branche mais rester sur la branche actuelle :
git branch ma_super_branche
# Avant de faire un pull ou un push, visualiser la branche sur laquelle on se trouve :
git branch

Afficher les branche locales

# Afficher les branches locales :
git branch -r

Afficher les branche distante

# Afficher les branches locales et distantes :
git branch -a

Changer de branche

# Changer de branche :
git checkout nom_de_la_branche

Récupérer une branche dans le cas d'un dépôt local utilisant deux dépôts distants différents

# Lorsque j'ai essayé git checkout origin/<BRANCH-NAME>, j'ai obtenu "HEAD détachée sur origin/<BRANCH-NAME>"
# Pour arriver à bien changer de branche :
git remote update
git fetch 
# Utiliser le dépôt personnel qui a été cloné depuis Github :
git checkout --track origin/<BRANCH-NAME>
# Utiliser le dépôt officiel qui a été ajouté avec upstream :
git checkout --track upstream/<BRANCH-NAME>

Lister la dernière modification effectuée sur chaque branche locale

git branch -v

Fusionner une branche

# Pour fusionner toutes vos modifications dans une branche nom_de_la_branche_de_destination, il faut que votre répertoire de travail soit propre, c'est à dire que git status n'affiche aucun fichier en attente devant être ajouté au dépôt.
# Un git branch vous indiquera à l'issue de cette manipulation que vous vous trouvez sur nom_de_la_branche_de_destination.
git checkout nom_de_la_branche_de_destination
git pull . nom_de_la_branche_à_merger
# Il est possible que des conflits soient présents.
# Résoudre les conflits pour que la branche de développement nom_de_la_branche_à_merger soit fusionnée vers la branche nom_de_la_branche_de_destination.

Supprimer une branche

# Supprimer une branche locale avec l'option "-d" de "git branch".
# Si la branche contient des commits non fusionner, utiliser l'option -D.
git branch -d ma_branche
# Supprimer une branche du dépôt distant s'effectue de la même manière que pour une publication à l'aide de la commande git push mais en précédant le nom de la branche d'un double point.
git push origin :ma_branche

Maintenance

# Au fur et a mesure de vos commits, votre copie locale du dépôt s'encrasse.
# Il est bon de faire le ménage de temps en temps.

fsck

# Vérifier l'intégrité du système de fichiers git.
# Tous les fichiers corrompus seront identifiés.
git fsck

gc

# Cette commande lance entre autre, git repack et git prune (gc = garbage collect) :
# La première va recompresser les fichiers, et s'assurer que le dépôt n'est pas fragmenté.
# La deuxième permet de faire le ménage dans les branches distantes non utilisées : suppression des branches locales de suivi qui pointent sur une branche distante supprimée.
# Cette commande n'affectera pas votre travail, elle rendra l’accès a votre dépôt local plus rapide, et diminuera l'espace occupé par le dossier .git.
# Pour optimiser le dépôt en supprimant les fichiers inutiles et les optimiser :
git gc

prune

# Les fichiers qui n’ont pas de pointeurs entrants seront supprimés.
git prune

A reprendre

Pour lancer le mode graphique git-gui, la commande qui fonctionne chez moi depuis le répertoire de travail est git gui.
Commandes Spécifiques Git
Le fait que Git ait été conçu avec un gros projet comme Linux, il existe un paquet de commandes Git. Néanmoins, pour utiliser les basiques de Git, vous n’aurez besoin de connaître que quelques termes. Ils commencent tous de la même façon avec le mot “git”.
git help : Oublié une commande ? Saisissez-ça dans la ligne de commande pour ramener les 21 commandes les plus courues de Git. Vous pouvez aussi être plus spécifique et saisir “git help init” ou tout autre terme pour voir comment utiliser et configurer une commande spécifique git.

Créer le git commit initial

En ligne de commande

cd /home/user/path/GIT/ (Se positionner dans le dossier de la Working copy.)
echo "Créer un fichier" > README (Création d'un fichier README.)
git add README (Ajout du fichier README à la Staging area.)
git commit -m "Mon premier commit." (Commit de la Staging area avec le commentaire « Mon premier commit. ». Le premier commit a pour effet de créer la branche « master » et d'y ajouter le commit.)
En réponse dans la console :
[master (commit racine) 7b960a7] GIT DEPOT 001 First - En transition
1 file changed, 1 insertion(+)
create mode 100644 README
Manuel des commandes à télécharger depuis Développez : http://loic-guibert.developpez.com/tutoriels/git/get-started/fichiers/git-cheatsheet.pdf

Avec git gui

Utiliser l'utilitaire graphique git gui pour créer facilement le premier commit depuis le répertoire de travail.
git-gui facilite les commit : ajout/retrait de fichiers dans la Staging area, commit avec un commentaire.
Lancer avec la commande git gui
Avec git-gui, les utilisateurs qui vont partager des fichiers entre Linux et Windows vont avoir des problèmes de retour chariot.
Rester vigilant lorsque plusieurs systèmes d'exploitation utilisent le même dépôt.
Au premier lancement de git gui, il est possible d'avoir le message suivant :
Erreur : No word lists can be found for the language "fr_FR".
Il faut installer le paquet aspell-fr qui contient le dictionnaire français pour aspell.
sudo apt install aspell-fr

Avec gitk

L'utilitaire gitk n'est pas très beau visuellement.
L'utilitaire git-gui a besoin de gitk pour pouvoir gérer les historiques de versions.
Le travail local est maintenant possible grâce à git :
Suivi des modifications des données avec l'historique, création de branches, fusion, retour en arrière...
Gitk est vraiment Rox.
Définition: ROX sont les initiales de "RISC OS on X". C'est un logiciel libre distribué selon les termes de la licence GNU GPL.

Utiliser Git webui

D'autres outils existent pour utiliser Git.
Git webui permet d'utiliser Git en mode graphique depuis un navigateur web.
Mise en place de façades : Serveur HTTP/HTTPS pour l'accès au dépôt, application web de navigation dans le dépôt...
Source : https://github.com/alberthier/git-webui

Mettre à jour un fork Github existant

Mettre à jour la branche master d'un fork Github existant

# Le projet Git redmine_messenger officiel : https://github.com/AlphaNodes/redmine_messenger
# Le projet Git redmine_messenger fork de Zer00CooL : https://github.com/ZerooCool/redmine_messenger/tree/master
# Ici, le projet local sera mis à jour avec le projet officiel, puis, publié vers le fork de Github.
# Vérifier si le fork est à jour avec le dépôt officiel :
# Ajouter le dépôt source en tant que dépôt upstream :
git remote add upstream https://github.com/AlphaNodes/redmine_messenger.git
# Supprimer le upstream en cas d'erreur d'adresse par exemple :
git remote rm upstream
# Vérifier que tout est correct avec la commande :
git remote -v
origin	https://github.com/ZerooCool/redmine_messenger.git (fetch)
origin	https://github.com/ZerooCool/redmine_messenger.git (push)
upstream	git@github.com:AlphaNodes/redmine_messenger.git (fetch)
upstream	git@github.com:AlphaNodes/redmine_messenger.git (push)
# Récupérer les mises à jour de upstream :
git fetch upstream
# Faire un merge pour mettre à jour le fork laisserait une trace de la mise à jour, ce qui peut être mauvais pour un futur pull request car les commits de merge seraient affichés.
# git merge upstream/master)
# La solution est donc de faire un rebase :
git rebase upstream/master
# Un développement correct avec une branche par modification devrait éviter qu'un conflit n'apparaisse lors de cette opération.
# Il suffit ensuite de pousser les modifications sur GitHub :
git push origin master

Mettre à jour la branche patch-1 d'un fork Github existant

# Ici, le projet local sera mis à jour pour la branche locale patch-1 avec le projet officiel sur sa branche master, puis, publié vers le fork de Github sur la branche patch-1.
# Mettre à jour la branche locale patch-1
git checkout patch-1
git remote add upstream https://github.com/AlphaNodes/redmine_messenger.git
# Je récupère la version à jour du projet officiel vers ma branche patch-1 locale.
git pull upstream master
# Conflit sur le fichier de traduction fr.
# En fait, MON fichier langue sur mon dépôt Github et local est obsolète.
# J'avais effectué les dernières modifications directement sur le dépôt officiel.
# Quand je veux récupérer le projet officiel, il y a alors un merge à effectuer sur le fichier de langue.
# Le fichier de langue est corrigé sur ma machine :
# Prendre en compte la version locale qui a été modifiée avec le paramètre --theirs :
git checkout --theirs config/locales/fr.yml
# Considérer le fichier concerné :
git add config/locales/fr.yml
# Terminer la fusion :
git commit -m "Langue fusionnée sur patch-1."
# La branche patch-1 est à jour sur mon propre dépôt Github, et, correspond à la version officielle !
git push origin patch-1

Travail en équipe

Pour commencer simplement nous mettons tout le monde au même niveau.
Pas de gestion de rôles ni de droits sur les dépôts.
Mise en place d'un dépôt central de référence, dépôt public du projet qui va contenir le travail d'équipe.
Chaque développeur a en local une copie liée au dépôt de référence.
Chaque développeur travaille sur sa branche locale et rapatrie régulièrement les modifications du dépôt de référence pour être à jour.
Il fait l'intégration de son travail sur la branche publique concernée (rebase/merge...).
Il pousse les modifications de la branche publique sur le dépôt de référence (origin/master).
Ces dépôts contiennent, au minimum, une branche locale de travail.

Organiser le dépôt central.

Ne pas avoir à saisir plusieurs fois le mot de passe utilisateur de Git

Utiliser Credential Helper

# Le credential helper permet de stocker en mémoire le mot de passe utilisateur de Git pendant 15min par défaut.
git config --global credential.helper cache
# Le credential helper permet de stocker en mémoire le mot de passe utilisateur de Git pendant 60min.
git config --global credential.helper "cache --timeout=3600"
 Source : https://blog.lecacheur.com/2015/11/05/git-le-b-a-ba-memoriser-son-mot-de-passe/

Bibliographie

 Source : https://rogerdudler.github.io/git-guide/index.fr.html
 S’entraîner avec Git : http://onlywei.github.io/explain-git-with-d3/
 Essayer de corriger les fins de ligne avec git filter-branch, mais sans chance : https://www.ipgirl.com/4512/essayer-de-corriger-les-fins-de-ligne-avec-git-filter-branch-mais-sans-chance.html

A suivre

Source du tutoriel : http://loic-guibert.developpez.com/tutoriels/git/get-started/
Tutoriel complémentaire : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/git_linux0
Installer et configurer un serveur GIT sous Linux : https://www.val-r.fr/geek/softwares/git/installer-et-configurer-un-serveur-git-sous-linux

Les bases de GIT pour versionner le code source

 https://git-scm.com/book/fr/v1/Les-bases-de-Git
 http://git-scm.com/book/fr/v2
 http://www.git-scm.com/book/fr/v2/Les-bases-de-Git-Travailler-avec-des-d%C3%A9p%C3%B4ts-distants
 Enregistrer les modifications dans le dépôt
 https://git-scm.com/book/fr/v1/Les-bases-de-Git-Enregistrer-des-modifications-dans-le-d%C3%A9p%C3%B4t
 Liste des hébergeurs GIT en ligne et de leurs options : https://git.wiki.kernel.org/index.php/GitHosting
 Télécharger le PDF Visual cheat-sheet Git (Sur Développez, avec accès membre.)
 http://www.developpez.com/telechargements/auth/id/424de0e60f44247edbd7713c5364e547
 http://guidella.free.fr/General/utilisationGit.html
 Git et git gui : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/git_linux0

Cheatsheet

 Git Cheatsheet : https://ftp.visionduweb.fr/DOCUMENTATIONS/PROGRAMMATION/GIT%20cheatsheet.pdf
 Getting started with Git : https://riptutorial.com/git

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Miner de la cryptomonnaie.