User:Youni Verciti/Memo cmd

From Wikitech
Jump to navigation Jump to search

Cron

Pour executer une commande PWB via jsub indiquer le chemin soit :

jsub /shared/pywikipedia/core/scripts/archivebot.py -help
jsub /shared/pywikipedia/core/scripts/archivebot.py Wikiversité:Archives/config -simulate

Help:Cron

  1. crontab -e

min | heure | jour du mois | mois | jour de la semaine

* * * * 7 monprogramme > /dev/null Chaque dimanche  - Attention cette commande execute monprogramme en continu tout la journée, ajouter heure.
@weekly monprogramme > /dev/null hebdomadaire

Those commands are working good

  1. ssh y-verciti@login.tools.wmflabs.org
  2. ssh -p 29418 y-verciti@gerrit.wikimedia.org test la validité de la clé ssh sur gerrit
  3. git clone http://tools-static.wmflabs.org/vocabulary-index/vocabulary-index.git Clone le projet avec public_html dans le repertoire courrant.
  4. git clone ssh://y-verciti@gerrit.wikimedia.org:29418/labs/tools/vocabulary-index
  5. tools.toolname@tools-login:~$ webservice start

scp (Secure CoPy)

Copying file to host:

scp SourceFile user@host:directory/TargetFile

Copying file from host:

scp user@host:directory/SourceFile TargetFile
scp -r user@host:directory/SourceFolder TargetFolder

Note that if the remote host uses a port other than the default of 22, it can be specified in the command. For example, copying a file from host:

scp -P 2222 user@host:directory/SourceFile TargetFile

see also https://wikitech.wikimedia.org/wiki/DrTrigonBot/HowTo_and_Information

$> scp (-r) file y-verciti@tools-login.wmflabs.org:/data/project/vocabulary-index/

git/git-review

Git config

  1. git config user.name "Your Name" ou git config --global user.name "Your Name"
  2. git config user.email mail@provider ou git config --global user.email you@example.com
  3. git config -l Affiche la config du client git

/.gitignore les fichiers *.pyc de Python

Les .pyc c'est le python compilé. Le format va varier en fonction de la version de python , de la machine etc. Tant qu'à faire ajouter un fichier /.gitignore contenant : *.pyc

Il faut récupérer le patch: git-review -d 271268 retirer les fichiers .pyc corriger le commit et le renvoyer à Gerrit comme le Change-Id: sera toujours le meme, Gerrit le reconnaitra comme un nouveau patch pour le meme changement ca fera un patchset 2 enverra un mail à tout ceux qui suivent le changement au bout d'un moment on aura un patchset parfait qui pourra alors être approuvé et mettre à jour la branche 'master' dans Gerrit

git show

git show montre le commit "en cours" 
  commit 77da4f066f4527b24844e23855f379f30489020f
  Author: Christian Aistleitner <christian@quelltextlich.at>
git show [branche]   montre (le dernier)les commits de la branche
git show --stat  Permet de voir le message +  la liste des fichiers modifiés

git log, arguments & alias

git log
git log [branche]
git log --oneline --color --decorate --graph --all   Ça permet de voir + ou - l'arbre.

J'en ai fait un alias dans ~/.gitconfig :

[alias]
     lg = log --graph --pretty=format:'%C(auto)%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cd) %C(cyan)<%an>%Creset' --abbrev-commit

Du coup je peux appeler:

git lg ou   git lg --all
git log --oneline --decorate --color --stat
git lg --stat    Montre les fichiers modifiés :-}

git rm

Parce que git rm fait vraiment: "rm && git add"

git rm  chemin/vers/fichier.pyc

ou:

rm chemin/vers/fichier.pyc
git add chemin/vers/fichier.pyc   

git rm est plus simple

git cherry-pick

Prendre un commit et le mettre (placer un pointeur) sur la branche en cours.

git cherry-pick 

Pour prendre ton commit "Initial check-in".

git cherry-pick 477006577775a1048310f4509fa1008602ee5789

Le cycle Git review

Le commit à une adresse qui est associée à ton compte Gerrit et il devrait l'accepter ensuite pour modifier un changement dans gerrit tu le récupère via:

git-review -d  123456

Tu fais tes modifications et vérifie le statut de git.

git status 

Tu ajoutes les modifications avec:

"git add"

