2009-10-24 12 views
25

Duplicar posibles:
Is there any way to clone a git repository’s sub-directory only?partes clon de un proyecto github

estoy tratando de clonar partes de un proyecto github pero sólo pueden obtener la carpeta raíz. Esta es la primera vez que trato de usar github y acabo de instalar tortoisegit, estoy acostumbrado a svn y cvs, donde puedes simplemente tomar una carpeta que deseas pagar, pero parece que git solo tiene un archivo .git en la carpeta raíz No estoy seguro de qué hacer.

+0

Parece extraño que solo haya obtenido el directorio .git. ¿Clonó el repositorio correctamente? – Spoike

+0

Creo que me malentendió, recibo todos los archivos pero solo quiero una subcarpeta del proyecto. – Dennis

Respuesta

8

Hay una combinación de subárbol.

Pero aquí hay una solución más fácil pero parcial que quizás sea lo suficientemente buena para sus necesidades. Solo tenedor y fusionar periódicamente.

  1. Tenedor (clon) el repositorio
  2. eliminar las partes que no necesite y mover la subcarpeta a donde se necesita
  3. Commit

En el futuro, cuando se desea sincroniza una copia de seguridad con el código Git anterior, solo conéctalo con tu tenedor. Los archivos que guardó se sincronizarán con los de arriba, y es posible que deba realizar algunas limpiezas pequeñas, que son fáciles de ver en git status.

+2

Suena complicado, ¿por qué alguien usaría git sobre svn o cvs? – Dennis

+1

En el contexto de GitHub, diría que Git hace que sea más fácil cooperar con otros, como equipos dedicados o de algún colaborador ocasional. – JasonSmith

7

En la comunidad de Git, lo que usted quiere se llama "extracción parcial". Actualmente no es compatible con Git, pero aparece de vez en cuando en la lista de correo. Git tiene partes de las partes internas necesarias para admitir el pago parcial, pero no hay una manera fácil de usarlas como usuario. Supongo que Git eventualmente podrá hacer pagos parciales, pero puede pasar un tiempo antes de que suceda.

Además de jhs's answers (combinación de subárbol; rm, mv, confirmar, fusionar), también existe a third-party ‘subtree’ command que podría ayudar a que sea más fácil trabajar con transferencias parciales. Aunque ese no es su objetivo principal, tampoco es obvio cómo puede usarlo para trabajar con un pago parcial. Si ya conoces a Git lo suficiente, puedes resolverlo, pero si eres nuevo en Git, este comando del subárbol probablemente sea bastante opaco.

Por último, si todo lo que desea hacer es descargar los archivos más recientes, es posible que pueda use git archive to download a tar file of a specific branch or tag (or any commit-ish). Es posible que esto no funcione con GitHub (depende de la configuración del servidor), no lo he comprobado. Incluso si no funciona directamente, puede clonar a su propio repositorio espejo 'descubierto' y luego extraer (subárbol) de eso.

+1

Esto puede haber sido agregado desde Oct'09, pero para obtener un archivo de GitHub, en realidad hay un botón 'Descargar' en el área superior derecha de cualquier repositorio/bifurcación/sucursal/confirmación que le permitirá extraer una copia de archivo de el código de ese punto en la historia (por ejemplo, una confirmación anterior si navegas allí primero) – johnny

-1

Esto no es realmente algo que hagas en git. Recuerde que está utilizando un DVCS, por lo que está reduciendo el historial de repositorio completo: ¿qué se supone que sucederá con los commits que cambian archivos fuera del directorio que está bajando?

Si un proyecto es lo suficientemente grande, entonces el mantenedor del repositorio que está clonando debe usar submódulos para dividir las secciones, de modo que los desarrolladores solo puedan desplegar las áreas en las que desean trabajar.

Git (bueno, DVCS en general) no está diseñado tanto para los usuarios finales como para los desarrolladores. Encuentro que git (especialmente en combinación con github) es increíblemente útil para la codificación.Si hay un proyecto en Github con el que quiero contribuir, simplemente lo bifurco, lo jalando, hackhackhack, push up y envío una solicitud de extracción, easypeasy, en lugar de hacer un checkout, hackear, crear un diff, intentar encontrar dónde enviarlo por correo electrónico, y esperando que el diferencial no se rompa antes de que los desarrolladores lo fusionen.

Git en su conjunto es ciertamente más complicado que svn, pero eso se debe a que la codificación es un proceso complicado. El flujo de trabajo de VCS centralizado es increíblemente doloroso para mí, porque crecí en DVCS y no tengo permitido hacer todo tipo de cosas a las que estoy acostumbrado. Entonces, sí, será más complicado usar git vs. svn si haces las mismas cosas, pero la ventaja es que hay así quemuchos más cosas que puedes hacer. Git fue desarrollado para el desarrollo de Linux kernel, y se nota.

+5

No veo por qué no debería ser algo provisto por git. La solicitud "darme todos los archivos que coincidan con /foo/bar/.* en commit 6789abc" está bien definida y es útil. – jameshfisher

Cuestiones relacionadas