Tengo un proyecto con git, y solo quiero clonar o extraer un directorio específico, como myproject / javascript, como lo hace Subversion.
hacer algunos cambios, comprometerse y retroceder nuevamente.
¿Es posible?
Tengo un proyecto con git, y solo quiero clonar o extraer un directorio específico, como myproject / javascript, como lo hace Subversion.
hacer algunos cambios, comprometerse y retroceder nuevamente.
¿Es posible?
Respuestas:
git fetch
git checkout HEAD path/to/your/dir/or/file
Donde " path/...
" en (3) comienza en el directorio justo debajo de la raíz del repositorio que contiene su " .../file
"
TENGA EN CUENTA que en lugar de "HEAD", se puede usar el código hash de una confirmación específica, y luego obtendrá la revisión (archivo) o las revisiones (dir) específicas de esa confirmación.
--
embargo, @StanHolodnak no es obligatorio. Obliga a los bits después de ser interpretados como una ruta. Entonces, sí, si tiene un archivo con el nombre --help
que desea retirar, se requerirá el prefijo con estos guiones:git checkout HEAD -- --help
En un directorio vacío:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
o checkout
comandos, simplemente podemos hacer la solicitud de extracción después del remote add
comando para obtener toda la rama maestra.
Después de mucho buscar una respuesta, no encontrarla, rendirme, intentarlo de nuevo, etc., finalmente encontré una solución para esto en otro hilo SO:
Cómo git-pull todas las carpetas menos una
Para copiar y pegar lo que hay allí:
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
Para hacer lo que OP quiere (trabajar en un solo directorio), simplemente agregue ese directorio .git/info/sparse-checkout
al realizar los pasos anteriores.
¡Muchas, muchas gracias a @cforbish!
master
. Solo asegúrese de hacerlo git branch --set-upstream-to=origin/<branch>
para tirar correctamente
No es posible. Necesita extraer todo el repositorio o nada.
Quizás este comando pueda ser útil:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
Si desea obtener los últimos cambios en un directorio sin ingresarlo, puede hacer lo siguiente:
$ git -C <Path to directory> pull
git clone --filter
de Git 2.19
Esta opción realmente omitirá la búsqueda de objetos innecesarios del servidor.
He escrito una respuesta detallada que explica el estado actual de soporte en: ¿Cómo clono un subdirectorio solo de un repositorio Git?
Es muy probable que todo lo que se implemente git clone
en esa área también tenga git pull
análogos.
Probado y probado esto funciona!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
¡Espero que esto haya sido útil!
A veces, solo desea echar un vistazo a las copias anteriores de archivos sin la rigurosa rutina de pasar por los diffs.
En tal caso, es igual de fácil hacer un clon de un repositorio y verificar la confirmación específica que le interesa y echar un vistazo al subdirectorio en ese repositorio clonado. Como todo es local, puede eliminar este clon cuando haya terminado.
Para toda esa lucha con rutas de archivos teóricas y ejemplos como lo hice aquí, aquí un ejemplo del mundo real: Microsoft ofrece sus documentos y ejemplos en git hub, desafortunadamente reúnen todos sus archivos de ejemplo para una gran cantidad de temas en este repositorio:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Solo estaba interesado en los archivos js de Microsoft Dynamics en la ruta
msdn-code-gallery-community-s-z/Sdk.Soap.js/
entonces hice lo siguiente
crear un
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
archivo en mi carpeta de repositorios en el disco
git sparse-checkout init
en ese directorio usando cmd en windows
El contenido del archivo de
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
es
Sdk.Soap.js/*
finalmente hacer un
git pull origin master