puis tu modifies le commit existant avec:

git commit --amend

et ensuite

git-review

Ça envoi le nouveau commit à Gerrit. Si le champs "Change-Id" est le même ton nouveau commit est reconnu par Gerrit comme étant le changement 123456 et l'interface affichera un nouveau patchset.

git commit pour modifier auteur et mail

 git commit --amend --reset-author

Si vous avez utilisé #git config pour modifier l'auteur et son mail la commande ci-dessus corrige les valeurs dans le commit.

git commit --amend --author="Youni Verciti <user@domain.tldt>"   

Corriger l'auteur et son mail en modifiant le commit.

git show pour confirmer que l'auteur a changé

Ce nouveau commit devrait pouvoir atterrir dans Gerrit. En fait il faut voir le dépôt git comme un arbre avec un tronc, des branches et des feuilles. Les commands git permettent de triturer l'arbre. git cherry-pick ca prend une feuille et la met sur une autre branche Quand un commit est créé git fait un hachage du message + les modifications et donne un identifiant unique et on peut alors le prendre (git cherry-pick) et le poser là où on veut.

Ça doit t'afficher l'éditeur te permettant de modifier le message de commit. Il faut ensuite sauver dans vim mode commande avec ':' puis 'x' pour sauver et quiter. git-review devrait marcher.

Git & branches

git branch      voir les branches locales
git branch --merged | --no-merged    filtrer les branches mergées ou non
git remote -v   pour voir les noms, liste les depots externes
git branch -r   liste les branches sur les dépôts distants

--merged et --no-merged sont des options très utiles qui permettent de filtrer les branches de cette liste selon que vous les avez ou ne les avez pas encore fusionnées avec la branche courante.

git branch -d test
git checkout -b propre -t origin/master Pour faire une nouvelle branche partant du commit dans Gerrit

Le depot distant a peut être un autre nom. Dans ce cas il s'appelle "gerrit" et non origin et ce qu'il y a dans gerrit est donc connu avec le nom gerrit/master donc on peut refaire une branche "propre" avec:

git checkout -b propre gerrit/master

Ça va faire une branche nommée "propre" dont le commit est celui dans gerrit.

git branch -vv

Va lister l’ensemble de vos branches locales avec quelques informations supplémentaires, y compris quelle est la branche suivie et si votre branche locale est devant, derrière ou les deux à la fois.

Pour basculer sur la branche testing existante, il suffit de lancer la commande
$ git checkout testing
Cela déplace HEAD pour le faire pointer vers la branche testing.

Changer de branche modifie les fichiers dans votre répertoire de travail.

Suivre les branches

Les branches de suivi sont des branches locales qui sont en relation directe avec une branche distante.

git checkout -b [branche] [nomdistant]/[branche].

C’est une opération suffisamment courante pour que Git propose l’option abrégée --track :

$ git checkout --track origin/correctionserveur

Si vous avez déjà une branche locale et que vous voulez l’associer à une branche distante que vous venez de récupérer ou que vous voulez changer la branche distante que vous suivez, vous pouvez ajouter l’option -u ou --set-upstream-to à la commande git branch à tout moment.

$ git branch -u origin/correctionserveur

Le chapitre sur les branches Les branches avec Git.

git merge (Fusions)

Extraire la branche dans laquelle vous souhaitez fusionner (se placer sur la branche qui recevra les modifs.) Dans l'exemple suivant nous fusionnons les données de prob53 dans master.

$ git checkout master
  Switched to branch 'master'
$ git merge prob53
  Merge made by the 'recursive' strategy.
  README |    1 +
  1 file changed, 1 insertion(+)
Ne rebasez jamais des commits qui ont déjà été poussés sur un dépôt public!
Dans un premier temps préférer git merge à git rebase.

git fetch & git merge better than git pull

Il existe une commande appelée git pull qui consiste essentiellement en un git fetch immédiatement suivi par un git merge dans la plupart des cas. Si vous disposez d’une branche de suivi configurée comme illustré dans le chapitre précédent, soit par une configuration explicite soit en ayant laissé les commandes clone ou checkout les créer pour vous, git pull va examiner quel serveur et quelle branche votre branche courante suit actuellement, synchroniser depuis ce serveur et ensuite essayer de fusionner cette branche distante avec la vôtre.

