Git : récupérer le contenu un répertoire effacé par erreur

Bonjour,

j’ai heureusement fait un git add ; git commit -a très récemment, et malheureusement un rm dans le même mauvais répertoire (c’est rm qui est mauvais, pas le répertoire, … bon)

Je cherche la commande de git qui rétablirait tous ces fichiers (5 ans de comptes-rendus hebdomadaires d’utilisation… hebdomadaire!)

J’ai essayé:
git checkout de différentes façons, sans trouver la bonne formule, je crains de faire une manœuvre irréversible, la loi de Murphy étant grandement favorisée par mon ignorance!

Merci

Le rm a été fait sur la partie serveur ? si oui tu peux renvoyer ta branche de ton poste sur lune branche et effectué un merge avec la branche master.

C’est uniquement en local, sur mon portable.
Je n’ai utilisé aucune branche.

J’ai fait
git checkout b6cdegst
(le numéro du dernier commit)
qui n’ajoute rien !

git log
me rappelle par son commentaire, qu’il est produit par un script maison.
C’est peut-être un commit vide!
Je vais revoir ça

merci pour votre aide

Tu utilise git pour versionner des trucs sur ton portable hébergé sur ton portable ?
Tu peux expliquer ce que tu fais exactement ?

Bonjour,

$ apt-cache search testdisk
pas testé …

Ca serait bien d’éviter de répondre… plutôt que d’étaler ainsi ton ignorance, même du sujet ! :frowning:
Si l’idée peut sembler intéressante, il faut l’utiliser depuis un autre système, sur le disque en question - donc non « fonctionnel » - et sauvegarder ce qui pourrait l’être vers une autre partition, hors ce disque dur !


Et aucune sauvegarde régulière de ce genre de données qui semblent si importantes !?
:frowning:

Donc, tu ne commites aucunement ailleurs ?!

Je dispose bien entendu d’une sauvegarde sur disque externe, mais que je ne le transporte pas avec moi.

En urgence, j’espérais donc pouvoir utiliser git checkout, que j’utilise sur ce répertoire comme sauvegarde d’urgence.
Sauf que je sais faire (je crois!) un git commit -a en guise de sauvegarde, mais apparemment pas vraiment la commande git pour restaurer le dernier état «commité».

Chez moi, j’ai heureusement pu tout restaurer avec rsync.

Mais ma question demeure…

La commande git utilisée (non dans un script, mais dans un alias) est la suivante:

