tag - Git-Incluir archivos de otros repositorios
git tags best practices (1)
Git no tiene soporte para seleccionar archivos seleccionados en un proyecto remoto. Puede seleccionar los archivos que desee con un subárbol y luego buscar algún tipo de estrategia para volver a ingresarlos, pero eso suele ser muy complicado, especialmente si de repente decide que desea un par de archivos más de los que escogió originalmente.
Lo que suelo terminar es usar symlinks
. Esto se puede hacer agregando los proyectos como submódulos en su proyecto, y luego vinculando los archivos en la ubicación correcta.
Tu ejemplo sería algo como esto:
$ git clone <url> myproject
$ cd myproject
$ git submodule add <url> external_library
$ git submodule add <url> external2
$ cd scripts
$ ln -s ../external_library/common1.js
$ ln -s ../external_library/plugin2.js
$ cd ../styles
$ ln -s ../external2/common.css
Para hacer que los enlaces simbólicos funcionen en Windows:
- Si es miembro del grupo de administradores, debe desactivar el control de acceso de usuario (UAC) y luego reiniciar la computadora.
- Si no es un administrador, necesita obtener el privilegio SeCreateSymbolicLinkPrivilege
Luego, antes de hacer cualquier cambio, iría y crearía una nueva rama:
$ cd external_library
$ git checkout -b myproject
# make changes back in ../myproject
$ git commit <files> # in external_library
Luego puede empujar su sucursal a github o algo así y enviar una solicitud de extracción al autor para que contribuya con sus cambios.
Puedes mantenerte sincronizado de esta manera:
$ cd external_library
$ git checkout master
$ git pull
$ git checkout myproject
$ git merge master
También debe actualizar el proyecto principal cuando cambie el submódulo (por ejemplo, git commit external_library
). Cualquier persona que use su proyecto necesitaría hacer un git clone --recursive <url_to_myproject>
.
NOTA: Puede lograr la mayor parte de esto sin usar una rama separada para su proyecto. Usa lo que tenga más sentido para ti.
Con Git, me gustaría incluir algunas bibliotecas JS / CSS comunes y / o métodos de utilidad (es decir, archivos específicos de otro repositorio) en mi proyecto, y me gustaría que estén siempre actualizados. Realmente no quiero todo el repositorio remoto (s). Bonificación si puedo trabajar en mis "copias locales" de los archivos remotos y hacer una copia de seguridad de los cambios.
Un ejemplo un tanto paralelo: en ASP.NET, lo haría haciendo referencia a los archivos .dll
otras bibliotecas ("remotas") (sin "copiar local"), de modo que cada vez que recompile las bibliotecas externas, mi proyecto apunte a Las nuevas versiones.
Escenario de ejemplo
Mi proyecto es ... MyProject , y solo quiero un par de archivos de los repositorios externos ExternalLibrary y External2 . Preferiría no clonar cada repositorio en otro lugar y copiar y pegar los archivos en mi repositorio. Si hago una mejora en MyProject/scripts/common1.js
, me gustaría MyProject/scripts/common1.js
a ExternalLibrary .
- Mi proyecto/
- index.html
- guiones/
- mycode.js
- otherplugin.js
- common1.js <- desde ExternalLibrary
- plugin2.js <- desde ExternalLibrary
- estilos /
- mystyle.css
- common.css <- desde External2
- Biblioteca externa /
- common1.js
- plugin1.js
- plugin2.js
- manojo de otro ...
- Externo2 /
- common.css
- manojo de otro ...
Referencias relacionadas:
- Git: ¿cómo trabajar con múltiples repositorios?
- ¿Cómo retirar un solo archivo del repositorio de git?
- Obtenga el archivo de otro desarrollador GIT local y agregue al repositorio principal
- ¿Se puede crear un repositorio git donde las ramas son clones de otros repositorios?
- http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html