Precargar el repository git?

Si ya tengo los mismos files localmente, en lugar de tirar de un gran directory de files desde un repository remoto, ¿hay alguna manera de "precargar" mi repository local con los files? Ya tengo los mismos files localmente en el control remoto, simplemente no están en el repository local.

Aquí está mi situación:

Tengo un website remoto que tiene un gran directory de resources (muchos gigs) (imágenes, PDF, swfs, flvs). He configurado un repository git para este sitio remoto y lo he clonado localmente, utilizando el file .gitignore para excluir el directory de grandes resources de ser incluido en el repository.

Me gustaría hacer que el directory de grandes resources forme parte del repository remoto ahora, pero eso boostá drásticamente el tamaño del repository y cuando haga mi próxima extracción local, me espera una larga espera / descarga. Así que básicamente estoy esperando que haya una manera de decirle a Git: "Te voy a pedir que obtengas ese repository que de repente es mucho más grande, pero ya tengo la mayor parte de lo que lo está haciendo tan grande". ¿O esto podría irse para otro lado, donde agrego primero los files a mi repository local y luego, de alguna manera, los repositorys se dan count de que tienen los mismos files y no es necesario transferirlos?

Esto también sería útil cuando se incorporan nuevos desarrolladores a un proyecto grande y la mayor parte se puede proporcionar en DVD en lugar de tener que clonar / download un gran repository.

Sugiero que tengas mucho cuidado con la costumbre de agregar gigabytes de binarys en tu git sin tener que search opciones como git-annex .

Ahora. Simplemente tener los files localmente no es suficiente para que Git los use. Podrías usar git hash-object para agregar manualmente los grandes binarys a la database de objects de Git en cualquier lado de la gran brecha de networking y crear una confirmación que contenga exactamente los mismos files en el otro lado, pero cuando empujas / recuperas un commit Git isn ' lo suficientemente inteligente como para darse count de que esos objects ya existen en el otro lado; Debido a que la confirmación que se debe transmitir no existe, los grandes blobs se includeán en el package resultante que se transmite a través del cable. Para evitar esto, debe copyr manualmente todos los objects de tree y de compromiso, pero omita los grandes blobs. Posible, pero probablemente más problemas de los que vale.

Un enfoque más realist es tomar el golpe de la transferencia de networking una vez y ser inteligente acerca de las transferencias futuras. Puede tener un espejo local desde el que las personas puedan clonar. Si eso tampoco es lo suficientemente rápido, es una indicación de que tu git es demasiado grande.

También puedes clonar el git con git clone --reference <ref> <url> , donde <ref> es un directory local que contiene el git que estás clonando. Esto reutilizará todos los objects del git de reference, haciendo que el clon sea extremadamente rápido. Sin embargo, como se señala en la página de git clone , el nuevo clon se referirá directamente a los objects en el clon antiguo, por lo que si se elimina el clon antiguo, se encontrará en problemas. Para copyr realmente los objects, puede ejecutar git repack -a después de la clonación.

 git clone --reference /some/old/clone http://example.com/some/git dirname cd dirname git repack -a rm .git/objects/info/alternates 

El último command elimina el enlace al git de reference para que Git no intente search objects allí en el futuro.

Para distribuir un repository de Git en, por ejemplo, DVD o mecanismos de almacenamiento similares, mire en el git bundle . Ver, por ejemplo, cómo hacer packages de un repository completo .

Solo pongo el código fuente de git, todo parte de imágenes, pdfs, imágenes. Crearía un server de almacenamiento por separado y en mi aplicación lo vincularé al almacenamiento.