git add ./*txt ./*pdf ; git commit --message='révision produite par « ***(l' alias) »'

Merci

@Clochette

Je ne suis pas informaticien, et à part quelques petits scripts, je ne programme pas.
En revanche j’écris beaucoup, et j’utilise beaucoup LaTeX.

J’utilise git de plus en plus pour avoir un historique de versions, surtout, initialement, avec LaTeX qu’il est très facile de casser dés que je veux modifier quelque-chose d’autre que du texte, et même pour retrouver d’anciennes versions de texte souvent ou tardivement remanié.

Pour ma prise de notes hebdomadaire, j’ai donc un alias qui m’ouvre le bon répertoire, charge vim avec l’entête de la réunion et la date après avoir déchiffré les fichiers de notes précédents, utilisés pour consultation en cours de réunion.
Un script de fermeture fait l’inverse et en plus met à jour les fichiers par un «git commit».

Je n’utilise pas de réseau (à part internet, de chez moi, évidemment), mes seuls dépôts git sont donc locaux, et même spécifiques à différents répertoires.

Les commandes git utilisent en priorité le dépôt git le plus proche dans l’arborescence.
Autrement dit, elles ne se réfèrent au dépôt de la racine utilisateur que s’il n’y en a pas d’autre dans son «path» (son chemin ou son «dirname» si vous préférez).

En résumé,
pour ces 2 répertoires de prise de notes, j’ai 2 scripts, ouverture et fermeture de séance, pour chacun des 2 répertoires (et 2 dépôts git), et pas de réseau.
Je fais heureusement de «vraies» sauvegardes sur un disque dur externe, avec un script basé sur rsync, mais «git commit» est immédiat et systématique.

Merci pour votre intérêt

1 J'aime

intéressant ton usage de git, pour ce besoin-là ! :smiley:

perso, je ne connais pas assez git pour apporter une réponse fiable ; j’avoue même que git m’exaspère assez ! :wink:

D’après ce que j’ai cru comprendre:

git log fournit un numéro d’identification du commit
*git checkout <le n°> place sur une sorte de branche provisoire (You are in ‹ detached HEAD › state…) l’état de ce commit (pour moi actuellement, les fichiers *txt et *pdf, les pdf sont des courriels reçus, pas de LaTeX dans ce travail)

Mais je n’ai certainement pas compris car cette commande n’a eu aucun effet.

(Mes aliases sont incohérents, car git sauve mes notes avant chiffrage, ce qui n’assure évidemment pas vraiment la confidentialité recherchée! cette discussion vient de m’en faire prendre conscience!)

PS
git est aussi très utile pour préserver l’historique de mon fichier d’aliases, «~.bash_aliases», et les autres fichiers «~/.bash».

affiche les différents commit :wink:
https://git-scm.com/docs/git-log/fr


te permet de basculer d’une branche à l’autre, voire de restaurer des fichiers d’une branche de travail.
https://git-scm.com/docs/git-checkout/fr


Là, ton problème n’est pas un problème dû à un mauvaise usage de git.
Ainsi, si c’était le cas, tu aurais peut-être pu faire : git checkout -- <filename>

Je ne vois pas comment git pourrait rétablir la situation qu’il ne connaît pas.
Hormis, de faire un clone depuis ton git de sauvegarde, ou un git pull… pour récupérer les fichiers dans un état précédent.


Deux documentations vraiment utiles :

Tu n’as vraiment besoin de rien d’autres pour essayer d’appréhender les profondeurs et délicatesses de git, si ce n’est des tutos bien fichus - et il en existe quelques uns.

1 J'aime

Voila l’erreur:
D’une part j’omettais le «- -», accusé sans doute à tord de mon échec
D’autre part je mettais «*» comme noms de fichiers.
Fichier_* n’est pas un nom valide pour une liste de fichiers, donc pas non plus «*», sauf s’il est mis entre guillemets: «"*"» fonctionne.

La formule (que j’ai utilisé dans mes tests) pour récupérer tous les fichiers effacés depuis le dernier commit 0123abc est donc, simplement:

git checkout 0123abc -- "*"

sans oublier les «- -» ni les guillemets autour de «*»:
"*".

Merci pour ces liens (je me réfère à ProGit 2e édition en français, je crois que c’est le même que git-book).

1 J'aime

Il y a aussi gitmagic (traduit en français)
En ligne:
http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/
ou en pdf:
http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/book.pdf

Qu’on trouve dans le dépôt Debian: paquet gitmagic

2 J'aimes

Au temps pour moi, j’ai cru bien faire. C’est vrai que j’ignore ce qu’est Git, c’était certainement le mot clé dans ton titre. Toutes mes excuses. Pdt c’est Président directeur technique ?

Spécialement pour PengouinPdt :wink: , mais pour tout utilsateur de git et du shell bash.

Pour me simplifier le travail, bien que j’utilise rarement la facilité des branches sous GIT, mon prompt affiche l’existence d’un dépôt git dans le répertoire ou un répertoire parent en précisant la branche active.

Voici le script chargé dans .bashrc:PS1rc.txt (1,8 Ko)
(son extension est .sh ou rien du tout, et non .txt, nécessité par le filtre du forum)
promptBashGit_

PromptBranch_

PS
Je ne sais plus d’où a été inspiré mon script, mais on peut en trouver un certainement plus professionnel ici: (https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh)

1 J'aime

J’utilise Bash comme shell mais j’ai ajouté un très forte valeur ajouté avec Powerline et les greffons sympa de Vim pour la gestion Git, cela me permet de jongler et visuellement savoir où j’en suis.