J'ai une version d'un .tex
fichier d'un certain nombre de validations dont j'aimerais obtenir une copie. J'ai la valeur de hachage sha1 pour le commit qui a la version de ce fichier que je veux. Je ne souhaite pas remplacer la version actuelle du fichier. Au contraire, je veux simplement en obtenir une copie distincte qui reflète son état dans l'ancienne version.
De nombreuses questions similaires suggèrent d'utiliser git checkout <sha1> -- file.tex
, mais cela ne fait que donner "erreur: pathspec 'file.tex' ne correspond à aucun fichier connu de git."
Le fichier qui m'intéressait existait à l'origine dans le répertoire de niveau supérieur du référentiel. Je suis actuellement dans un sous-répertoire du référentiel essayant d'exécuter cette commande afin d'obtenir l'ancienne version de file.tex dans le sous-répertoire.
Est-ce possible? Comment puis-je faire ceci?
Vous pouvez utiliser git cat-file
pour vider le contenu du fichier vers la sortie standard et le rediriger vers la destination souhaitée:
git cat-file -p <sha1>:./file.tex > wherever.tex
Le ./
est nécessaire si vous êtes dans un sous-répertoire du référentiel, si vous êtes au niveau supérieur du référentiel, il peut être omis. En outre, cela peut ne pas fonctionner dans les anciennes versions de git, auquel cas vous devrez fournir explicitement le chemin complet du fichier par rapport à la racine du référentiel.
Je pense que la meilleure solution est d'écraser temporairement votre fichier. Dans votre niveau supérieur de votre référentiel:
git checkout <sha1> file.tex
cp file.tex directory
git checkout file.tex
Utilisez git show
avec des chemins de référentiel absolus:
workdir $ git show revision: repo/module/package/code.file> code.file.old
ou des chemins relatifs au répertoire courant:
package $ git show revision: ./ code.file> workdir/code.file.old
Contrairement à l'extraction d'un fichier, show
ne change pas intrinsèquement votre espace de travail, vous pouvez faire tout ce que vous voulez avec la sortie.
Merci à cette réponse , et bien sûr voir tous les détails dans le manuel .