Git

JE VAIS VOUS LE DIRE FRANCHEMENT : Git est exaspérant.

Attendez ! Ne partez pas tout de suite. Oui, Git est insupportable. Mais il est également indispensable1)

Git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, le créateur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2.

sudo apt-get install git-core gitk
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global user.name "PSEUDO"
git config --global user.email EMAIL

vi ~/.gitconfig
[color]
        diff = auto
        status = auto
        branch = auto
[user]
        name = zpartakov
        email = zpartakov@akademia.ch
[alias]
        ci = commit
        co = checkout
        st = status
        br = branch

sudo apt-get install xclip
xclip -sel clip < ~/.ssh/id_rsa.pub

http://www.qanuq.com/2019/10/06/gerer-fichiers-configuration-avec-git-maniere-elegante/

Mettre les clés ssh nécessaires puis sur chaque client:

 git config --global user.name "<username goes here>"

sur le serveur avec le dépôt

  git config receive.denyCurrentBranch ignore

Les commandes de base

fork then

git remote add origin git@github.com:USER/PROJECT.git

git pull git@github.com:USER/PROJECT.git
git st
git add...
hg commit -m "comment"
git push git@github.com:USER/PROJECT.git
https://github.com/zpartakov/vamosAcomer
git log
#details d'un commit
git show 0943dce3be9c4a0f21c397f62ea18f78a4bcea26

Revenir en arrière d'un commit

  git reset --hard HEAD^
  

Revenir en arrière sur un commit spécifique

  git reset --hard 13e8d052383d96c1cdfef188ede3dd4fdffd53ad
  

ou 13e8d052383d96c1cdfef188ede3dd4fdffd53ad est le numéro du commit

doc: https://git-scm.com/docs/git-reset

git log --patch  | less +/searching_string

chercher les revisions d'un auteur “Jon”

git log --author=Jon

Clone project:

  git clone git@example.com:project-name.git

Create branch with your feature:

  git checkout -b $feature_name

Write code. Commit changes:

  git commit -am "My feature is ready"

Push your branch to GitLab:

  git push origin $feature_name

voir https://docs.gitlab.com/ee/gitlab-basics/feature_branch_workflow.html#feature-branch-workflow

 git clone -b my-branch https://git@github.com/username/myproject.git

exemple, cloner la branche stable de limesurvey et la mettre à jour

 git clone -b 2.06lts git@github.com:LimeSurvey/LimeSurvey.git
 git pull git@github.com:LimeSurvey/LimeSurvey.git 2.06lts

Pour approuver une branche

FIXME

Si vous avez un peu suivi le débat en informatique on a plus le droit de dire master et slave paske c'est mal. Donc maintenant faut dire main et negro… en fait je sais pas. Soumis?

En tout cas, certains providers git exigent maintenant qu'on appelle la branche principale master.

Comment changer: https://andycostanza.gitlab.io/blog/fr/posts/2022/renommer_master_en_main_avec_git/

Thks, Andy C.!

C'est toujours mieux que rien, mais que cela ne vous empêche pas de changer p. ex. des mots de passe de connexion MySQL ou autres qui auraient été exposés! Car on a aucun moyen de savoir ce qui a filtré ou non pendant que les données étaient exposées.
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all
git commit
git push origin --force --all

Pour avoir tous les sous-modules d'un repository git

git submodule update --init --recursive

le plus simple:

  echo "Deny from all" > .git/.htaccess

https://nouslesdevs.com/cli/securiser-un-git/

Si vous avez un méchant message lors d'un pull ou d'un push genre:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Déclarer les clés dans la section Deploy Keys pour le dépot:

https://gitlab.com/yourName/yourRepo/-/settings/repository

Voir l'onglet “Clefs de déploiement à accès privé”

Versions paquet zip/tarball to download with source code

git tag -a v1.0 #changer pour la bonne version
git push --tags [optional git repo]]

Tutoriels

Bouquins

git GUI

des clients graphiques pour git

gitcraken, un client graphique simple à configurer pour voir vos projets git

source: http://www.gitkraken.com/

abandonné, passait son temps à faire de la pub pour sa version payante
qgit = un vrai logiciel linux: moche, mais efficace.
sudo apt-get install qgit

Installable sur un serveur, avec un petit coup de

xhost+
ssh votre_serveur

ou

ssh -X votre_serveur 
cd votre_repertoire_git
qgit

Le résultat est pas aussi top que sur gitlab mais c'est quand même assez bon:

GitLab

Version web libre de git avec une vue kanboard

https://gitlab.com/

c'est le plus simple si vous ne voulez pas installer tout le tintouin…

Mon espace gitlab: https://gitlab.com/zpartakov

https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html

https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html

https://gitlab.com/groups/new

https://gitlab.com/groups/communication-web/-/group_members>

Système de ticketing de gitlab

Utiliser gitlab comme outil collaboratif de gestion de projet/tâches

Github

Github a été racheté par MS. C'est donc mal. On peut facilement migrer ses dépôts sur gitlab, qui est libre et opensource: Switching from GitHub to GitLab.

Si on veut faire manuellement: créer le repository dans gitlab (on peut cloner le repository de github) puis:

exemple avec mes recettes de cuisine

git pull git@gitlab.com:zpartakov/recipesCakePHP.git
#soit le répertoire créé recipesCakePHP
mv ~/recettes/.git ~/recettes/.git.old
mv recipesCakePHP/.git ~/recettes
cd ~/recettes
git remote add gitlab git@gitlab.com:zpartakov/recipesCakePHP.git
git push -f --tags gitlab refs/heads/*:refs/heads/*
puis comme d'hab avec git

Et si vous voulez qu'on vous voie toujours sur windaube, ben suffit de laisser votre repo ouvert et de pointer depuis sur vos repos ouverts, ex: https://github.com/zpartakov

GitHub provides some official RSS feeds officially:

  Repo releases: https://github.com/:owner/:repo/releases.atom
  Repo commits: https://github.com/:owner/:repo/commits.atom
  User activities: https://github.com/:user.atom
  Private feed: https://github.com/:user.private.atom?token=:secret (You can find Subscribe to your news feed in dashboard page after login)

Credits: https://stackoverflow.com/questions/7353538/setting-up-a-github-commit-rss-feed#7353586

https://blog.stephane-robert.info/post/gitlab-api/

git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| sed -n 's/^blob //p' \
| sort --numeric-sort --key=2 \
| tail -n 10 \
| cut -c 1-12,41- \
| $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

source: https://stackoverflow.com/questions/9456550/how-to-find-the-n-largest-files-in-a-git-repository/28783843

Voir aussi


1)
source: l'excellent David Demaree, Git par la pratique paru chez Eyrolles, que je vous recommande chaudement, voir infra sous “Bouquins”
  • info/git/homepage.txt
  • Dernière modification : 2022/10/21 12:29
  • de radeff