Il est généralement préférable de simplement utiliser les commandes fetch et merge explicitement plutôt que de laisser faire la magie de git pull qui peut s’avérer source de confusion.

  1. git fetch https://y-verciti@gerrit.wikimedia.org/r/labs/tools/vocabulary-index
  2. git pull https://y-verciti@gerrit.wikimedia.org/r/labs/tools/vocabulary-index

git push

git push (serveur distant) (branche)

Si vous obtenez un message "...you need push rihgts..." en réponse à la commande "git push" vers la branche "gerrit/master", vérifiez les droits d'accès via Gerrit/Project/Access. Ajoutez la permission "push" au groupe "tool.account".

New tool project owner, if your "git push" are rejected on the "gerrit/master" branch, check the gerrit/project/acess and add the push permission onto the tool group.

Multiple commits

La branche est 'propre' avec deux commits par dessus: A et B, quand tu fais un git-review, ça t'envoi un avertissement car tu vas envoyer deux commits ; généralement on en envoi qu'un mais si tu as déjà envoyé A alors aucun problème. Ça va créer B si plus tard tu rebases ta branche locale avec A + B, git-review te mettra encore le même message puis ça mettra A à jour (son commit parent a changé à cause du rebase) et B à jour.

  • C'est parfait, je vois "mes" fichiers dans l'interface de gerrit! Mais pourquoi je ne les vois pas lorsque je clone le projet gerrit?

Tes commits sont dans un tampon / en attente de validation dans le projet Gerrit il n'y a que les commits approuvé.

https://gerrit.wikimedia.org/r/#/q/owner:%22Youni+Verciti%22,n,z https://phabricator.wikimedia.org/F3370245 https://phabricator.wikimedia.org/F3370247 ca c'est mieux J'ai récupéré tout les commits / références dans Gerrit, la troisième ligne avec 'origin/master' c'est la branche 'master' dans Gerrit. Les deux premières lignes ce sont les patches que tu as envoyé dans Gerrit ; ils sont bien présent, mais avec une référence sous /changes/XX/YYYYXX/P où

YYYYXX est le numéro de changement dans Gerrit
P le numéro du patch pour ce changement

Mais ces commits ne sont pas encore dans la branche 'master' de Gerrit. Il faut les approuver via https://gerrit.wikimedia.org/r/#/q/owner:%22Youni+Verciti%22,n,z par exemple https://gerrit.wikimedia.org/r/#/c/271268/ est en status 'Review in Progress' Tu peux ajouter les autres membres du projet pour qu'ils inspectent ton code et vérifient si tout va bien.

Je viens de faire un commentaire sur https://gerrit.wikimedia.org/r/#/c/271268/ pour indiquer que les fichiers .pyc ne doivent pas être ajouté et j'ai fait un vote Code-Review=-1 indiquant qu'il y a un probleme. L'idée c'est d'éviter de mettre des patches qui ne sont pas finit dans la branche. Le travail est fait dans un tampon (les changements) et c'est seulement lorsque ces changements sont prêt / parfait qu'ils atterrissent dans la branche ainsi la branche est toujours 'parfaite'.

git reset pour détruire un commit ou reculer sur la branche

Ta branche 'propre' a divergé de 'master' de deux commits "d3bd2c0c7cb9 Initial check-in" que tu veux éditer mais le bout de la branche (et donc ton emplacement de travail) est sur le deuxième commit: "35e4e857 Add the public_html folder to easily update the html code". Donc si tu modifies et fait un amend ça modifie: "35e4e857 Add the public_html folder to easily update the html code". Mais le commit en cours c'est celui ajoutant le public HTML il faut revenir au commit qui a le problème

> Your branch is ahead of 'gerrit/master' by 2 commits.

Mais tu es toujours sur le mauvais commit, il faut récupérer le bon avec "git-review -d" ou revenir en arrière d'un commit:

git reset --hard HEAD^ 

Ce qui au passage supprime tes modifs en cours donc pour résumer: nettoyer!

> HEAD is now at 35e4e85 Add the public_html folder to easily update the html code

Revenir en arrière d'un autre commit:

git reset --hard HEAD^
> HEAD is now at d3bd2c0 Initial check-in

doc sur Gerrit

Irc

http://pastebin.com

  1. wikimedia-releng
  2. wikimedia-labs