git github repository git-subtree xbmc

Bifurcando un subdirectorio de un repositorio en GitHub y haciéndolo parte de mi propio repositorio



repository git-subtree (1)

Disculpas, soy muy nuevo en Git y GitHub, he leído algunas cosas pero no estoy seguro de que lo que estoy tratando de hacer sea del todo posible.

Básicamente, quiero bifurcar la máscara de confluencia utilizada en XBMC y modificar varios elementos ubicados aquí:

https://github.com/xbmc/xbmc/tree/master/addons/skin.confluence

Sin embargo, no quiero bifurcar todo el repositorio de XBMC, por lo que una simple acción de bifurcación no sirve.

Aquí están mis requisitos generales:

  • Me gustaría tomar el contenido de la carpeta skin.confluence y ponerlo en un repositorio en mi propia cuenta de GitHub

  • Necesito poder mantenerlo vinculado dentro del repositorio original de XBMC para recibir confirmaciones en sentido ascendente, ya que mis modificaciones generalmente se basarán en el tema, en lugar de la funcionalidad.

Gracias a la respuesta publicada por tbekolay, he podido hacer una división de subárbol para tomar solo la parte skin.confluence del repo y esencialmente crear una rama, sin embargo, no estoy seguro de cómo mantenerlo vinculado con el repo XBMC original mientras estoy Empujado a mi propio repo con mis modificaciones.


Esto es posible principalmente con git , aunque no es un caso de uso típico, por lo que puede haber algunos bordes ásperos al hacer esto (especialmente si es nuevo en git ).

La herramienta que usaremos para este trabajo es git subtree .

Configuración de un repositorio

Comience por clonar todo el repositorio de XBMC.

git clone https://github.com/xbmc/xbmc.git cd xbmc

Comenzamos en la rama master por defecto. Queremos hacer nuestra propia rama master , así que vamos a cambiar el nombre de master a upstream-master .

git branch -m upstream-master

Ahora use la git subtree split para incluir solo la parte que desee. Haremos la parte separada una nueva rama llamada upstream-skin .

git subtree split --prefix=addons/skin.confluence -b upstream-skin git checkout upstream-skin

Esto le da una nueva rama de upstream-skin que solo contiene los contenidos de addons/skin.confluence , y con un historial filtrado que contiene solo las confirmaciones que modificaron los archivos en addons/skin.confluence .

Ahora, vamos a configurar nuestros mandos a distancia. Desde que clonó xbmc/xbmc.git , el control remoto de origin apuntará allí. Vamos a cambiarle el nombre a upstream .

git remote rename origin upstream

Haga un repositorio en Github para contener sus modificaciones a addons/skin.confluence . Como ejemplo, usaré tbekolay / xbmc-skin, pero reemplazarlo con su propio repositorio. Agregue este repositorio como control remoto y empuje su rama hacia upstream-skin .

git remote add origin https://github.com/tbekolay/xbmc-skin.git git fetch origin git push -u origin upstream-skin

Finalmente, haremos una nueva rama llamada master que contendrá sus cambios.

git checkout -b master git push -u origin master

Ahora tiene un "fork" del subdirectorio addons/skin.confluence .

Haciendo cambios a tus repositorios.

Cuando estás tratando con tus propios repositorios locales y remotos, puedes usar los comandos normales de git . Asegúrate de hacer esto en la rama master (o en alguna otra rama, si quieres) y no en la rama del upstream-skin , que solo debe contener los compromisos del proyecto anterior.

git checkout master echo "My XBMC Skin" > README git add README git commit -m "Added README" git push

Recibiendo confirmaciones en sentido ascendente

Cuando estés tratando con el repositorio anterior, deberás usar una combinación de comandos git y git subtree . Para obtener nuevos compromisos filtrados, tenemos que hacerlo en tres etapas.

En la primera etapa, actualizaremos upstream-master a la versión actual del repositorio XBMC.

git checkout upstream-master git pull

Esto debería derribar nuevos compromisos, si hay alguno.

A continuación, actualizaremos la versión anterior con la nueva versión filtrada de las confirmaciones. Como el git subtree garantiza que los hashes de confirmación serán los mismos, este debería ser un proceso limpio. Tenga en cuenta que desea ejecutar estos comandos mientras aún se encuentra en la rama upstream-master .

git subtree split --prefix=addons/skin.confluence / --onto upstream-skin -b upstream-skin

Con upstream-skin ahora actualizado, puedes actualizar tu rama master como mejor te parezca (ya sea combinando o reabasteciendo).

git checkout master git rebase upstream-skin

Tenga en cuenta que el repositorio de XBMC es gigantesco, y los comandos del git subtree tardarán bastante tiempo en filtrar todo ese historial, y como se regenera el subárbol dividido cada vez que interactúa con el repositorio remoto, es bastante caro operación. No estoy seguro si esto puede ser acelerado.

Esta publicación del blog entra en más detalles sobre los comandos anteriores. También vea los documentos de git-subtree para más detalles.