Bifurcar un subdirectory de un repository en GitHub y hacerlo parte de mi propio repository

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

Básicamente quiero bifurcar el Confluence Skin usado 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 repository de XBMC, por lo que una simple acción de fork no funcionará.

Aquí están mis requisitos generales:

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

  • Necesito poder mantenerlo enlazado dentro del repository original de XBMC para recibir confirmaciones previas, ya que mis modificaciones generalmente estarán basadas en temas, en lugar de funcionalidades.

Gracias a la respuesta publicada por tbekolay, he podido hacer un subtree dividido para tomar solo la parte skin.confluence de repos y esencialmente crear una twig, sin embargo no estoy seguro de cómo mantenerlo vinculado con el repository XBMC original mientras se está empujado a mi propio repository 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 a medida que lo hace (especialmente si es nuevo en git ).

La herramienta que utilizaremos para este trabajo es el git subtree .

Configurando un repository

Comience por clonar todo el repository de XBMC.

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

Comenzamos en la twig master por defecto. Queremos crear nuestra propia twig master , así que cambiemos el nombre de master a upstream-master .

 git branch -m upstream-master 

Ahora usa la git subtree split para include solo la parte que quieras. Haremos que la split sea una nueva twig llamada upstream-skin .

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

Esto le proporciona una nueva twig upstream-skin que solo contiene los contenidos de addons/skin.confluence y con un historial filtrado que contiene solo los commits que modificaron los files en addons/skin.confluence .

Ahora, configuremos nuestros controles remotos. Como clonó xbmc/xbmc.git , el control remoto de origin apuntará allí. Cambiemos el nombre a upstream .

 git remote rename origin upstream 

Haga un repository en Github para contener sus modificaciones a addons/skin.confluence . Como ejemplo, usaré tbekolay / xbmc-skin, pero lo replaceé con tu propio repository. Agregue este repository como un control remoto y empuje su bifurcación upstream-skin hacia él.

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

Finalmente, crearemos una nueva twig llamada master que contendrá sus cambios.

 git checkout -b master git push -u origin master 

Ahora tiene una "bifurcación" del subdirectory addons/skin.confluence .

Hacer cambios en sus repositorys

Cuando maneja sus propios repositorys locales y remotos, puede usar los commands git normales. Asegúrate de hacer esto en la twig master (o en alguna otra twig, si lo deseas) y no en la twig upstream-skin , que solo debe contener confirmaciones del proyecto ascendente.

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

Recibiendo confirmaciones aguas arriba

Cuando trabaje con el repository en sentido ascendente, deberá usar una combinación de commands del git subtree de git y git subtree . Para get nuevos commits filtrados, tenemos que hacerlo en tres etapas.

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

 git checkout upstream-master git pull 

Esto debería desplegar nuevos commits, si hay alguno.

Luego, actualizaremos upstream-skin con la nueva versión filtrada de los commits. Dado que el git subtree asegura que los hashes de confirmación serán los mismos, esto debería ser un process limpio. Tenga en count que desea ejecutar estos commands mientras aún está en la twig de upstream-master .

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

Con upstream-skin ahora actualizado, puede actualizar su twig master como mejor le parezca (fusionando o rebase).

 git checkout master git rebase upstream-skin 

Tenga en count que el repository de XBMC es gigantesco, y los commands del git subtree tardarán bastante time en filtrar todo ese historial, y dado que está regenerando el subtree dividido cada vez que interactúa con el repository remoto, es bastante caro operación. No estoy seguro si esto se puede acelerar.

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