GIT: Pagar en una carpeta específica

Quiero usar algo similar a:

git checkout -- <path>/<file> 

pero quiero download el file en la carpeta que elija, en lugar de sobrescribir el / local.

¿Alguna idea?

Como hacer un "git export" (como "svn export")?

Puedes usar git checkout-index para eso, este es un command de bajo nivel, si quieres exportar todo, puedes usar -a ,

 git checkout-index -a -f --prefix=/destination/path/ 

Para citar las páginas man:

El final "/" [en el prefijo] es importante. El nombre exportado literalmente solo tiene el prefijo con la cadena especificada.

Si desea exportar un determinado directory, hay algunos trucos involucrados. El command solo toma files, no directorys. Para aplicarlo a directorys, use el command 'search' y canalice la salida a git.

 find dirname -print0 | git checkout-index --prefix=/path-to/dest/ -f -z --stdin 

También desde las páginas man:

La intuición no es el objective aquí. Repetitividad es.

Otra solución que es un poco más limpia: simplemente especifique un tree de trabajo diferente.

Para pagar todo desde su HEAD (no índice) a un directory de salida específico:

 git --work-tree=/path/to/outputdir checkout HEAD -- . 

Para pagar un subdirectory o file de su HEAD a un directory específico:

 git --work-tree=/path/to/outputdir checkout HEAD -- subdirname 

Para un solo file:

 git show HEAD:abspath/to/file > file.copy 

Las soluciones anteriores no me funcionaron porque necesitaba verificar una versión labelda específica del tree. Así es como se supone que se use la cvs export , por cierto. git checkout-index no toma el argumento tag, ya que verifica los files desde el índice. git checkout <tag> cambiaría el índice independientemente del tree de trabajo, por lo que tendría que restablecer el tree original. La solución que funcionó para mí fue clonar el repository. El clon compartido es bastante rápido y no ocupa mucho espacio extra. El directory .git se puede eliminar si lo desea.

 git clone --shanetworking --no-checkout <repository> <destination> cd <destination> git checkout <tag> rm -rf .git 

Las versiones más nuevas de git deberían ser compatibles con git clone --branch <tag> para verificar la label especificada automáticamente:

 git clone --shanetworking --branch <tag> <repository> <destination> rm -rf <destination>/.git 

Si trabajas con tu característica y no deseas volver a la configuration maestra, puedes ejecutar:

 git worktree add ../myrepo_master master 

../myrepo_master directory ../myrepo_master con commit de la twig master , donde puede continuar trabajando

La respuesta de Adrian arrojó "fatal: esta operación debe ejecutarse en un tree de trabajo". Lo siguiente es lo que funcionó para nosotros.

 git worktree add <new-dir> --no-checkout --detach cd <new-dir> git checkout <some-ref> -- <existing-dir> 

Notas:

  • --no-checkout No pague nada en el nuevo worktree.
  • --detach No --detach una nueva twig para el nuevo tree de trabajo.
  • <some-ref> funciona con cualquier reference, por ejemplo, funciona con HEAD~1 .
  • Limpieza con git worktree prune .

Definí un alias de git para lograr exactamente esto (antes de encontrar esta pregunta).

Es una function corta bash que guarda la ruta actual, cambia al repository git, realiza un pago y regresa donde comenzó.

git checkto develop ~ / my_project_git

Esto, por ejemplo, verificaría la twig de desarrollo en el directory "~ / my_project_git".

Este es el código de alias dentro de ~/.gitconfig :

 [alias] checkTo = "!f(){ [ -z \"$1\" ] && echo \"Need to specify branch.\" && \ exit 1; [ -z \"$2\" ] && echo \"Need to specify target\ dir\" && exit 2; cDir=\"$(pwd)\"; cd \"$2\"; \ git checkout \"$1\"; cd \"$cDir\"; };f"