+ (if destfile
+ (let ((mybuff (get-buffer-create "vc-git-checkout-tmp")))
+ (let ((rv
+ (vc-git--run-command-out
+ mybuff "cat-file" "blob"
+ (concat (or rev "HEAD")
+ ":"
+ (let ((output (vc-git--run-command-string
+ (file-relative-name file)
+ "ls-files" "--full-name")))
+ (string-match "\\(.*\\)" output)
+ (match-string 1 output))
+ )))
+ )
+ (if rv
+ (save-current-buffer
+ (set-buffer mybuff)
+ (set-visited-file-name destfile t)
+ (save-buffer)
+ )
+ rv)))
+ (vc-git--run-command file "checkout" (or rev "HEAD"))))